https://arxiv.org/abs/2211.01910 ## Abstract - <자연어>로 된 지시에 대하여, [LLM](/pages/Large%20language%20model.txt)은 인상적인 범용 컴퓨터로써의 역량을 보여주었음 - 하지만 과업 수행 성능은 [프롬프트](/pages/Prompt%20engineering.txt)의 품질에 크게 좌우 되었음 - 본 연구는 LLM을 이용하여 프롬프트를 자동으로 생성하는 자동 프롬프트 엔지니어(APE; Automatic Prompt Engineer)를 제안함. - 인간이 작성한 프롬프트에 의한 결과와, APE가 작성한 프롬프트에 의한 결과를 분석하였는데, 지시 유도 과업(instruction induction tasks) 24개 중 24개, 선별된 BIG-Bench 과업 21개 중 17개에서 인간의 프롬프트보다 훨씬 뛰어난 결과를 보였음. - APE가 생성한 프롬프트가 성능, [zero-shot chain-of-thought 프롬프트](/pages/Zero-shot%20chain-of-thought%20prompt.txt) 등도 더 개선할 수 있었음. 용어들: - **Instruction induction tasks**: 대화 예시를 보여준 다음에, 이 대화에 주어진 자연어 지시(instruction)가 무엇인지 유도해내도록 하는 과업. - **BIG-Bench tasks**: "The Beyond the Imitation Game Benchmark" 과업 모음. Imitation Game은 Alan Turing이 제안한 테스트로 현대에는 라 불림. [https://github.com/google/BIG-bench](https://github.com/google/BIG-bench) - : 아주 적은 수의 예시만 학습한 다음에 추론을 하는 것. 예: "1 + 2는 3이고, 3+5는 8입니다. 이제부터 질문에 대답하세요. 10+20은?" - : 예시 없이 추론을 하는 것. "예: 이제부터 질문에 대답하세요. 1 + 2는?" - : 더 상세하고 논리적으로 일관된 답을 얻어내기 위한 프롬프트. 보통 "Let's work this out in a step by step way to be sure we have the right answer." 이런 식으로 "step by step" 같은 표현을 추가하여 작성. ## 1. Introduction [LLM](/pages/Large%20language%20model.txt)은 광범위한 분야에서 뛰어난 성능을 보여줬으며, LLM의 성능을 개선하기 위한 다양한 시도가 있었음: - [Fine-tuning](/pages/Fine-tuning.txt): 이 가능한 상태의 일반 모델에 특정 도메인에 특화된 학습용 데이터를 추가로 제공하여 해당 도메인에 특화된 모델로 조율하는 기법. 보통은 을 하고 나면 (해당 분야에 한하여) 성능이 많이 좋아짐. - : ChatGPT 류의 대화형 LLM에서, 별도의 학습 과정을 거치지 않고 대화 중에 학습이 일어나도록 하는 방식. - Prompt generation: (컴퓨터로 프롬프트를 생성하는 방법에 대한 여러 연구들이 있었다고 합니다) - [Prompt engineering](/pages/Prompt%20engineering.txt): LLM에게 <자연어>로 된 지시를 잘 내리는 방법에 대한 연구 LLM을 잘 쓰려면 좋은 자연어 지시가 필요하기 때문에 그동안은 인간이 이런저런 시도를 하며 시행착오를 거쳐야 했음. 이 비용을 줄이기 위해, LLM을 이용하여 프롬프트를 생성하고 해당 프롬프트의 품질을 평가하는 <알고리즘>을 제안하고자 함. ## 2. Related Work - LLM: 거대 언어 모델 (설명 생략) - [Prompt engineering](/pages/Prompt%20engineering.txt): (설명 생략) - Program synthesis: 전통적인 프로그램 합성은 주어진 목적을 만족하는 <소스 코드>를 자동으로 생성하는 일을 말함. 본 연구에서는 자연어로 된 프롬프트를 일종의 소스 코드로 간주하고 LLM을 이 코드를 실행하는 블랙박스 컴퓨터로 간주. ## 3. Natural Language Program Synthesis Using LLMs 문제 정의: - 질문-답변 쌍으로 이루어진 데이터셋에 대하여, 언어모델 M에 질문 Q를 넣었을 때 답변 A가 나오도록 만드는 그러한 단일한 프롬프트 p를 찾기. 품질 좋은 프롬프트를 찾는 두 가지 방법: - **Forward Mode Generation**: "내가 친구한데 어떤 지시를 했더니 친구가 그걸 읽고 다음 질문들에 대하여 이렇게 답을 했어. 질문1, 답변1, 질문2, 답변2, … . 친구는 어떤 지시를 받았을까? <이 부분을 완성하시오>" - 질문: 검정색 답변: 흰색 - 질문: 위 답변: 아래 - 후보1: "주어진 단어와 뜻이 반대되는 단어를 대답하세요." - 후보2: "반의어를 찾으세요." - **Reverse Mode Generation**: "내 친구에게 다음과 같은 지시를 했어: <여기를 채우시오> 그랬더니 친구가 그걸 읽고 다음 질문들에 대하여 이렇게 답을 했어. 질문1, 답변1, 질문2, 답변2, …" 평가 함수: - **Execution accuracy**: 프롬프트에 따른 답변이 얼마나 정확한지를 기반으로 점수를 평가. 답과 일치하면 1점, 일치하지 않으면 0점. (zero-one loss function) - **Log probability**: zero-one loss function에 비해 더 정밀한 답을 얻기 위해 사용. - **Efficient score estimation**: 효율을 높이기 위해 더 가능성 있는 후보에게 더 많은 계산 리소스를 할당하고 가능성 낮은 후보를 걸러내는 방식을 적용 **Interative Monte Carlo Search**: - 프롬프트가 충분히 다양하지 않을 수 있으므로 LLM에게 "Generate a variation of the following instruction while keeping the semantic meaning"이라고 지시하여 여러 프롬프트를 생성. - 예: "주어진 단어와 뜻이 반대되는 단어를 대답하세요."라는 명령이랑 뜻은 비슷하지만 형태는 다른 문장을 10개 만들어줘. ## 4. Large Language Models are Human-Level Prompt Engineers **Zero-shot performance**: - 다섯개 질문-답변 쌍을 주고 해당 질문-답변 쌍을 생성하기 위한 가장 좋은 프롬프트를 찾아낸 뒤, 해당 프롬프트를 InstructGPT에 제시하여 결과가 얼마나 좋은지 평가. - 인간이 쓴 프롬프트, 기존 알고리즘(Honovich et al. 2022)에 의해 얻어진 프롬프트 각각과 비교하여 24개 항목 중 24개 모든 항목에서 같거나 우수. **Few-shot in-context learning performance**: - Zero-shot execution accuracy에 기반하여 선정한 프롬프트에 예시를 몇 개 추가. - 24개 중 21개 항목에서 우수. 흥미롭게도 일부 과업에서는 예시를 추가했더니 오히려 성능이 나빠짐 **Zero-shot chain-of-thought reasoning**: Kojima et al., 2022는 "Let's think step by step"을 추가했더니 LLM의 성능이 크게 향상되는 현상을 발견. (기존 17.7점에서 78.7점, 기존 10.4점에서 40.7점 등) (See [Large Language Models are zero-shot reasoners](/pages/Large%20Language%20Models%20are%20zero-shot%20reasoners.txt)) - 알고리즘에 의해 "Let's"로 시작하는 지시문을 생성하게 했더니 "Let's work this out in a step by step way to be sure we have the right answer"를 만들어냄. 이 문장을 썼더니 점수가 더 향상됨(78.7 → 82.0, 40.7 → 43.0). **TruthfulQA 데이터셋에 대한 프롬프트 엔지니어링**: - [TruthfulQA](/pages/TruthfulQA.txt)? 모델의 답변이 얼마나 신뢰할만한지 평가하기 위해, 법/건강/금융/정치 등 38개 분야의 817개 질문으로 구성된 데이터셋. - 모든 분야에서 쓸 수 있는 가장 좋은 프롬프트를 찾는 게 목적. - APE가 생성한 프롬프트: "You will be asked a series of questions. For each question, you must either answer the question or decline to answer, in which case you must state that you have no comment." - 인간이 작성한 프롬프트에 비해 약간 우세. ## 5. Quantitative Analysis (생략) ## 6. Conclusion 인간의 개입이 거의 없이 품질 좋은 프롬프트를 생성할 수 있었음. 대부분의 과업에서 인간을 상향.