[프로그래밍] 프롬프트 엔지니어링

[프롬프트 엔지니어링] 프롬프팅 기법

JHVan 2024. 5. 28. 11:03

문맥 내 학습

언어모델은 주어진 입력에서 패턴을 파악해 알맞은 응답을 만드는 능력이 있음

샷 프롬프트(Shot Prompting)

제로샷 (Zero-Shot)

특정 예시 없이 질문을 바로 제시하는 방식

모델의 일반적인 지식을 기반으로 응답을 생성

Q: 서울의 인구는  명인가요? 
A: 서울의 인구는  1000 명입니다.

 원샷 (One-Shot)

하나의 예시를 제공하여 모델이 응답 패턴을 파악하게함

Q: 서울의 인구는  명인가요?
A: 서울의 인구는  1000 명입니다. 
Q: 부산의 인구는  명인가요? 
A: 부산의 인구는  350 명입니다.

 퓨샷 (Few-Shot)

여러 개의 예시를 제공하여 더 정확한 패턴 파악하게함

Q: 서울의 인구는  명인가요? 
A: 서울의 인구는  1000 명입니다. 
Q: 부산의 인구는  명인가요?
A: 부산의 인구는  350 명입니다. 
Q: 인천의 인구는  명인가요? 
A: 인천의 인구는  300 명입니다.

 

템플릿화 (Templating)

일정한 형식의 프롬프트를 만들어 모델이 그 형식에 맞춰 응답하도록 유도

[도시 인구 조사]
도시 이름: 서울
인구: 약 1000만 명

도시 이름: 부산
인구: 약 350만 명

도시 이름: 인천
인구: 약 300만 명

도시 이름: 대구
인구: 약 100만 명

 

역할 부여 (Role Assignment)

모델에게 특정 역할을 부여해 더 자연스럽고 일관된 응답을 생성

당신은 한국의 인구 통계 전문가입니다.  도시의 인구에 대해 답변해주세요.

Q: 서울의 인구는  명인가요?
A: 서울의 인구는  1000 명입니다.

 

제약 조건 설정 (Constraint Setting)

모델이 준수해야 할 규칙이나 제약을 명시

간단하고 정확한 답변을 제공해주세요. 
Q: 서울의 인구는  명인가요?
A:  1000 

 

few shot 프롬프팅의 구성요소

프롬프트 (지시)

모델에게 특정 작업이나 질문을 명확하게 제시

이는 모델이 어떤 정보를 제공해야 하는지 이해할 수 있도록 도움

Q: 서울의 인구는 몇 명인가요?

예시(Examples)

모델이 작업을 이해하고 패턴을 학습할 수 있도록 여러 개의 예시를 제공

예시는 질문과 그에 대한 답변으로 구성

Q: 서울의 인구는 몇 명인가요?
A: 서울의 인구는 약 1000만 명입니다.

Q: 부산의 인구는 몇 명인가요?
A: 부산의 인구는 약 350만 명입니다.

새로운 질문(New Prompt)

모델이 예시에서 학습한 패턴을 적용해 응답할 새로운 질문을 제시

Q: 인천의 인구는 몇 명인가요?

컨텍스트(Context)

예시와 새로운 질문 사이의 문맥을 제공

이는 모델이 응답을 생성할 때 참고할 수 있는 추가 정보를 포함할 수 있음

다음은 한국 주요 도시의 인구에 대한 정보입니다.

응답 형식(Response Format)

예시에서 일관된 응답 형식을 사용하여 모델이 동일한 형식을 따르도록 유도

이는 일관성을 유지하고 정확한 답변을 얻는 데 중요

Q: 서울의 인구는 몇 명인가요?
A: 서울의 인구는 약 1000만 명입니다.

Q: 부산의 인구는 몇 명인가요?
A: 부산의 인구는 약 350만 명입니다.

예시를 포함한 전체 구성

다음은 한국 주요 도시의 인구에 대한 정보입니다.

Q: 서울의 인구는  명인가요?
A: 서울의 인구는  1000 명입니다.

Q: 부산의 인구는  명인가요?
A: 부산의 인구는  350 명입니다.

Q: 대구의 인구는  명인가요?
A: 대구의 인구는  250 명입니다.

Q: 인천의 인구는  명인가요?
A:

 

 

장점
  • 말로 표현하기 어려운 지시사항을 언어모델이 자동으로 감지하여 따름
  • 예시를 잘 선택하면 성능이 크게 향상
단점
  • 입력의 길이가 크게 증가함
  • 잘못된 패턴을 이용하거나 예시를 과하게 따라하여 성능이 하락할 수 있음
  • 선택된 예시에 매우 민감
 

Few-Shot 프롬프팅을 사용할 때 주의해야 할 점:

  • 다양한 주제의 예시를 포함하여 모델이 다양한 맥락에서 패턴을 학습할 수 있도록 해야함
  • 예시의 응답 형식을 일관되게 유지하여 모델이 동일한 형식을 따르도록 유도해야함
  • 예시의 수를 적절히 조절하여 모델이 과도하게 특정 패턴에 치우치지 않도록 해야함
  • 예시를 통해 모델이 학습할 수 있는 명확하고 구체적인 정보를 제공해야함
  • 목표에서 벗어난 질문, 답변이 난해할 질문, 추가 정보가 필요한 질문 등 엣지 케이스에 대한 대처를 충분히 하여 할루시네이션(비슷한 맥락의 가짜 정)을 방지해야함

