Prompt
"이 영화는 너무 지루해" 라는 문장의 감정을 분석해줘
GPT
부정적인 감정입니다.
Prompt
"그 영화는 너무 지루해" -> 부정적
"그 영화 심심했어" ->
GPT
부정적
Prompt :
"그 영화는 너무 지루해" -> 부정적
"그 영화 뭐 그냥 볼만해" -> 중립적
"그 영화 정말 재미 있던데?" -> 긍정적
"그 영화 신나" ->
GPT :
긍정적
In-Context Learning의 특성으로 등장한 개념으로, 프롬프트를 정교하게 구성함으로써 모델이 가진 지식을 최대한 이끌어 내고 출력 형식을 사용자의 의도에 맞게 조정하는 작업
모델이 충분한 정보를 가지고 있지 않도면 프롬프트를 아무리 정교하게 구성해도 한계에 직면한다. 선생님이 아무리 보고서 잘 쓰는 방법을 설명해도 초등학생이 대학생 수준의 보고서를 쓸 수 없는 것과 같다.
그래서 특정 도메인이나 task에는 파인튜닝이 효과적일 수밖에 없다. 특정 작업에 맞는 데이터셋으로 파인튜닝 하면 모델은 해당 데이터로 학습하게 되어 업데이트하게 된다. 이미 원하는 형식을 모델이 배운 상태이므로 별도 프롬프트 설계 없이 zero-shot으로 한 번에 원하는 출력을 만들 수 있게 된다.
하지만 뚜렷한 단점도 있다.
특성 | 프롬프트 엔지니어링 (Prompt Engineering) | 파인 튜닝 (Fine-Tuning) | 인스트럭션 튜닝 (Instruction Tuning) |
---|---|---|---|
정의 | 입력 텍스트(프롬프트)를 설계하여 모델의 출력을 조정함 | 기존 모델을 새로운 데이터로 추가 훈련하여 성능을 개선함 | 모델을 지침 기반 데이터로 추가 훈련하여 지침에 대한 반응을 개선함 |
모델 수정 여부 | 모델 자체를 수정하지 않음 | 모델의 파라미터를 업데이트함 | 모델의 파라미터를 업데이트함 |
훈련 데이터 | 사용자가 설계한 프롬프트 텍스트 | 특정 도메인 또는 작업에 맞는 데이터셋 | 다양한 지침과 명령어를 포함한 데이터셋 |
효과 | 프롬프트 디자인을 통해 모델의 즉각적인 응답 개선 | 모델이 새로운 도메인 또는 작업에 맞게 성능 개선 | 모델이 다양한 지침에 대해 더 정확한 응답을 생성 |
목표 | 모델이 특정 입력에 대해 더 잘 반응하도록 설계 | 모델의 성능을 새로운 데이터나 도메인에 맞게 조정 | 지침이나 명령어에 대해 모델이 올바르게 반응하도록 조정 |
훈련 필요 | 추가 훈련이 필요 없음 | 추가 훈련이 필요 | 추가 훈련이 필요 |
적용 예시 | “Please summarize the following text:”와 같은 명령어 디자인 | 특정 산업에 맞춘 모델, 예를 들어 의료 데이터에 대한 모델 | 지침 기반 데이터로 훈련된 모델, 예를 들어 "질문에 답하라" |
장점 | - 즉각적인 효과, 모델 변경 없이 개선 가능 - 프롬프트에 따른 응답이 달라지므로 유연성이 있는 편임 | - 도메인 특화 또는 데이터 기반 성능 개선 가능 - 내재된 정보가 적은 작은 모델에서 효과적임 | - 다양한 지침에 대한 성능 개선(유연성) - 모델의 전반적인 응답 품질 향상(정확성) |
단점 | 모델 자체가 충분한 정보를 가지고 있지 않다면 아무리 프롬프트를 정교하게 구성해도 한계에 직면할 수밖에 없음 | - 훈련 데이터와 과정이 필요, 시간이 걸릴 수 있음 - 특정 tast에 대한 데이터셋이 필요함 - 특정 task에만 최적화되어 있어 유형이 달라지면 대응이 어렵고 유연성이 떨어짐 | - 훈련 과정이 필요하고 데이터 준비에 소요되는 비용이 상당함 - open-ended 문제에 대한 채점 기준이 모호함 - 모델의 학습 목표와 인간의 선호 사이 불일치 발생 가능 |
파인튜닝과 In-Context Learning의 장점을 결합하여 모델의 유연성과 정확성을 향상시키기 위한 전략이다. 이 방법은 파인튜닝과 같이 모델을 특정 데이터셋으로 학습 시키는데, 데이터셋의 구성이 사용자의 구체적인 지시(instruction)와 이에 대한 모델의 적절한 응답(output)으로 구성되어 있다는 차이가 있다.
# Instruction Tuning 학습 데이터 예시
Instruction: "김치찌개 끓이는 법을 알려줘"
Output : "물 몇cc, 돼지고기 몇그람, 두부 반모.. 끓이는 순서는.."
이렇게 구성된 데이터셋을 학습함으로써 Zero-shot, 즉 질문 만으로 답변을 도출 할 수 있게 만든다. 만약 지시 내용에 부연 설명이 필요하다면 Instruction에 덧붙여서 In-Context learning의 few-shot 사례처럼 예시를 줄 수도 있다. 이 과정을 통해 모델은 점차 사용자의 지시를 이해하고 이에 적절하게 대응하는 능력을 학습하게 된다.
LLM에 Instruction Tuning 방법론을 적용한 사례는 Stanford의 Alpaca가 있다. Alpaca 모델은 Meta의 LLaMA 기반으로 파인튜닝 된 모델이다.
Alpaca의 데이터셋 설명은 아래와 같다.
# 52K instruction-following data
# This JSON file is a list of dictionaries, each dictionary contains the following fields:
instruction: str, describes the task the model should perform. Each of the 52K instructions is unique.
input: str, optional context or input for the task. For example, when the instruction is "Summarize the following article", the input is the article. Around 40% of the examples have an input.
output: str, the answer to the instruction as generated by text-davinci-003.
데이터를 직접 보면 input이 비어있는 데이터가 더 많았는데, 데이터 설명에서 알 수 있듯 약 40%만 input 필드를 가지고 있다. input은 추가적인 맥락이나 과제 입력을 위한 필드로 다음의 article을 요약해줘
라는 instruction이 있을 때 article 내용을 적는 식이다.
{
"instruction": "Identify the patterns in this set of numbers",
"input": "2, 5, 10, 17",
"output": "This set of numbers follows a pattern of successive odd numbers, where each number is found by adding the previous number to the next consecutive odd number. Thus the pattern is 2 + 3 = 5, 5 + 5 = 10, 10 + 7 = 17."
},
{
"instruction": "Write five tips for managing stress",
"input": "",
"output": "1. Take time for yourself and your hobbies.\n2. Exercise regularly to release endorphins.\n3. Get enough sleep and practice healthy sleeping habits.\n4. Take deep breaths and practice mindful meditation.\n5. Talk to a friend, family member, or mental health professional."
},
{
"instruction": "Create a website for a local Italian restaurant",
"input": "The name of the restaurant is \"Giovanni's\".",
"output": "Giovanni's restaurant will feature an interactive home page that displays pictures of the restaurant, highlights the Italian dishes that they offer, and has a contact form for customers to get in touch with the staff. There will also be an About page which explains the restaurant's history, cuisine, and staff. On the menu page, customers can browse through the restaurant's selection of Italian food and view the prices of each item. Finally, the website will have another page detailing the address and contact information of the restaurant."
},
{
"instruction": "Design an e-commerce website",
"input": "The website is for an online clothing store called \"Trendy Closet\".",
"output": "Trendy Closet will feature an interactive home page that displays a variety of clothing items and allows customers to easily search and browse the store's selection. The website will also include a product page for each item with detailed descriptions, images, and reviews. The store will also have a checkout page for customers to purchase items and a \"My Account\" page for customers to view and manage their orders. Finally, the website will also feature a blog for customers to find fashion tips and inspirations."
},
Alpaca는 Instruction-following data로 학습 시켰다. text-davinci-003
을 활용해 instruction data를 생성했다는 점이 재밌었다. Github에서는 저비용으로 다양성이 높은 instruction-following dataset을 제작했음을 강조하며 아래 표도 보여준다.
Alpaca 데이터셋과 모델 공개 이후 이준범님이 KoAlpaca 모델과 데이터셋을 공개하셨다. KoAlpaca의 데이터셋은 다음 과정을 거쳤다고 한다.
1. Instruct와 Input 번역 및 Input 에러 일부 제외(번역 : DeepL API 사용)
2. Batch Decoding 기법을 통해 gpt-3.5-turbo로 Output 데이터 생성
3. system prompt 추가
위의 Alpaca 데이터셋 예시와 동일한 instruction, input에 대한 KoAlpaca의 데이터셋은 다음과 같다.
{
"instruction":"이 숫자 집합의 패턴을 식별하세요.",
"input":"2, 5, 10, 17",
"output":"\"이 숫자는 다음과 같은 패턴을 가지고 있습니다: 각 숫자는 이전 숫자에서 +3, +5, +7이 추가 된 결과를 가지며, 따라서 다음 숫자는 24입니다.\""
},
{
"instruction":"스트레스 관리를 위한 다섯 가지 팁을 작성하세요.",
"input":"",
"output":"\"1.효과적인 균형감을 유지하기 위해 하루 일과를 계획하세요. 2.친한 친구나 가족과 의사소통하세요. 3.일을 마친 후에는 자신과 일상생활을 떠나 결과를 즐기세요. 4.일이 중요한 것은 맞지만 놀이와 휴식 역시 중요하며, 조금 더 자주 쉬어주어야합니다. 5.다른 사람들의 행복을 증진하는 것으로 자신의 행복감 또한 증가합니다.\""
},
{
"instruction":"현지 이탈리안 레스토랑을 위한 웹사이트 만들기",
"input":"레스토랑 이름은 \"지오바니\"입니다.",
"output":"\"지오바니\" 레스토랑을 위해 맛있는 이탈리안 음식과 함께 인터랙티브한 웹사이트를 만들겠습니다!"
},
{
"instruction":"전자상거래 웹사이트 디자인하기",
"input":"이 웹사이트는 \"트렌디 클로젯\"이라는 온라인 의류 스토어의 웹사이트입니다.",
"output":"오늘날 가장 트렌디한 온라인 의류 스토어 크리에이터로, \"트렌디 클로젯\"의 브랜드를 강화하고 유연한 쇼핑 경험을 제공하는 전자상거래 웹사이트를 디자인하겠습니다."
},
이러한 데이터셋으로 instruction tuning을 하는 코드는 아래 링크에 상세히 설명되어 있다.
KoAlpaca 데이터셋으로 gemma 모델 intruction tuning하기
Instruction tuning은 사용자의 지시에 대해 적절하게 답변하는 방법을 배웠지만 사람답게 답변하는 방법(답변하면 안될 때 답변하지 않도록, 중요한 정보를 포함하여 요약하도록 등)은 배우지 못한 상태이다. 이러한 답변을 극복하고자 한 방법론이 OpenAI가 ChatGPT 개발 과정에서 적용한 RLHF(Reinforcement Learning with Human Feedback)이다.
추가로, LLM 학습에서 양질의 데이터가 성능 향상의 핵심 요소임을 알았다. Instruction tuning과 관련된 다양한 데이터셋이 있으므로 참고하면 좋겠다.
Instruction tuning dataset
참고자료
Instruction tuning이란
Instruction tuning : LLM이 사람 말을 알아 듣는 방법
[논문 리뷰] Finetuned Language Models Are Zero-Shot Learners 2022