# Few-Shot Prompting

대규모 언어 모델은 뛰어난 zero-shot 기능을 보여주지만, 복잡한 작업에서는 여전히 개선이 필요합니다. Few-shot 프롬프트는 프롬프트에서 데모를 제공하여 모델이 더 나은 성능을 발휘하도록 유도하는 문맥 내 학습을 가능하게 하는 기술로 사용할 수 있습니다. 이 데모는 모델이 응답을 생성하기를 원하는 후속 예제에 대한 조건부 역할을 합니다.

[Touvron et al. 2023](https://arxiv.org/pdf/2302.13971.pdf)에 따르면 모델이 충분한 크기로 커졌을 때 [(Kaplan et al., 2020)](https://arxiv.org/abs/2001.08361)에 처음으로 few-shot 속성이 나타났습니다.

[Brown et al. 2020](https://arxiv.org/abs/2005.14165)에 제시된 예제를 통해 few-shot 프롬프트를 시연해 보겠습니다. 이 예제에서는 문장에서 새로운 단어를 올바르게 사용하는 것이 과제입니다.

*Prompt:*
```
"whatpu"는 탄자니아에 서식하는 작은 털복숭이 동물입니다. whatpu를 사용하는 문장의 예
라는 단어를 사용하는 문장의 예입니다:
우리는 아프리카를 여행하고 있었는데 아주 귀여운 whatpu를 보았습니다.
"farduddle"을 한다는 것은 정말 빠르게 위아래로 점프한다는 뜻입니다. farduddle을 사용하는 문장의 예
를 사용하는 문장의 예입니다:
```

*Output:*
```
게임에서 이겼을 때 우리 모두는 farduddle를 시작했습니다.
```

게임에서 이겼을 때, 우리는 모델이 하나의 예시(예, 1-shot)만 제공함으로써 어떻게든 과제를 수행하는 방법을 학습했음을 관찰할 수 있습니다. 더 어려운 과제의 경우 예시(예, 3-shot, 5-shot, 10-shot, etc.)를 늘려가며 실험해 볼 수 있습니다.

[Min et al. (2022)](https://arxiv.org/abs/2202.12837)의 연구 결과에 따라, 다음은 few-shot을 사용할 때 시연/예시를 위한 몇 가지 팁입니다:

- "레이블 공간과 데모에서 지정한 입력 텍스트의 분포는 (개별 입력에 대해 레이블이 올바른지 여부와 관계없이) 모두 중요합니다."
- 사용하는 형식도 성능에 중요한 역할을 하며, 무작위 레이블만 사용하더라도 레이블이 전혀 없는 것보다 훨씬 낫습니다.
- 추가 결과에 따르면 라벨의 실제 분포에서 (균일한 분포 대신) 무작위 라벨을 선택하는 것도 도움이 됩니다.

몇 가지 예를 살펴보겠습니다. 먼저 무작위 레이블이 있는 예제(즉, 부정 및 긍정 레이블이 입력에 무작위로 할당됨)를 시도해 보겠습니다:

*Prompt:*
```
정말 멋지네요! // 부정
이건 나쁘다! // 긍정
와우 그 영화 정말 멋졌어요! // 긍정
정말 끔찍한 쇼였어! //
```

*Output:*
```
부정
```

레이블이 무작위로 지정되었음에도 불구하고 여전히 정답을 얻을 수 있습니다. 형식도 그대로 유지한 것도 도움이 됩니다. 실제로 추가 실험을 통해 우리가 실험하고 있는 최신 GPT 모델은 무작위 형식에도 더 강력해지고 있는 것으로 보입니다. 예시:

*Prompt:*
```
긍정적 이거 멋지다!
이것은 나쁘다! 부정적
와우, 그 영화 정말 멋졌어요!
긍정
정말 끔찍한 쇼였어! --
```

*Output:*
```
부정
```

위의 형식에는 일관성이 없지만 모델은 여전히 올바른 레이블을 예측했습니다. 다양한 프롬프트의 변형을 포함하여 더 다양하고 복잡한 작업에서도 이러한 결과가 유지되는지 확인하기 위해 더 철저한 분석을 수행해야 합니다.

### Limitations of Few-shot Prompting

일반적인 few-shot 프롬프트는 많은 작업에 효과적이지만, 특히 복잡한 추론 작업을 처리할 때는 여전히 완벽한 기술은 아닙니다. 그 이유를 설명해 보겠습니다. 다음 작업을 제공했던 이전 예제를 기억하시나요?

```
이 집합{15, 32, 5, 13, 82, 7, 1}에서 홀수를 모두 더하면 짝수이다.

A:
```

이 작업을 다시 시도하면 모델이 다음과 같이 출력합니다:

```
네, 이 집합의 홀수를 모두 더하면 짝수인 107입니다.
```

이는 정답이 아니며, 이러한 시스템의 한계를 보여줄 뿐만 아니라 더 발전된 프롬프트 엔지니어링이 필요하다는 것을 보여줍니다.

몇 가지 예를 추가하여 몇 번의 질문으로 프롬프트가 결과를 개선하는지 확인해 보겠습니다.

*Prompt:*
```
이 집합 {4, 8, 9, 15, 12, 2, 1}에서 홀수의 합은 짝수입니다.
A: 답은 거짓입니다.

이 집합 {17, 10, 19, 4, 8, 12, 24}에서 홀수의 합은 짝수입니다.
A: 정답은 참입니다.

이 집합 {16, 11, 14, 4, 8, 13, 24}에서 홀수의 합은 짝수입니다.
A: 답은 참입니다.

이 집합 {17, 9, 10, 12, 13, 4, 2}에서 홀수의 합은 짝수입니다.
A: 답은 거짓입니다.

이 집합 {15, 32, 5, 13, 82, 7, 1}에서 홀수의 합은 짝수입니다.
A:
```

*Output:*
```
답은 참입니다.
```

작동하지 않았습니다. 이러한 유형의 추론 문제에 대해 신뢰할 수 있는 답변을 얻으려면 몇 번의 프롬프트만으로는 충분하지 않은 것 같습니다. 위의 예는 작업에 대한 기본 정보를 제공합니다. 자세히 살펴보면 우리가 소개한 작업 유형에는 몇 가지 추론 단계가 더 포함되어 있습니다. 즉, 문제를 여러 단계로 나누고 이를 모델에 시연하면 도움이 될 수 있습니다. 최근에는 더 복잡한 산술, 상식, 상징적 추론 작업을 처리하기 위해 [chain-of-thought (CoT) prompting](https://arxiv.org/abs/2201.11903) 가 대중화되었습니다.

전반적으로 예제를 제공하는 것이 특정 문제를 해결하는 데 유용한 것으로 보입니다. zero-shot 프롬프트와 few-shot 프롬프트가 만족할 만한 답변을 주지 못한 경우 모델이 학습한 내용이 해당 작업을 잘 수행하기에 충분하지 않다는 의미일 수 있습니다. 이때부터 모델을 미세 조정하거나 고급 프롬프트 기법을 실험해 보는 것이 좋습니다. 다음에는 많은 인기를 얻고 있는 chain-of-thought 프롬프트라는 인기 있는 프롬프트 기법 중 하나에 대해 이야기하겠습니다.