Author
박우명 / CDO & Head of Research
Category
Paper Review
Tags
PromptingAutoPrompt
Published
November 27, 2023
도입
- LLM은 zero/few-shot prompting 만으로도 많은 task에서 뛰어난 성능을 보이지만 결과가 입력한 prompt에 매우 민감함
- 그렇지만 task에 맞게 사람이 직접 최적의 prompt를 만드는 것은 매우 어렵고, 시간과 비용이 많이 소요되는 작업이며, 또한 prompt가 얼마나 잘 동작할지 사전에 확인하는 것이 쉽지 않음
- 이 아티클에서는 위 문제에 대한 대안으로 LLM을 활용하여 최적의 prompt를 자동으로 생성하는 최신 연구와 관련 reference에 대하여 소개함
- 리뷰 논문
- Automatic Prompt Engineer (APE) : https://arxiv.org/abs/2211.01910 (by Univ. of Toronto, Vector Institute, Univ. of Waterloo)
- iPrompt : https://arxiv.org/abs/2210.01848 (by MS, Cornell Univ.)
- Auto Instruct : https://arxiv.org/abs/2310.13127 (by MS, Univ. of Notre Dame)
- Black-box Prompt Optimization (BPO) : https://arxiv.org/abs/2311.04155 (by Tsinghua Univ. Zhipu AI)
개요
- Prompt를 자동으로 생성하기 위해서는 아래와 같은 문제들이 존재함
- Instruction Generation : 주어진 task에 맞는 instruction을 자동으로 생성
- Instruction Ranking : 얼마나 좋은 prompt인지 성능 예측
- 요약
Stage | Features | APE | iPrompt | Auto Instruct | BPO |
Instruction Generation | 백본 모델 | InstructGPT | GPT-J | ChatGPT
GPT-4 | llama2-7b-chat |
방식 | prompting | prompting | prompting | tuning | |
상세 | 3가지 고정 meta prompt로 여러 개 생성 | 학습 데이터를 입력으로 여러 개 생성 | 7가지 고정 meta prompt로 각 3개씩 총 21개 생성 | simple prompt를 입력으로 하여 optimized prompt를 생성하도록 학습 | |
Instruction Ranking | 백본 모델 | InstructGPT | GPT-J
GPT-3 | FLAN-T5-Large | 없음 |
방식 | prompting | prompting | tuning | ||
상세 | 생성한 prompt를 입력으로 LLM 결과 예측
(accuracy & log prob. 기반) | 생성한 prompt를 입력으로 LLM 결과 예측
(log prob. 기반) | LLM 생성 결과와 정답 간 점수의 분포와 ranker에서 ‘yes’ token의 확률 분포를 일치하도록 학습 |
방법론 상세
- APE
- 3 종류의 meta prompt (forward mode, reverse mode, customized prompt)에 학습데이터(input, output)를 넣고 m개의 instruction을 생성
- 생성한 instruction에 training 데이터 세트에서 random sampling한 example들을 넣고 답변을 예측. 예측한 결과와 실제 정답을 비교하여 instruction에 대한 점수를 측정
- execution accuracy : 각 example에 대하여 정답이 맞았는지 아닌지를 0-1 loss로 평가
- log probability : 정답 text에 대한 LLM의 log probability 값을 점수로 사용
- 측정한 점수를 기반으로 top k instruction을 선택함
- (Optional) top k instruction으로 비슷한 의미를 갖는 변형 instruction을 LLM을 통하여 추가 생성하여 평가 대상 instruction set에 추가. 위 과정을 반복
- 알고리즘
- iPrompt
- 학습 데이터(input, output)들만 사용하여 zero-shot으로 candidate prompt들을 생성
- instruction 생성 용 meta prompt에 대한 자세한 언급이 없음.
- 간단한 instruction과 예제 데이터 정도의 기본적인 형태일 것으로 예상
- 생성한 instruction에 training 데이터 세트에서 random sampling한 예제들을 넣고 LLM으로 답변 생성. 정답 text에 대한 log probability를 점수로 사용
- 측정한 점수를 기반으로 top k instruction을 선택함
- 선택된 instruction에서 임의의 위치를 기준으로 뒤쪽을 잘라낸 후 해당 부분을 LLM으로 다시 생성하여 새로운 prompt 후보를 만들어 냄. 위 과정을 반복
- Auto Instruct
- 다음 3 단계로 이루어짐
- Instruction 생성
- Instruction을 생성하는 meta prompt를 7가지 다른 형식으로 구성하고 각각 3개씩 생성 (총 21개)
- 다음과 같이 4가지 다른 style로 생성하라고 명시적으로 지시(위 그림에서 (a)-(d)) : 'one sentence', 'one paragraph', 'step-by-step', 'explanations of the given examples' (예제 그림에서 (d)의 instruction이 잘못되었음. ‘explanations of …’로 바뀌어야 함)
- 기본 instruction(위 그림에서 (e))에 3가지 종류의 다른 예제를 넣어서 생성 : 여기서 예제에 들어가는 데이터는 SuperNI 에서 추출. SuperNI 데이터를 instruction 길이 기준으로 3개의 그룹으로 clustering한 후 같은 cluster의 데이터로 meta prompt를 생성
- Instruction ranking & 선택
- FLAN-T5-Large 모델을 튜닝하여 사용
- SuperNI 데이터 세트에서 영어 데이터만 추출한 후 task type(e.g., QA, sentimental analysis, etc.)에 따라 분류
- Input 에 대하여 평가하고자 하는 instruction 로 아래에서 보는 바와 같이 prompt를 구성하여 ranking model에 입력으로 넣음. 이 때 모델에서 생성하는 'yes' 토큰의 logit값이 instruction 의 점수가 되도록 학습
- 이를 위하여 정답 와 입력한 instruction으로 생성한 답변 사이의 ROUGE-L 점수(아래 수식에서 )의 분포(softmax over all candidates)와 'yes' 토큰의 확률 분포를 최대한 일치하도록 학습함 (두 분포 사이의 KL divergence 최소화)
- 사용한 task 종류 : 575(train), 91(test)
- 한 task 당 각각 최대 400개까지 예제를 sampling --> 총 122k 구축
- 선택한 instruction으로 최종 결과 생성
- BPO
- 학습 데이터 세트 구축
- 4가지 데이터 세트(OASST1, HH-RLHF, Chatbot Arena, Alpaca-GPT4)으로부터 (user input, good response, bad response) triplet을 추출
- 추출한 정보를 바탕으로 아래의 프롬프트를 구성하고 ChatGPT를 통하여 더 좋은 instruction을 생성. 총 14,395 pairs
- Prompt 생성 모델 학습
- (user input, optimized input)의 pair 데이터를 활용하여 아래 objective function으로 PLM을 튜닝하여 최적화된 instruction을 생성할 수 있는 모델을 학습. 논문에서는
llama2-7b-chat
모델을 백본으로 사용하였음
결과
- APE
- Instruction Induction tasks, BIG-Bench 실험
- Greedy prompt 및 human prompt 대비 성능 향상 관찰
- iPrompt
- FFB, Rotten Tomatoes, SST-2, IMDB 실험
- Human prompt 및 비교 대상인 AutoPrompt 대비 성능 향상 관찰
- Auto Instruct
- LLM이 좋은 instruction을 생성할 능력을 가지고 있음. 그렇지만 적절한 ranking은 필수
- 아래 표에서 empty instruction, human instruction, on-the-fly generation 비교
- LLM이 생성하는 방법론들이 human instruction 및 empty instruction 점수를 넘는 경우가 존재
- 그렇지만 잘못 선택할 경우 성능이 더 낮아지기도 함
- Instruction의 품질을 판단하기에 제안한 ranking model이 가장 효과적
- Random Selection, iPrompt, iPrompt+, Cross-Validation, LM Selection, Auto-Instruct 비교
- 생성한 instruction을 LLM을 통해 판단하거나 validation data를 활용하여 선택하는 것(iPrompt, cross-validation)은 오히려 random selection보다 더 낮은 성능을 보이기도 하는 등 reliable하지 않음
- 반면 제안한 방법은 모든 경우에서 가장 좋은 성능을 달성
- BPO
- 실험한 공개 LLM API에서 모두 향상 효과가 있음
- LLaMA 2와 Vicuna 에서 모두 향상 효과가 있음. 특히 13B+BPO가 70B original 보다 모든 케이스에서 모두 성능이 좋다는 점은 주목할만 함. 즉, Prompt 최적화를 통하여 기대할 수 있는 개선 폭이 꽤 크다는 것을 알 수 있음
- PPO 및 DPO 등과 비교했을 때 보다 더 좋은 성능을 보이며 이것과 조합했을 때 추가적인 개선이 있음
논의사항
- 사실 특정 task에서 잘 동작하는 프롬프트를 만드는 것은 매우 막막하고 어려운 문제로 위 방법론 모두 task에 맞는 최적의 prompt를 자동으로 생성하는 것이 목적
- APE & iPrompt
- 비슷한 시기에 공개된 거의 동일한 접근 방법. 새로운 프롬프트 후보를 생성하는 방식에서 약간의 차이가 존재
- 특별히 tuning 과정 없이 prompt 생성 및 성능 예측 모두 LLM의 ICL 능력을 활용하는 간단한 방법
- 다만 Auto Instruct에서 지적하였듯이 단순한 meta prompt로 여러개 instruction을 생성할 때 다양성이 떨어질 수 있는 이슈는 있음
- 또한 iPrompt의 경우 초기 논문임을 감안하더라고 prompt 생성에 GPT-J를 사용한 부분은 아쉬움
- LLM을 통한 prompt 자동 생성의 초기 연구로 LLM을 통하여 적어도 적당한 수준의 human prompt 혹은 그 이상의 성능을 얻을 수 있음을 보여줬다는 것에 의의가 있음
- Auto Instruct
- 주어진 task에 대하여 어떤 instruction이 효과가 있을지 판단하는 instruction ranking 모델을 제안하고 유효성을 입증한 것이 가장 인상적
- 다만 이 모델이 일반화될 수 있는지 여부가 이슈. 만약 다른 언어와 unseen task에 대하여 일반화된다면 매우 유용할 것으로 판단
- BPO
- Task description수준의 간단한 input을 최적의 prompt로 자동으로 생성하는 모델이 key contribution이라 판단
- 특히 13B+BPO로 70B 성능을 뛰어넘은 점, BPO가 PPO 대비 성능이 더 좋다는 점 등이 인상적
- 다만 별도의 instruction ranking 단계 없이 ChatGPT가 생성한 instruction을 거의 무조건 optimized prompt로 간주하는 것 같은데 이 과정이 얼마나 reliable할지 의문