home
🤗

자동으로 최적의 Prompt를 생성하기

Author
박우명 / CDO & Head of Research
Category
Paper Review
Tags
Prompting
AutoPrompt
Published
2023/11/27
AI 요약
5 more properties

도입

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)
(이미지 출처) 프레젠테이션의 ‘Designer’ 기능을 사용하여 이미지 자동 생성

개요

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 xx에 대하여 평가하고자 하는 instruction IcI_c로 아래에서 보는 바와 같이 prompt를 구성하여 ranking model에 입력으로 넣음. 이 때 모델에서 생성하는 'yes' 토큰의 logit값이 instruction IcI_c의 점수가 되도록 학습
이를 위하여 정답 yy와 입력한 instruction으로 생성한 답변 y^\hat{y} 사이의 ROUGE-L 점수(아래 수식에서 r(,)r(\cdot,\cdot))의 분포(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할지 의문