ChatGPT Prompt Engineering for Developers
- -
LLM API를 Developer Tool로 활용할 수 있는 가능성은 무궁무진하다.
DeepLearning.AI에서 ChatGPT Prompt Engineering Course를 듣고 정리하였다.
1. Introduction
Two Types of Large Language Models
Base LLM
- 학습 데이터를 기반으로 다음 단어를 예측
그렇기 떄문에 학습 데이터에 여러 질문을 나열한 글이 있다면 LLM은 다음과 같이 문장을 완성한다.- input : "What is the capital of France?"
- output : "What is France's largest city?"
Instruction Tuned LLM
- Base LLM에 추가 학습(RLHF)을 하여 유용한 답변을 할 수 있도록 함
- instruction을 학습해서 해당 instruction을 기반으로 유용한 답변을 할 수 있도록 하여 Base LLM보다 도움이되고 위험하지 않은 답변을 할 수 있다.
- RLHF : Reinforcement Learning with Human Feedback
- input : "What is the capital of France?"
- output : "The capital of France is Paris"
2. Principle of Prompting
Principle 1. 명확하고 구체적인 Prompt를 작성하기
명확하다는 것이 짧아야 한다는 의미가 아니다. 길고 구체적인 Prompt가 오히려 더 명확할 수 있다.
Tactic 1. 구분 기호(Delimiters)를 사용하여 input을 명확히 구분하기
Delimiter로 ```, """, < >, <tag> </tag> 등을 사용하면 된다.
Tactic 2. 정형화(Structured)된 형식을 요구하기
HTML, JSON 등...
결과물을 바로 활용할 수 있다.
Tactic 3. 조건을 충족시키는지 아닌지를 확인해달라고 하기
설명 내용이 아니면 "No Stpes Provided"를 출력해주세요 라고 추가해준다면
아래 첫번째 그림은 차 제조법을 설명하는 내용이고 두번째 그림은 그냥 화창한 날에 대해 서술하는 글이다.
두번 째 글에 대해서는 "No steps provided"를 출력해줌을 통해 Edge case를 막아낼 수 있다.
Tactic 4. "Few-shot" Prompting을 하기
Few shot Learning처럼 Prompting을 작성할 때도 원하는 출력물에 대한 예시를 들어주라는 의미이다.
Principle 2. 모델에게 생각할 시간을 주기
복잡한 수학 문제를 사람에게 대뜸 주어주고 빨리 답을 달라고 요구하면 제대로 해결하지 못하는 것처럼
모델에게 어려운 작업을 짧은 시간이나 몇 안되는 짧은 Query로 요청하면 제대로 inference 되지 않을 수 있다.
따라서 아래와 같은 instruction으로 좀 더 많은 계산작업을 할 수 있도록 할 수 있다.
Tactic 1. 작업을 수행하기 위한 단계들을 제공하기
수행해야 할 단계들을 세부적으로 나누어서 제공하고,
출력 결과도 정형화된 형식(Principle 1 - tactic 2)를 활용하면 좋다.
Tactic 2. 결론을 내리기 전에 먼저 스스로 결과를 도출해보도록 하기
예를들어 학생의 수학 문제가 맞았는지 아닌지를 판단하는 Task를 수행하도록 한다고 가정하자.
정답은 360x + 100,000이 되어야 하는데 모델은 해당 학생이 맞았다고 결론을 내리고 있다.
아래처럼 모델이 먼저 Solution을 찾은 뒤에 학생의 Solution과 비교해보도록 Prompting을 작성한 결과 제대로 된 결론을 도출함을 알 수 있다.
Model의 한계점
아래처럼 정말 존재하는 칫솔 회사의 존재하지 않는 제품에 대해 설명해달라고 하면 사실이 아니지만 그럴싸한 답변을 내놓는다. 이런 문제점을 Hallucination(환각)이라고 한다.
Hallucinations을 줄이기 위해서는 먼저 관련된 정보를 찾고, 그 정보를 기반으로 답변을 하도록 하는 단계를 추가해주면 좋다.
3. Iterative Prompt Development
모델을 학습시킬 때도 1 epoch만 학습시켜서는 제대로 동작하지 않듯이 처음 작성한 Prompt가 처음부터 잘 동작하기는 어렵다.
따라서 Prompt를 반복적 실험을 통해 발전시키는 방법에 대해 소개한다.
Prompt Development Guide
1. 명확하고 구체적인 Prompt 작성
2. 왜 원하는 답변이 나오지 않았는지 분석
3. 분석 결과를 토대로 다시 Prompt 작성
4. 위 과정을 반복
Example
의자의 기술 설명서를 보고 마케팅을 위한 제품 설명서를 작성하고자 한다.
그래서 아래와 같이 Prompt를 작성하였다.
Issue 1. 결과물이 너무 길다.
처음 작성한 Promt로는 1300 단어의 결과물이 나왔다. 너무 길어서 고객은 읽지 않을 것이다.
따라서 최대 50단어를 사용하도록 제한하는 문장을 추가해주었다.
Issue 2. 집중적으로 소개해야할 부분이 생략되었다.
소매상을 대상으로 제품 설명서를 작성하는 것이 목적이다. 따라서 의자의 재질에 대해서 좀 더 집중적으로 소개하고 싶다.
따라서 의도에 대한 부분을 추가한다.
Product ID에 대한 내용도 마지막에 추가해달라고 한다.
Issue 3. 설명 뒤에 제품의 치수 테이블을 추가하고 싶다.
또한 HTML 형식을 사용해서 website에 바로 사용할 수 있도록 하는 문장을 추가해주었다.
4. Summarizing
제품 리뷰에 대한 요약을 하고 싶을 때 아래와 같이 Prompt를 작성할 수 있다.
- 요약 길이를 설정하고 싶을 때
- Your task is to generate a short summary of a product review from an ecommerce site.
Summarize the review below, delimited by triple backticks, in at most 30 words.
- Your task is to generate a short summary of a product review from an ecommerce site.
- 배송 관련 부분에 대해 요약하고 싶을 때
- Your task is to generate a short summary of a product review from an ecommerce site to give feedback to the
Shipping deparmtment.
Summarize the review below, delimited by triple backticks, in at most 30 words, and focusing on any aspects
that mention shipping and delivery of the product.
- Your task is to generate a short summary of a product review from an ecommerce site to give feedback to the
- 가격 및 가성비에 대해 요약하고 싶을 때
- Your task is to generate a short summary of a product review from an ecommerce site to give feedback to the
pricing deparmtment, responsible for determining the price of the product.
Summarize the review below, delimited by triple backticks, in at most 30 words, and focusing on any aspects
that are relevant to the price and perceived value.
- Your task is to generate a short summary of a product review from an ecommerce site to give feedback to the
Summarize는 불필요한 정보가 출력될 때도 있다.
Summarize가 아니라 Extract를 하라고 명령하면 원하는 내용들만 출력할 수 있다.
5. Inferring
제품 리뷰에 대해서 감정 분석을 하거나 고객이 화가 났거나 특정 내용이 담긴 리뷰인지를 확인하는 등의 task를 지도학습으로 학습시킬 수도 있지만 이를 몇분안에 해내기는 불가능할 것이다.
LLM을 사용하면 몇 분안에 해당 task를 수행할 수 있다.
아래는 활용할 수 있는 몇가지 예시들을 소개한다.
1. 간단한 감정 분석 (Positive/Negative)
2. 감정의 유형 분류
Ex) 5가지 이하의 감정 유형을 얻고 싶을 때
3. 리뷰로 부터 고객이 주문한 상품명이나 회사명 같은 정보 추출
6. Transforming
번역, 말투 바꾸기, 맞춤법 검사 등의 Transforming도 가능하다.
1. 번역
2. 톤 바꾸기
3. 형식 바꾸기
4. 맞춤법 검사
참고) Readline 라이브러리를 사용하면 작성한 글과 수정본을 가지고 시각화로 비교할 수 있다.
7. Expanding
고객 리뷰들에 대해서 자동 답변 같은 글을 생성할 수 있다.
고객 서비스 AI Assistant이고 고객에게 이메일 답장을 보내는 것이라고 정확하게 명시한다.
고객의 리뷰는 ```로 구분되어 주어진다.
감정이 긍정적이거나 중립적이면 고객 리뷰에 대해 감사를 표시하고, 부정적인 경우에는 사과하고 고객 서비스에 문의하는 것을 제안한다. 그리고 리뷰의 구체적인 내용을 사용하라.
간결하고 전문적인 톤을 사용하라.
이메일에 AI 고객 상담원이라고 서명하라.
Temperature
언어모델에서 Temperature Scaling(모델의 출력 logit 값을 temperature로 나누는 방식)을 통해 다음 토큰의 확률 분포를 대소 관계의 역전 없이 분포의 모양만을 바꾼다.
OpenAI의 API에서는 temperature를 0으로 설정하면 상대적으로 정확한 문장을, 0보다 크게 설정한다면 좀 더 다양한 문장을 생성할 수 있다.
8. Chatbot
메세지의 Role을 정할 수 있다.
system의 경우 페르소나를 지정할 수 있다.
user는 유저의 chat history이고
assistant는 모델의 답변들이다.
'딥러닝' 카테고리의 다른 글
[모델 경량화] 작은 모델, 좋은 파라미터 찾기 - AutoML (0) | 2023.04.24 |
---|---|
[모델 경량화] 경량화란 (0) | 2023.04.20 |
Inductive Bias (0) | 2023.04.07 |
Batch Normalization / Layer Normalization (0) | 2023.04.02 |
딥러닝에서 왜 목적함수로 MSE가 아닌 Cross Entropy를 사용할까? (0) | 2023.03.31 |