[자연언어처리 개론] Prompting
지난 포스트에 이어서 Prompting에 관해 정리해 보겠다.
Prompting이란 특정 과제에 대한 가이드라인을 사전학습된 언어모델의 입력 텍스트로 주어서, 언어모델이 새로운 일을 할 수 있도록 만드는 것을 말한다. 새로운 과제를 시키려면 새로운 데이터를 바탕으로 재훈련을 거쳐야 했던 기존 모델들과 다르게, 거대 언어모델은 프롬프트를 적절히 입력하는 것만으로 새로운 과제를 수행하는 few-shot / zero-shot을 구현할 수 있다.
Prompt Engineering
좋은 프롬프트는 사람이 직접 글을 쓰고 시험해 가면서 찾을 수도 있지만, 자동으로 특정 과제에 적합한 프롬프트를 찾아낼 수도 있다. 또, 이렇게 자연어로 된 discrete prompt (혹은 hard prompt) 뿐만 아니라 embedding space의 원소들도 직접 언어모델에 입력한다면 프롬프트로 볼 수 있으며, 이를 continuous prompt (혹은 soft prompt)라고 한다.
자연어로 된 discrete prompt는 seed prompt를 여러 가지로 paraphrasing하고 시험한 뒤, 가장 높은 정확도를 내는 프롬프트를 선택하는 식으로 만들 수 있다. 이때 paraphrasing을 위한 별도의 언어모델을 사용하기도 한다.
continuous prompt의 경우 미분이 정의되므로, 프롬프트 최적화에 gradient를 활용할 수 있다. Li와 Liang (2021) [2]은 prefix tuning을 제안했는데, 이는 프롬프트의 맨 앞에 '가상의 토큰'에 해당하는 임베딩 하나를 추가하고, 이 임베딩을 gradient descent로 최적화해 언어모델의 task-specific performance를 개선했다.
미분할 수 없는 discrete prompt도 gradient를 이용해 최적화하는 방법들이 연구되어 있다. 일례로 Wen et al. (2023) [3]은 자연어 프롬프트를 embedding space로 보내고, gradient를 이용해 연속적으로 최적화한 후, 다시 vocabulary의 임베딩들로 projection하여 자연어 프롬프트를 재구성했다. 또한, discrete prompt를 이용하되 이들의 임베딩에 tunable parameter를 삽입하는 hybrid tuning 방법도 연구되어 있다.
Prompt Templates and Prompt Mining
Prompt template이란 형식화된 자연어 프롬프트를 쉽게 만들 수 있도록 준비한 템플릿을 말한다. 예를 들어,
'''
Write a short story (under 250 words) that features the following elements. Ensure the story has a clear beginning, middle, and end.
Genre: {GENRE}
Main Character: {CHARACTER_NAME}
Setting: {LOCATION}
'''
위 예시처럼 프롬프트를 형식적인 틀을 준비해 놓고, 입력만 바꿔 끼워가며 언어모델에 입력하는 식이다. 이런 템플릿은 사람이 직접 만들 수도 있지만, 언어모델의 pre-training에 사용된 데이터를 분석하여 언어모델에게 '친숙한' 글의 구조를 분석하고, 그 결과를 템플릿 제작에 활용하기도 한다. 이런 분야를 prompt mining이라고 한다. [4]
Chain-of-Thought (CoT)
일반적으로 언어모델에게 다단계의 추론이나 수학 계산이 필요한 문제를 물어보면 잘 대답하지 못한다. (ChatGPT 출시 초기인 2023년에는 정말 못했다.) 이때 언어모델이 단박에 정답을 맞추게 하기보다는, 그 앞의 논리적인 사고 과정을 순차적으로 생성하도록 하면 추론의 정확도가 증가한다는 것이 밝혀졌다. 이를 Chain-of-Thought라고 한다. Wei et al. (2022) [5]은 이러한 현상이 GPT-3와 같은 거대 언어모델에서 '창발'한다는 것을 발견했다. 지도학습이나 인간 피드백 강화학습을 통해 명시적으로 CoT를 가르치지 않아도, 프롬프팅만을 통해 CoT를 실현하는 것이 가능하다는 것이다.
특히, 거대 언어모델에서는 zero-shot prompting을 통한 CoT가 가능하다. Kojima et al. (2022) [6]은 프롬프트에 그냥 "Let's think step by step"이라는 문장 하나만 넣어도 추론이 더 효과적으로 이루어짐을 발견했다. (이 연구가 나왔을 당시 필자는 고등학교 2학년이었는데, 기사를 통해 내용을 접하고 신선한 충격을 받은 기억이 있다.)
CoT는 추론의 정확성을 높일 뿐만 아니라 언어모델의 사고 과정을 간접적으로 들여다볼 수 있다는 점에서 유용하다. 특히 언어모델이 설명한 추론의 과정에서 잘못되거나 모순되는 근거가 없는지 확인함으로써 언어모델의 답변을 신뢰해도 되는지 검증할 수 있다.
개인적으로 '프롬프트 엔지니어링'이라는 말을 들으면 "그게 무슨 엔지니어링이야" 하는 선입견이 있었는데, 본 강의를 수강하며 나름 여러 관점에서 재미있는 연구들이 이루어지고 있다는 것을 알게 되었다.
References
- 황승원 교수님 강의노트
- Li, X. L., & Liang, P. (2021). Prefix-tuning: Optimizing continuous prompts for generation. arXiv preprint arXiv:2101.00190.
- Wen, Y., Jain, N., Kirchenbauer, J., Goldblum, M., Geiping, J., & Goldstein, T. (2023). Hard prompts made easy: Gradient-based discrete optimization for prompt tuning and discovery. Advances in Neural Information Processing Systems, 36, 51008-51025.
- Jiang, Z., Xu, F. F., Araki, J., & Neubig, G. (2020). How can we know what language models know?. Transactions of the Association for Computational Linguistics, 8, 423-438.
- Wei, J., Wang, X., Schuurmans, D., Bosma, M., Xia, F., Chi, E., ... & Zhou, D. (2022). Chain-of-thought prompting elicits reasoning in large language models. Advances in neural information processing systems, 35, 24824-24837.
- Kojima, T., Gu, S. S., Reid, M., Matsuo, Y., & Iwasawa, Y. (2022). Large language models are zero-shot reasoners. Advances in neural information processing systems, 35, 22199-22213.