우잉's Development

[LLM 기초] 프롬프트 엔지니어링 기초 1 본문

Deep learning/LLM

[LLM 기초] 프롬프트 엔지니어링 기초 1

우잉이 2023. 8. 31. 20:44
728x90
반응형
  • 프롬프트 엔지니어링 과정
    1. 프롬프트 결과 설정
    2. 프롬프트 평가 설계
    3. 그라운딩 설계 및 평가
    4. 프롬프트 디자인
    5. 모니터링 및 개선
  • 프롬프트 구성요소
    1. Role : 답변자로써 페르소나를 설정 답변에 대한 배경지식을 가지고 답하므로 더 높은 정확도로 답하게됨.
    2. Audience : 답변의 대상이 되는 특정 인구, 그룹 또는 개인의 페르소나
    3. Knowledge(Information) : 답변에 참고할 정보, 사용자의 질문에 해당하는 정보를 DB나 검색엔진등에서 가져와서 삽입 혹은 다음처럼, 유명한 정보 출처를 지정하는 방법 사용
      예) 위키피디아의 내용에 따라 나폴레오에 대해 설명해주세요.
    4. Task : 수행해야하는 특정 작업이나 목표
      예) 500단어로 자기소개서를 작성해주세요.
    5. Policy (Rule)
      :응답을 만들 때 따라야 하는 특정 정책이나 규칙
      예) 성격의 긍정적인 측면만을 강조하며 자기소개서를 작성해주세요.
      :응답에 사용해야 할 특정 톤, 유머, 감정등의 스타일도 포함. (style)
       예) 유머러스한 톤으로 생일 축하 메시지를 작성해주세요.
      : 응답이 따라야 하는 특정 제한 사항이나 조건 (Constraint)
        예) 한 페이지 내로 비즈니스 제안을 작성해주세요.
    6. Format : 응답이 따라야하는 특정 형식이나 구조
      예) JSON형식으로 결과를 출력해주세요.
    7. Examples : 원하는 응답의 예시를 제공하여 원하는 출력을 더 잘 이해하도록 도움.
      예) 다음과 같은 형식으로 출력해주세요.
         {"name" : "wooing", "age": 20, ...}
  • 프롬프팅 테크닉 7가지
    1. Few-shot examples
      - 모델의 몇가지 예시를 제공하고 해당 예시를 참고하여 답변을 하도록 하여 더 나은 성능을 발휘하도록 만드는
      기술 
      1) Zero-shot : 예제를 제공하지 않음
      2) One-shot : 한 개의 예제를 제공함
      3) Few-shot : 두 개 이상의 예제를 제공함
      !! 제약사항!!
      - 충분히 큰 모델에서만 유의미하게 작동
      - 산술 추론 문제에는 적합하지 않음
      - 정답을 정확히 주기 보다 레이블의 랜덤한 분포를 가진 것이 더 나음
        (샘플의 내용이나 논리가 아니라, 형식만 참고한다는 연구가 있음)

    2. Chain-of-Thought (CoT)
      - LLM에게 이유에 대해서 설명하도록 만들어 답을 더 정확하게 생성하도록 만드는 기술로, 중간 추론 단계를 
      거치도록 하여, 복잡한 사고가 필요한 작업에 정확도를 향상 시키는 방법.
      - 답이 나오는 과정에 대해 설명한 예시를 보여주고, 지시에 대한 답을 생성할 때 예시와 동일한 방식으로 그에
      대한 과정을 설명하도록 만듦. 
      - 산수를 잘 못하는 LLM에게 이 방법을 사용하면 정확도가 올라갑니다.
      - Zero-shot CoT :  다음 문구를 마지막에 추가함으로써 CoT예제를 제공하는 것과 같은 효과를 내어 성능을 
      향상시키는 방법. (예: 단계별로 생각해봅시다. 라는 문구를 추가.)

    3. Self-Consistency
      - 여러가지 방식의 CoT를 제공하고 이를 통해서 다양한 추론과정을 거친 다음 그중에 가장 많이 나온 즉, 일관된
      답을 선택하는 확장된 방법
      - 20개정도의 추론과정을 주는게 가장 좋은 방법을 낸다는 논문 결과가 있다.
      - 추론경로를 최대한 다양하게 제공해야 하므로 토큰수를 많이 사용한다. 결과 취합을 위한 후처리도 필요하다.

    4. Selection-Inference
      - 복잡한 문제를 해결하기 위해서 여러 추론단계를 연결하기 위한 기술
      - 선택과 추론사이를 번갈아 가면서 해석 가능한 원인과 결과에 추론 단계를 생성해서 최종단계를 내는 프레임
      워크
      - context에서 질문에 답할 수 있는 정보를 선택한 다음, 그 선택한 정보를 기반으로 답변을 하게 만드는 방법
      - 추론 흔적이 남아 인과를 해석 가능하여 디버깅에 유용함.
      - 논문에서 제안하는 반복적인 Selection-Inference를 실사용 케이스에 구현하려면 추론단계를 생성하고 종료
      하는 프레임워크를 세심하게 구성해야 함.
      - 복잡한 추론 뿐만 아니라, 주어진 컨텍스트에서 정보를 정확히 추출하여 답하도록 하여 성능을 높이는데
      유용함.
    5. Least-to-Most
      - 하나의 문제를 더 작은 여러개의 하위 작업으로 분할하는 기법.
      - "{주어진문제}를 풀려면 먼저 다음 문제를 풀어야 합니다:" 라는 프론프트로 다음 문제(질문)을 생성하고, 해당 질문을 통해 다음 답을 생성. 이 과정을 최종 답변이 생성될 때 까지 반복.
      - 하위 작업을은 한번에 하나씩 해결되며, 이전에 생성한 답을 다음 문제를 해결하는데 사용함.
      - CoT와 Selection-Inference을 결합한 방법
      - Task를 분할하여 작은 문제로 나눠 해결하는, 분할 정복 방법으로 응용하여 AutonomousAgent개발 등에 사용

    6. ReAct
      - 실행 계획을 유도하고 추적하여 작업별로 실행할 액션을 선택하고 실행하는 방법
      - 외부 API와 상호 작용하여 검색엔진을 통해 신뢰할 수 있는 정보를 사용하거나, 계산기나 이미지 생성등의
      도구를 사용할 수 있음.
      - 실제 툴을 사용해서 정보를 주입하지 않아도, Wikipedia 검색을 시뮬레이션 하는 것 만으로 성능을 향상 시킬
      수 있음.
      - 기본 프롬프트가 매우 길어지므로 토큰 제어에 유의 할 필요가 있음.

    7. SelfEvaluation
      - LLM이 생성한 결과를 LLM이 평가하게 하여, 오류를 잡거나 결과를 향상 시키는 방법
      - 데이터셋 생성 자동화, RLHF의 AI피드백, 프롬프트 평가 자동화 등에 사용하여 데이터셋이나 LLM의 결과를 
      스스로 조정할 수 있게 함.
      - 구체적인 프레임 워크가 존재하는 것은 아니며, 스스로 평가한다는 컨셉으로 Self Critique, Constitutional AI등 다양한 응용 방식이 있음.
      - 장기적으로 Automatic Prompt Engineer, Autonomous Agent 등, AI가 스스로의 결과를 평가하고 향상 시키는
      방법이 가장 중요한 방법론 중 하나가 될 것으로 예상함. 다만, GPT-4 수준의 성능을 가진 LLM으로만 의미가 
      있는 평가를 할 수 있으므로, 당분간은 사용범위에 상당한 제약이 있음.
728x90
반응형
Comments