Prompt-Engineering-Guide/ko-pages/techniques/cot.mdx

92 lines
3.8 KiB
Plaintext
Raw Normal View History

# Chain-of-Thought Prompting
import {Screenshot} from 'components/screenshot'
import COT from '../../img/cot.png'
import ZEROCOT from '../../img/zero-cot.png'
## Chain-of-Thought (CoT) Prompting
<Screenshot src={COT} alt="COT" />
Image Source: [Wei et al. (2022)](https://arxiv.org/abs/2201.11903)
[Wei et al. (2022)](https://arxiv.org/abs/2201.11903)에서 소개된 chain-of-thought (CoT) 프롬프트는 중간 추론 단계를 통해 복잡한 추론 능력을 가능하게 합니다. 이를 few-shot 프롬프트와 결합하면 답변하기 전에 추론이 필요한 복잡한 작업에 대해 더 나은 결과를 얻을 수 있습니다.
*Prompt:*
```
이 집합 {4, 8, 9, 15, 12, 2, 1}의 홀수를 모두 더하면 짝수입니다.
A: 홀수(9, 15, 1)를 모두 더하면 25가 됩니다. 정답은 거짓입니다.
이 집합 {17, 10, 19, 4, 8, 12, 24}의 홀수를 모두 더하면 짝수입니다.
답: 홀수(17, 19)를 모두 더하면 36이 됩니다. 정답은 참입니다.
이 집합 {16, 11, 14, 4, 8, 13, 24}의 홀수를 모두 더하면 짝수입니다
답: 홀수(11, 13)를 모두 더하면 24가 됩니다. 정답은 참입니다.
이 집합 {17, 9, 10, 12, 13, 4, 2}의 홀수를 모두 더하면 짝수입니다.
A: 홀수(17, 9, 13)를 모두 더하면 39가 됩니다. 정답은 거짓입니다.
이 집합 {15, 32, 5, 13, 82, 7, 1}의 홀수를 모두 더하면 짝수입니다.
A:
```
*Output:*
```
홀수(15, 5, 13, 7, 1)를 모두 더하면 41이 됩니다. 정답은 거짓입니다.
```
와우! 추론 단계를 추가했을 때 완벽한 결과를 볼 수 있습니다. 사실 더 적은 수의 예제, 즉 하나의 예제만 제공해도 이 문제를 해결할 수 있습니다:
*Prompt:*
```
이 집합 {4, 8, 9, 15, 12, 2, 1}의 홀수를 모두 더하면 짝수입니다.
A: 홀수(9, 15, 1)를 모두 더하면 25가 됩니다. 정답은 거짓입니다.
이 집합 {15, 32, 5, 13, 82, 7, 1}의 홀수를 모두 더하면 짝수입니다.
A:
```
*Output:*
```
홀수(15, 5, 13, 7, 1)를 모두 더하면 41이 됩니다. 정답은 거짓입니다.
```
저자들은 이 기능이 충분히 큰 언어 모델에서 발생하는 새로운 능력이라고 주장한다는 점을 명심하세요.
## Zero-shot COT Prompting
<Screenshot src={ZEROCOT} alt="Zero-shot COT" />
Image Source: [Kojima et al. (2022)](https://arxiv.org/abs/2205.11916)
최근에 나온 아이디어 중 하나는 원래의 프롬프트에 "단계별로 생각하자"를 추가하는 [zero-shot CoT](https://arxiv.org/abs/2205.11916) (Kojima et al. 2022)의 아이디어 입니다. 간단한 문제를 풀고 모델이 어떻게 작동하는지 살펴봅시다:
*Prompt:*
```
저는 시장에 가서 사과 10개를 샀습니다. 저는 사과 2개를 이웃에게 주고 2개를 수리공에게 주었습니다. 그리고 가서 사과 5개를 더 사서 1개를 먹었습니다. 저는 몇 개의 사과를 가지고 있었나요?
```
*Output:*
```
11개
```
정답이 틀렸습니다! 이제 특별 프롬프트로 시도해 봅시다.
*Prompt:*
```
저는 시장에 가서 사과 10개를 샀습니다. 저는 사과 2개를 이웃에게 주고 2개를 수리공에게 주었습니다. 그리고 가서 사과 5개를 더 사서 1개를 먹었습니다. 사과가 몇 개나 남았나요?
차근차근 생각해 봅시다.
```
*Output:*
```
먼저 사과 10개로 시작했습니다.
이웃에게 2개, 수리공에게 2개를 나눠주었으므로 사과가 6개가 남았습니다.
그런 다음 사과 5개를 더 사서 이제 사과가 11개가 되었습니다.
마지막으로 사과 1개를 먹었으므로 사과 10개가 남게 됩니다.
```
이 간단한 프롬프트("차근차근 생각해 봅시다.")가 이 문제를 해결하는데 효과적이라는 점이 인상적입니다. 프롬프트에 사용할 예제가 많지 않은 경우 특히 유용합니다.