# Self-Consistency
프롬프트 엔지니어링을 위한 더 진보된 기법 중 하나로 자기 일관성(self-consistency)이 있습니다. [Wang et al. (2022)](https://arxiv.org/pdf/2203.11171.pdf)에서 제안한 자기 일관성은 "생각의 사슬 프롬프팅에 사용되는 일반적인 탐욕 알고리즘 디코딩을 대체하는 것"을 목표로 합니다. 이 아이디어는 퓨샷 생각의 사슬(few-shot CoT)을 통해 여러 가지 다양한 추론 경로를 샘플링하고, 여러 번의 프롬프트 생성 과정을 거쳐 가장 일관된 답을 선택하는 것입니다. 이를 통해 산술 및 상식적인 추론과 관련된 작업에서 생각의 사슬 프롬프트의 성능을 향상시킬 수 있습니다.
다음의 산술 추론에 대한 예제를 살펴봅시다.
*Prompt:*
```
내가 6살이었을 때 내 여동생은 내 나이의 절반인 나이였어. 지금
나는 70살이라면 여동생은 몇 살일까?
```
*Output:*
```
35
```
결과가 틀렸습니다. 자기 일관성을 이용해 이 문제를 어떻게 개선할 수 있을까요? 한번 해봅시다. [Wang et al. 2022] 논문의 (Table 17) 퓨샷 예제를 이용해 보겠습니다.
*Prompt:*
```
Q: 과수원에는 15그루의 나무가 있어. 과수원의 일꾼들이 오늘 과수원에 나무를 심을 거야. 나무 심기가 끝나면
21그루의 나무가 있을 거야. 오늘 과수원 일꾼들은 몇 그루의 나무를 심었을까?
A: 15그루로 시작합니다. 나중에 나무가 21그루가 됩니다. 그 차이가 그들이 심은 나무의 수일 것입니다.
따라서 그들은 21 - 15 = 6그루의 나무를 심었어야 합니다. 정답은 6입니다.
Q: 주차장에 3대의 차량이 있고 2대의 차량이 더 도착하면 주차장에 몇 대의 차량이 있을까?
A: 주차장에 이미 3대의 차량이 있습니다. 2대가 더 도착합니다. 이제 3 + 2 = 5대의 차량이 있습니다. 정답은 5입니다.
Q: 지호는 초콜릿을 32개, 여동생은 42개를 가지고 있었어. 둘이 35개를 먹었다면 총 몇 개가 남았을까?
A: 레아는 초콜릿 32개, 레아의 여동생은 42개를 가지고 있었습니다. 즉, 원래 32개 + 42개 = 74개의
초콜릿이 있었습니다. 35개를 먹었습니다. 따라서 총 74 - 35 = 39개의 초콜릿이 남아 있습니다. 정답은 39입니다.
Q: 선우는 막대 사탕을 20개 가지고 있었어. 그는 두리에게 막대 사탕을 몇 개 주었어. 이제 선우는 막대사탕 12개를 가지고 있어. 선우는 두리에게
몇 개의 막대 사탕을 줬을까?
A: 선우는 막대 사탕 20개를 가지고 있었습니다. 이제 선우는 12개만 가지고 있으므로, 나머지는 두리에게 주었을 것입니다. 선우가 두리에게 준 막대사탕의
20 - 12 = 8개의 막대 사탕을 두리에게 주었어야 합니다. 정답은 8개입니다.
Q: 도현이는 장난감이 다섯 개 있어. 크리스마스에 도현이는 엄마와 아빠로부터 각각 두 개의 장난감을 받았어. 도현이는 지금 몇 개의 장난감을
가지고 있을까?
A: 도현이의 장난감이 5개입니다. 엄마로부터 2개를 받았으므로 5 + 2 = 7개의 장난감을 가지고 있습니다. 그리고 아빠한테서 2개를 더 받았어요.
총 7 + 2 = 9 개의 장난감을 가지고 있습니다. 정답은 9입니다.
Q: 서버실에는 9대의 컴퓨터가 있었어. 월요일부터 목요일까지 각각 5대씩 컴퓨터가 더 설치되었어.
현재 서버실에는 몇 대의 컴퓨터가 있을까?
A: 월요일부터 목요일까지는 4일입니다. 매일 5대씩 컴퓨터가 추가되었습니다. 즉, 총 4 * 5 =
20대의 컴퓨터가 추가되었습니다. 처음에는 9대의 컴퓨터가 있었으므로 이제 9 + 20 = 29대의 컴퓨터가 있습니다.
정답은 29입니다.
Q: 수완이는 58개의 골프공을 가지고 있었어. 화요일에 그는 23개의 골프공을 잃어버렸어. 수요일에 2개를 더 잃어버렸어.
수요일이 끝났을 때 그가 가지고 있던 골프공은 몇 개였을까?
A: 수완이는 처음에 58개의 공을 가지고 있었습니다. 화요일에 23개를 잃어버렸으므로 그 이후에는 58 - 23 = 35개의 공을 가지고 있습니다.
수요일에 2개를 더 잃어버렸으므로 이제 35 - 2 = 33개의 공을 가지고 있습니다. 정답은 33입니다.
Q: 한얼이는 23달러를 가지고 있어. 그녀는 각각 3달러에 베이글 5개를 샀어. 한얼이에게 남은 돈은 얼마일까?
A: 한얼이는 각각 3달러에 베이글 5개를 샀습니다. 이것은 그녀가 5 * 3 = 15달러를 썼다는 것을 의미합니다.
Q: 내가 6살이었을 때 내 여동생은 내 나이의 절반인 나이였어. 지금 나는 70살이고 내 여동생은 몇 살일까?
A:
```
*Output 1:*
```
제가 6살이었을 때 여동생은 제 나이의 절반이었으므로 3살이었어요. 이제 저는 70살이므로 여동생은 70 - 3 = 67살입니다. 정답은 67입니다.
```
*Output 2:*
```
화자가 6살이었을 때 여동생은 화자의 절반 나이인 3살이었습니다. 이제 화자가 70살이 되었으므로 여동생은 70 - 3 = 67살이 됩니다. 정답은 67입니다.
```
*Output 3:*
```
내가 6살이었을 때 여동생은 내 나이의 절반이었으므로 3살이고, 이제 나는 70살이므로 여동생은 70/2 = 35살입니다. 정답은 35입니다.
```
최종 정답을 계산하는 데는 몇 가지 단계가 필요하지만(자세한 내용은 논문에서 확인하세요), 간단하게 설명하기 위해 이미 다수의 정답에서 확인할 수 있듯이 이 정답이 근본적으로 최종 정답이 되는 것을 확인할 수 있습니다.