Junhyun
포스트

[Prompt] Few-shot 프롬프팅 — 예시 개수보다 순서가 흔듭니다

예시를 몇 개 줄지보다 어떤 순서로 줄지가 성능을 더 크게 흔든다는 연구를 정리합니다. 왜 그런지, 그리고 실무에서 무엇을 먼저 조정해야 하는지 근거와 함께 짚습니다.

[Prompt] Few-shot 프롬프팅 — 예시 개수보다 순서가 흔듭니다

프롬프트 기본기 편에서 예시(few-shot)가 근거가 강한 축에 든다고 적었습니다. 다만 개수와 순서 이야기는 따로 다루겠다고 미뤄뒀습니다.

이번 편이 그 자리인데, 조사해보니 미뤄둔 쪽이 더 중요했습니다.

흔한 조언 — “예시 두세 개를 주세요”

프롬프트 안내에서 가장 자주 보는 문장입니다. 저도 앞 편에서 그렇게 적었습니다.

그런데 few-shot 을 널리 알린 원논문의 초록을 열어봐도 몇 개가 좋다는 숫자가 없습니다. “몇 개의 시연을 텍스트로 제시한다”고만 되어 있습니다.

개수는 근거가 약한 쪽입니다. 대신 근거가 분명한 것이 따로 있었습니다.

순서가 성능을 통째로 흔듭니다

Fantastically Ordered Prompts and Where to Find Them 이 이걸 정면으로 다뤘습니다.

예시가 제공되는 순서가 최고 수준 성능과 무작위 추측 성능의 차이를 만들 수 있다. 어떤 순열은 “환상적”이고 어떤 것은 아니다.

같은 예시입니다. 내용을 바꾼 게 아니라 배열만 바꿨습니다.

img_file논문 초록의 표현을 옮겨 직접 그렸습니다

논문이 함께 확인한 것 셋이 더 중요합니다.

확인한 것뜻
모델 크기와 무관하게 나타남큰 모델을 쓰면 해결되는 문제가 아님
특정 예시 묶음의 문제가 아님“나쁜 예시를 골랐다”로 설명되지 않음
좋은 순서가 다른 모델로 이전되지 않음모델을 바꾸면 다시 찾아야 함

세 번째가 실무에서 제일 아픕니다. 힘들게 좋은 순서를 찾아도 모델을 갈아끼우면 그 자산이 사라집니다.

왜 흔들리나

Calibrate Before Use 가 원인 쪽을 짚습니다.

프롬프트 형식, 학습 예시, 그리고 예시의 순서까지 정확도를 거의 우연 수준에서 최고 수준까지 변하게 할 수 있다.

이유는 모델이 특정 답으로 치우치기 때문입니다. 초록이 든 두 가지입니다.

  • 프롬프트 끝 근처에 놓인 답 쪽으로 쏠린다
  • 사전학습 데이터에 흔한 답 쪽으로 쏠린다

즉 마지막 예시의 정답이 무엇이냐가 모델의 답을 끌어당깁니다. 예시를 “골고루” 넣었다고 생각해도, 어느 것을 마지막에 두었는지가 결과를 밀어버립니다.

같은 논문은 내용 없는 입력(N/A 같은)으로 모델의 치우침을 재서 보정하는 방법을 제안하고, 최대 30.0%p 개선을 보고했습니다. 다만 이건 분류 과제에서 확률을 직접 조정할 수 있을 때의 이야기라, 챗 인터페이스에서 그대로 쓸 수 있는 기법은 아닙니다.

정답이 아니어도 된다는 것과 겹쳐 보면

앞 편에서 인용한 Rethinking the Role of Demonstrations 의 발견을 나란히 놓으면 그림이 선명해집니다.

  • 예시의 정답을 무작위로 바꿔도 성능이 거의 안 떨어진다
  • 대신 레이블 공간·입력 분포·형식이 실제로 작동한다
  • 그런데 순서를 바꾸면 성능이 통째로 흔들린다

정리하면 이렇습니다. 예시는 “정답을 가르치는 것”이 아니라 “판을 알려주는 것”인데, 그 판을 어떻게 배열하느냐가 모델의 치우침을 좌우합니다.

정답을 다듬는 데 쓰던 시간을, 형식을 일관되게 맞추고 순서를 재보는 쪽으로 옮기는 게 근거에 맞습니다.

실무에서

1. 형식을 먼저 고정한다. 모든 예시가 같은 모양이어야 합니다. 라벨 표기, 구분자, 줄바꿈까지.

2. 개수를 늘리기 전에 순서를 바꿔본다. 예시를 2개에서 5개로 늘리는 것보다, 같은 예시의 배열을 서너 번 바꿔 재보는 편이 근거가 있습니다.

3. 마지막 예시를 의식한다. 끝에 놓인 답 쪽으로 쏠리므로, 분류 과제라면 마지막 예시의 정답이 한쪽으로 몰리지 않게 합니다.

4. 결과가 한쪽으로 쏠리면 프롬프트를 의심한다. 모델이 특정 답만 낸다면 데이터가 아니라 예시 배열의 치우침일 수 있습니다.

5. 모델을 바꾸면 다시 잰다. 좋은 순서는 이전되지 않습니다.

읽을 때 붙여야 할 단서

세 논문 모두 2021~2022년 자료입니다. GPT-3 세대에서 측정한 것이고, 지시 조정(instruction-tuned)이 보편화된 지금 모델에서 흔들리는 폭이 같은지는 이 논문들이 답하지 않습니다.

과제가 주로 분류·객관식입니다. 생성이나 코드 작성에서 같은 정도인지는 별개 문제입니다.

“순서를 바꿔보라”가 늘 이득이라는 뜻은 아닙니다. 재보는 것 자체에 시간과 비용이 듭니다. 한 번 쓰고 마는 프롬프트라면 거기까지 할 이유가 없습니다.

보정 기법은 그대로 못 씁니다. 확률에 접근할 수 있어야 하는 방법이라, API 로 로그확률을 받거나 직접 모델을 돌리는 경우에만 해당합니다.

정리

few-shot 에서 흔히 조정하는 것은 예시 개수인데, 근거가 분명한 지렛대는 순서와 형식입니다.

같은 예시를 배열만 바꿔도 성능이 최고 수준과 무작위 추측 사이를 오갈 수 있고, 이건 모델을 키운다고 사라지지 않습니다. 원인은 모델이 끝에 놓인 답과 사전학습에 흔한 답으로 치우치는 데 있습니다.

그리고 좋은 순서는 다른 모델로 옮겨가지 않습니다. 모델을 바꾸면 다시 찾아야 합니다.

예시를 하나 더 넣기 전에, 가지고 있는 예시의 순서를 두어 번 바꿔 재보는 것이 먼저입니다.

참고

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.