본문 바로가기
project

[DevPrep] 3. gpt 파인튜닝과 프롬프트 엔지니어링

by alphaca202 2024. 2. 17.

gpt 파인튜닝

가능한 모델

- gpt-3.5-turbo-1106 (추천) -> turbo : chat gpt를 지원하는 모델

- gpt-3.5-turbo-0613

- babbage-002 -> 간단한 분류, 검색을 잘함, 검색 쿼리 일치 순서 매기

- davinci-002 -> 복잡한 의도를 이해하거나 요약, 창의적인 콘텐츠 생성 등을 잘함.

- gpt-4-0613 (experimental).

이용 예시

- 스타일, 톤, 포맷 등을 설정할 때

- 신뢰성 향상과 바라는 결과를 얻기 위해

- 복잡한 프롬프트에 따른 오류를 바로잡기 위해서

- 특수한 경우에 대한 핸들링 등

-> 일단 프롬프팅부터 해보라고 계속 강조함.... 프롬프팅부터 하고 프롬프팅으로 어려운 것 파인튜닝 하기

데이터 셋 준비하기

You should create a diverse set of demonstration conversations that are similar to the conversations you will ask the model to respond to at inference time in production.

-> 너가 물어볼 형식과 비슷한 대화 세트로 구성한 데이터가 필요하다.

(전문성이 없는 상태에서 자의적이지 않으려면 어떻게 해야하는가?)

 

예시1

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}

 

예시2

{"prompt": "", "completion": ""}
{"prompt": "", "completion": ""}
{"prompt": "", "completion": ""}

 

필요 데이터 수 (추천)

10개 이상은 필요하고

50 - 100개 정도의 데이터는 있어야 뚜렷한 성능 향상을 볼 수 있음.

 

토큰 개수 세기...

gpt-3.5-turbo-1106 (recommended) 얘의 경우 16385토큰 까지 입력 가능함

라이브러리 사용해서 토큰수 셀 수 있음 ex) jtokkit

예상 비용

base cost per 1 tokens (1토큰 당 기본 비용)

*

number of tokens in the input file (입력 파일의 토큰 수)

*

number of epochs trained (트레인된 에폭 수)

모델명 학습 (1K) 입력 (1K) 출력 (1K)
GPT-3.5-turbo $0.0080 $0.0030 $0.0060

 

* open ai gpt 파인튜닝 공식 문서 참고
https://platform.openai.com/docs/guides/fine-tuning

 


프롬프트 엔지니어링

더 나은 결과를 위한 6가지 전략

 

1. 명확한 지시 내리기

  • Include details in your query to get more relevant answers (디테일하게 적기)
  • Ask the model to adopt a persona (모델에 페르소나 부여하기)
  • Use delimiters to clearly indicate distinct parts of the input (구획문자 사용해서 포맷팅하기)
  • Specify the steps required to complete a task (단계 구체화해서 말해주기) - step1 step2~ 이런 식으
  • Provide examples (예시 제시하기)
  • Specify the desired length of the output (원하는 길이 말해주기)

2. 참조 텍스트 제공하기 

  • 참조 텍스트 (뉴스, 인용문 등) 제공

3. 단순한 작업으로 쪼개기

 

4. 모델에게 생각할 시간 주기

 

5. 외부 도구 사용하기

 

 

 

 


DevPrep 필요 데이터

  • 질문에 대한 솔루션 포맷 설정한 데이터
  • 꼬리질문 데이터
  • 모범 답안 데이터 (생성)

질문 -> 솔루션

- 경험과 생각을 묻는 질문 (직무 관련 경험, 프로젝트 경험, 인턴 경험..) -> 질문에 부합하는 내용인가? 구체성, 수치로 표현되었는가? 행동에 대한 근거가 명확한가? 명확한 목표를 설정하였는가?

- 지식을 묻는 질문 (기술 스택, cs 지식 ) -> 질문에 부합하는 내용인가? 빠진 내용은 없는가?

솔루션 : 구체적인 프롬프팅(유형에 따라 다르게)

꼬리질문 : 데이터 파인튜닝

모범 답안 : 데이터 파인튜닝

질문, 대답 데이터 -> 테스트에 필요

<솔루션 구조>

  • 답변 하나마다 솔루션 제공
  • 답변 내용의 적절성, 충분성, 구체성 평가 지표 (추후 미팅을 통해 확정 예정)
    • 적절성 : 질문에 부합하는 내용인가
    • 충분성 : 빠진 내용이 있는가
    • 구체성 : 추상적인 내용이 있는가
  • 꼬리 질문 예측 (더 세부적, 심층적으로 답변할 수 있도록)
    • 우선, 솔루션 부분에서 예측되는 꼬리 ‘질문만’ 제시 → 이 질문에 따른 솔루션은 추후 논의 필요
  • 다른 답안 공유
    • 2가지 옵션
      • 질문 생성 알고리즘 사용시, 모범 답안 생성
      • 질문 추천 알고리즘 사용시, 데이터셋에서 모범 답안 추출