다양한 언어모델을 효율적으로 사용할 수 있도록 프롬프트를 개발하고 최적화하는 분야
프롬프트 엔지니어링은 LLM의 기능과 한계를 더 잘 이해하는데 도움이 된다
개발자는 프롬프트 엔지니어링을 사용해서 LLM 및 인터페이스를 형성하고, 빌드하는 프롬프트 기술을 설계한다.
LLM 설정
프롬프트를 사용할 때, API를 사용하거나 직접 LLM과 상호작용 할 수 있다.
몇 가지 파라미터를 설정하여 프롬프트에서 여러가지 결과를 얻을 수 있다.
temperature : Temperature는 모델의 예측 가능성을 제어하는 다이얼이라고 생각하면 된다.
낮을수록 항상 가장 확률이 높은 토큰이 선택되기 때문에 더 결정론적인 결과를 낳는다.
top_p : 응답 가변성 미세 조정하기. 모델이 응답을 생성하는 결정성을 제어할 수 있다. 정확하고 사실적인 답변을 원한다면 이를 낮게 유지한다. 더 다양한 반응을 원한다면 더 높은 값으로 증가시킨다.
Frequency Penalty: 빈도 패널티
이 설정은 모델이 동일한 단어나 구를 반복하지 못하도록 한다.
빈도 패널티를 높이면 모델의 언어에 다양성을 더하고 중복성을 줄일 수 있다.
Presence Penalty: 존재 패널티
얼마나 자주 나타나는 지에 관계없이 반복되는 모든 토큰에 동일하게 패널티를 부과해 다양한 답변이 나오도록 한다.
! 일반적으로 명확한 결과를 얻으려면 Temperature 또는 top_p, Frequency, Presence 페널티 중 하나만 조정하고 둘 다 조정하지 않는 것이 좋다.
Basic Prompt
간단한 프롬프트 예시)
Prompt:
하늘은
Output:
푸른색입니다.하늘은 맑은 날에는 푸른색입니다. 흐린 날엔 하늘은 회색 혹은 하얀색을 띨 수 있습니다.
⇒ 이 결과물은 우리가 예상치 못했거나 원하는 문장이 아닐 수 있다.
Prompt:
문장을 완성해 줘:하늘은
Output:
오늘 매우 아름답습니다.
⇒ 이 결과물은 “문장완성”을 해서 답변을 출력했다.
모델에게 작업을 수행하도록 지시하기 위해 최적의 프롬프트를 설계하는 접근방식을 프롬프트 엔지니어링이라고 한다.
LLM은 텍스트 요약, 수학적 추론 등 고급작업을 수행할 수 있다.
Techinques
제로샷 프롬프팅 (zero-shot prompting)
: 예시없이 모델에게 응답요구
퓨샷 프롬프팅 (few-shot prompting)
:여러 예시들을 먼저 보여주면 퓨샷 프롬프팅은 문맥에 맞는 학습을 할 수 있다.
Limitations of Few-shot Prompting
: 복잡한 추론 작업을 처리할 때는 여전히 완벽한 기술은 아니다.
이 집합{15, 32, 5, 13, 82, 7, 1}에서 홀수를 모두 더하면 짝수이다.A:
이 작업을 다시 시도하면 모델이 다음과 같이 출력한다.
네, 이 집합의 홀수를 모두 더하면 짝수인 107입니다.
이는 정답이 아니며, 이러한 시스템의 한계를 보여줄 뿐만 아니라 더 발전된 프롬프트 엔지니어링이 필요하다는 것을 보여준다.
Chain-of-Thought (CoT) Prompting
: 중간 추론 단계를 통해 복잡한 추론을 가능하게 한다.
이를 단답형 프롬프트와 결합하면 응답하기 전에 추론이 필요한 복잡한 작업에서 더 나은 결과를 얻을 수 있다.
Prompt:
집합 {4, 8, 9, 15, 12, 2, 1}에서 홀수를 모두 더하면 짝수야.답변: 홀수(9, 15, 1)를 모두 더하면 25가 돼. 위의 명제는 거짓이야.집합 {17, 10, 19, 4, 8, 12, 24}에서 홀수를 모두 더하면 짝수야.답변: 홀수(17, 19)를 모두 더하면 36이 돼. 위의 명제는 참이야.집합 {16, 11, 14, 4, 8, 13, 24}에서 홀수를 모두 더하면 짝수야.답변: 홀수(11, 13)를 모두 더하면 24가 돼. 위의 명제는 참이야.집합 {17, 9, 10, 12, 13, 4, 2}에서 홀수를 모두 더하면 짝수야.답변: 홀수(17, 9, 13)를 모두 더하면 39가 돼. 위의 명제는 거짓이야.집합 {15, 32, 5, 13, 82, 7, 1}에서 홀수를 모두 더하면 짝수야.답변:
Output:
홀수(15, 5, 13, 7, 1)를 모두 더하면 41이 돼. 위의 명제는 거짓이야.
추론 단계를 추가했을 때 완벽한 결과를 볼 수 있다.
Zero-shot CoT Prompting
: 원래의 프롬프트에 "단계별로 생각하기"를 추가하는 것이 핵심
간단한 예시)
Prompt:
나는 시장에 가서 사과 10개를 샀어. 사과 2개를 이웃에게 주고, 2개를 수리공에게 주었어. 그리고 사과 5개를 더 사서 1개는 내가 먹었어. 나는 몇 개의 사과를 가지고 있었니?
Output:
사과 11개
⇒ 오답이다. “단계별로 생각하기”를 추가해보자.
Prompt:
나는 시장에 가서 사과 10개를 샀어. 나는 사과 2개를 이웃에게 주고, 2개를 수리공에게 주었어. 그리고 사과 5개를 더 사서 1개는 내가 먹었어. 사과가 몇 개나 남았니?단계별로 생각해 보자.
Output:
먼저 사과 10개로 시작했어.이웃에게 2개, 수리공에게 2개를 나누어 주었으므로 사과가 6개가 남았어.그런 다음 사과 5개를 더 사서 이제 사과가 11개가 되었어.마지막으로 사과 1개를 먹었으므로 사과 10개가 남게 돼.
프롬프트에 사용할 예시가 그리 많지 않을 때 특히 유용하다.
Retrieval Augmented Generation (RAG)
더 복잡한 지식을 모아 요약하는 작업의 경우 외부 지식 소스에 액세스하여 완료하는 언어 모델 기반 시스템을 구축할 수 있다. 이를 통해 사실적 일관성을 높이고, 생성된 응답의 신뢰성을 향상시키며, "환각(hallucination)" 문제를 완화하는 데 도움이 된다.
Meta AI 연구원들은 이러한 지식을 모아 요약하는 작업을 해결하기 위해 Retrieval Augmented Generation (RAG) 라는 방법을 도입했다.
RAG는 정보 구성 요소를 글자 생성기 모델과 결합한다. RAG는 미세 조정이 가능하며 전체 모델을 재교육할 필요 없이 내부 지식을 효율적으로 수정할 수 있다.
- RAG는 입력을 받아 주어진 소스(예: 위키피디아)에서 관련된/지원하는 문서들을 찾는다.
- 문서는 원래 입력 프롬프트와 컨텍스트로 연결되어 최종 출력을 생성하는 텍스트 생성기에 공급된다.
- 따라서 시간이 지남에 따라 RAG는 어떤 상황이던 사실적으로 적응할 수 있다.
- RAG는 언어 모델들의 재교육 우회를 허용하여, 검색 기반 생성을 통해 신뢰할 수 있는 출력물을 생성하여 최신 정보로 접속할 수 있다.
최근에는 이러한 접근 방식이 더욱 대중화되었으며 기능과 사실적 일관성을 향상시키기 위해 ChatGPT와 같은 인기 있는 LLM이 결합되었다.
'Prompt Engineering' 카테고리의 다른 글
LangChain RAG (0) | 2024.01.14 |
---|---|
자연어 처리 (NLP: Natural Language Processing) (31) | 2024.01.09 |
LLaMA Paper review: pytorch in LLaMA (1) | 2023.12.26 |