AI/Fundamental

프롬프트 엔지니어링이란? Prompt Engineering, in-context learning (Zero, One, Few-shot)

방황하는 데이터불도저 2024. 5. 7. 22:57

prompt란?

prompt : 컴퓨터가 사용자의 입력을 받을 준비가 되어있고, 

promptable : 입력을 받을 수 있는 것 또는 상태

 

prompt engineering이란?

프롬프트 엔지니어링은 대규모 언어 모델(LLM)으로부터 원하는 답변에 대해 높은 품질의 결과를 추출하기 위해서 프롬프트의 입력 텍스트를 적절히 조합하는 것을 말합니다. 

 

llm의 답변에 대한 지침을 부여하는 것으로 대표적인 llm을 제공하는 OpenAI의 ChatGPT의 예시를 보겠습니다. 아래와 같이 프롬프트 엔지니어링을 위한 6가지 전략을 제시하였습니다.

  1. Write clear instructions : 명확한 지시서를 작성해라. (ex. 전문가 수준의 긴 답변) 
  2. Provide reference text (ex. fake information 최소화를 위해 document를 제공)
  3. Split complex tasks into simpler subtasks (ex. 책 전체보다는 파트별로 요약을 요청)
  4. Give the model time to think : 사람도 복잡한 질문에는 대답하기까지 시간이 걸린다.
  5. Use external tools (ex. function calling)
  6. Test changes systematically : gold-standard answers를 통해 모델을 평가하라.

Prompt engineering - OpenAI API > 해당 링크에서 위의 내용에 대한 구체적인 예시를 확인할 수 있습니다.

 

 

In-Context Learning이란?

프롬프트 엔지니어링의 구체적인 방법으로는 in-context learning(ICL)라는 것이 있습니다. 

  • 사전학습된 기반 내에서 원하는 문맥 상의(in-context) 대답을 하도록 prompt의 일부로써 모델에게 특정 task에 대한 demonstrations(input-label pairs)을 제시한다.
  • 제시된 demo를 이해(learning)하여 특정 task에 적절한 맥락으로 답변한다.
  • 모델을 weights 자체를 변경하는 fine-tuning (파인튜닝)을 하지 않는다

 

  • 비슷한 학습방법으로는 Meta Learning이 있습니다. 이는 Alex et al.을 참조하여 이해할 수 있습니다.

 

적절한 in-context learning을 위해서 입력할 demonstrations(prompt)를 잘 구성해야합니다. 해당 방법이 잘 작동하는 이유는 아래와 같습니다.

  • llm에 사전학습된 label space(y)가 있다.
  • llm에 입력하는 질문 텍스트(x)가 있다.
  • demonstrations를 입력하여 input(x)와 그에 상응하는 답변(y)을 매핑시킨다.
  • demonstrations을 통해 입출력에 대한 format도 명확히 할 수 있다.

 

예시 demonstrations로는 해당 블로그에 참조 문서로 걸어둔 것들을 참고해보시면 잘 이해가 될 것입니다.

 

 

Prompting 종류들

사실, ICL(= 질문(input)-정답인 답변(label)의 쌍을 prompt(demonstrations)로 입력) 하지 않더라도 random labels(무작위 정답)를 통해 비슷한 정확도로 결과를 얻을 수 있다는 연구(Min et al.)도 존재합니다. 하지만 적절한 지시문을 미리 정의한 후 task를 수행하는 것이 좋다는 것은 명백합니다.

 

하지만 특수하지 않고, 일반적인 도메인(ex. 상식)에 대한 prompting을 원하는 경우에는 demonstrations를 아예 넣지 않을 수도 있습니다. 이러한 경우를 Zero-shot Prompting(혹은 method)라고 합니다. 

 

그 외에도 하나의 예시를 prompt로 넣어주는 경우인 One-Shot Prompting, 여러개의 예시를 prompt로 넣는 경우인 Few-Shot Prompting이 있습니다.

 

prompt(demonstrations)를 어떤 내용의 format으로 구성할지 / 몇 회 넣어줄지 / 어떤 구조로 넣어줄지 등에 대해 고급 prompt engineering 연구가 다양하게 이루어지고 있습니다. 예시로는 Retrival Augmented Generation; RAG이나 Chain of Thought; CoT (복잡한 추론을 가능하도록 생각의 단계별로 prompt를 제시) 등이 있습니다.

 

추가적인 고급 프롬프트 엔지니어링은 아래의 사이트에서 참고해볼 수 있습니다.

https://www.promptingguide.ai/

 

Prompt Engineering Guide – Nextra

A Comprehensive Overview of Prompt Engineering

www.promptingguide.ai



기타 참고문서

https://velog.io/@hundredeuk2/In-context-Leaning 

https://velog.io/@dongyoungkim/GPT-fine-tuning-5.-in-context-learning 

https://moonlang.tistory.com/29 

https://www.vellum.ai/blog/zero-shot-vs-few-shot-prompting-a-guide-with-examples