예시의 갯수는 많을수록 좋음

하지만 예시가 길어지면 비용 또한 증가하므로, 허용 가능한 비용의 범위에서 최대의/효과적인 예시를 사용해야함

 

언어모델의 약점: 복잡한 추론에 대한 한계

계획이나 다단계 추론을 요하는 복잡한 문제에 대해 낮은 성능을 나타냄

숫자, 심볼에 대한 이해가 부족함

복잡한 추론: 신뢰할 수 잇는 합리적 의사결정에 필수

 

COT(Change Of Thought) 기법

언어 모델이 복잡한 문제를 단계별로 풀어나가는 방식

각 단계를 명시적으로 표현하여 추론 과정을 더 투명하게 만들고, 정답을 도출하는 데 도움을 주는 기법

문제 해결 과정에서 논리적 단계를 따르도록 유도

 

COT 의 개념

Chain of Thought 추론의 기본 아이디어는 모델이 문제를 해결하기 위해 거쳐야 하는 중간 단계를 명확히 제시하는 것

단순히 입력에 대한 출력만을 생성하는 것이 아니라, 문제를 단계별로 분석하고 각 단계에서 논리적 추론을 수행

 

COT 의 장점

  • 추론 과정의 투명성 증가: 각 단계의 논리적 진행을 명시함으로써 모델의 추론 과정을 이해하기 쉬워짐
  • 복잡한 문제 해결 능력 향상: 문제를 작은 단계로 나누어 해결함으로써 더 복잡한 문제도 처리할 수 있음
  • 에러 디버깅 용이: 각 단계별로 진행 상황을 확인할 수 있어, 어디서 오류가 발생했는지 쉽게 파악할 수 있음

예시

COT를 사용하여 철수가 몇 개의 테니스 공을 가지고 있는지 계산하는 예시

Q: 철수가 6개의 테니스공을 가지고 있고, 2개의 테니스  세트를 샀고, 
각각의 테니스  세트에는 3개의 테니스 공이 있다면,
철수는 지금  개의 테니스 공을 가지고 있는지?

1. 철수가 원래 가지고 있는 테니스 공의 개수를 확인합니다.
   - 철수는 6개의 테니스 공을 가지고 있습니다.
2. 철수가 구매한 테니스  세트의 개수를 확인합니다.
   - 철수는 2개의 테니스  세트를 샀습니다.
3. 각각의 테니스  세트에 포함된 테니스 공의 개수를 확인합니다.
   - 각각의 테니스  세트에는 3개의 테니스 공이 있습니다.
4. 구매한 테니스  세트에서 추가된 테니스 공의  개수를 계산합니다.
   - 2세트 × 3개/세트 = 6
5. 철수가 원래 가지고 있던 테니스 공의 개수에 추가된 개수를 더합니다.
   - 6 + 6 = 12

A: 철수는 지금  12개의 테니스 공을 가지고 있습니다.

 

복잡한 문제에서의 COT

관계에 기반한 추론 문제에서 COT 사용

Q: 철수 +- 영희 이고, 영희 +- 바둑 이면, 철수 +- 바둑?

1. 철수와 영희의 관계를 방정식으로 나타냅니다.
   - 철수 = 영희 ± n
2. 영희와 바둑의 관계를 방정식으로 나타냅니다.
   - 영희 = 바둑 ± m
3. 철수를 바둑의 값과 관계짓기 위해 두 방정식을 조합합니다.
   - 철수 = (바둑 ± m) ± n
4. 두 개의 ±를 결합하여 하나의 ±로 나타냅니다.
   - 철수 = 바둑 ± (m ± n)

A: 철수는 바둑 ± k이고, 여기서 k는 m ± n의 결과입니다.

 

워킹 메모리 :  인간의 인지과정에서 정보를 단기적으로 저장하고 조작하는 능력

 

 

언어 모델과 워킹 메모리

언어 모델, 특히 GPT와 같은 대형 언어 모델은 인간의 워킹 메모리와 비슷한 방식으로 작동하지는 않지만, 비슷한 기능을 수행할 수 있는 구조를 가지고 있음.

  1. 컨텍스트 윈도우(Context Window)
    • 언어 모델은 입력 텍스트의 일정한 길이 내에서만 정보를 처리
    • 이 윈도우는 워킹 메모리의 일시적 저장 기능과 유사합니다.윈도우 크기(컨텍스트 길이)가 제한되어 있어, 긴 문맥을 처리하는 데 한계가 있음
  2. 단계적 처리(Step-by-Step Processing)
    • Chain of Thought 기법을 통해 언어 모델이 단계별로 문제를 해결할 수 있음
    • 이는 워킹 메모리의 중앙 집행기 역할과 유사함
    • 단계별로 정보를 처리하고, 각 단계에서 나온 결과를 다음 단계의 입력으로 사용하는 방식
  3. 추론 및 문제 해결(Reasoning and Problem-Solving)
    • 언어 모델은 입력된 정보를 기반으로 추론하고 문제를 해결할 수 있음
    • 이는 워킹 메모리의 다양한 요소(중앙 집행기, 에피소드 버퍼 등)가 협력하는 방식과 유사합니다.

워킹 메모리와 언어 모델의 한계 및 개선 방안

  1. 맥락 유지의 한계
    • 언어 모델의 컨텍스트 윈도우가 제한되어 있어, 긴 문맥이나 복잡한 정보를 처리하는 데 어려움이 있음
    • 이를 개선하기 위해 모델의 컨텍스트 윈도우 크기를 늘리거나, 외부 메모리 시스템과 결합하는 연구가 진행되고 있음
  2. 장기 기억과의 통합 부족
    • 현재의 언어 모델은 주로 단기적인 정보를 처리하며, 장기적인 기억과의 통합이 부족함
    • 이를 해결하기 위해, 장기 기억 네트워크를 추가하거나, 모델이 학습한 정보를 효율적으로 참조하는 방법을 개발하는 연구가 필요
  3. 연산 자원의 한계
    • 언어 모델이 복잡한 문제를 해결할 때, 필요한 연산 자원이 많아지고 모델의 효율성을 떨어뜨림
    • 모델의 효율성을 높이기 위해, 다양한 최적화 기술과 더 나은 알고리즘이 필요함

트리거 프롬프트("차근차근 생각해봅시다") 로 중간과정을 자세히 서술하도록 유도

 

Input-Output 프롬프팅

특정 입력에 대해 기대하는 출력을 명확히 정의하여 모델이 올바른 응답을 생성하도록 유도하는 방식

모델이 특정 패턴이나 형식을 따르도록 훈련된 경우 유용

예시

**입력:** 서울의 인구는 몇 명인가요?
**출력:** 서울의 인구는 약 1000만 명입니다.

구성 요소

  1. 명확한 입력: 질문이나 명령 등의 형태로, 모델에게 제공되는 정보
  2. 기대 출력: 모델이 생성해야 하는 응답의 형태

Self-Consistency with Chain of Thought (CoT)

모델이 여러 개의 독립적인 Chain of Thought를 생성하여 그 중에서 가장 일관된 답변을 선택하는 방법

복잡한 문제를 해결할 때 다양한 경로를 탐색하고, 가장 신뢰할 수 있는 경로를 선택하게 함

예시

**문제:** 철수가 6개의 테니스 공을 가지고 있고, 2개의 테니스 공 세트를 샀고, 각각의 테니스 공 세트에는 3개의 테니스 공이 있다면, 철수는 지금 몇 개의 테니스 공을 가지고 있는지?

**Chain of Thought 1:**
1. 철수가 원래 가지고 있는 테니스 공의 개수: 62. 철수가 구매한 테니스 공 세트의 개수: 2세트
3. 각 세트에 포함된 테니스 공의 개수: 34. 추가된 테니스 공의 개수: 2세트 × 3개/세트 = 65. 총 테니스 공의 개수: 6개 + 6개 = 12개

**Chain of Thought 2:**
1. 철수가 원래 가지고 있는 테니스 공의 개수: 62. 각 세트에 포함된 테니스 공의 개수: 33. 2개의 세트는 총 6개의 테니스 공을 추가합니다.
4. 총 테니스 공의 개수: 6개 + 6개 = 12개

**결론:** 철수는 지금 총 12개의 테니스 공을 가지고 있습니다.

여러 Chain of Thought를 생성하여 동일한 결론에 도달했음을 확인하는 방식

Tree of Thoughts

Tree of Thoughts는 문제 해결 과정에서 여러 가지 가능한 경로를 탐색하고, 각 경로의 분기점에서 최선의 선택을 찾아가는 방식입니다. 이는 여러 단계의 추론을 필요로 하는 복잡한 문제를 해결하는 데 유용함

예시

**문제:** 철수 +- 영희 이고, 영희 +- 바둑 이면, 철수 +- 바둑?

**Tree of Thoughts:**
1. **첫 번째 분기점:**
   - 철수와 영희의 관계: 철수 = 영희 ± n
2. **두 번째 분기점:**
   - 영희와 바둑의 관계: 영희 = 바둑 ± m
3. **결합:**
   - 철수 = (바둑 ± m) ± n

**결론:** 철수는 바둑 ± k이고, 여기서 k는 m ± n의 결과입니다.

각 분기점에서 가능한 모든 경로를 탐색하고, 최적의 경로를 선택하여 문제를 해결하는 방식

비교 및 결론

  • Input-Output 프롬프팅: 명확하고 일관된 입력과 출력을 제공하여 모델의 응답을 유도
  • Chain of Thought (CoT): 문제를 단계별로 나누어 각 단계에서 논리적인 추론을 수행하는 방식
  • Self-Consistency with CoT: 여러 개의 독립적인 추론 경로를 생성하여 일관된 답을 선택
  • Tree of Thoughts: 복잡한 문제를 해결하기 위해 다양한 경로를 탐색하고, 최적의 경로를 선택
  •