본 포스팅 시리즈에서는 최근 트랜드였던 ChatGPT에 대한 개요와 OpenAI에서 제공하는 AI 언어모델 API를 이용한 응용 사례들, OpenAI에서 제공하는 각종 모델의 특징들에 대해 안내하고 더 나아가 OpenAI에서 제공하는 AI 언어모델 API 사용법, 인공지능 모델에 목표를 부여하고 특정 방향성으로 응답하도록 하는 인공지능 튜닝방법 까지 소개할 예정입니다.
이번 포스트는 세번째 시리즈로서, Open AI API를 사용한 챗봇 만들기 예시를 통해 AI 모델의 파인 튜닝 방법과 응용법에 대해 소개하겠습니다
파인튜닝 방법 #
Open AI에서는 모델에 대해 Fine-tuning 파인 튜닝 기능을 제공합니다.
Fine-tuning 파인 튜닝을 통해 OpenAI의 텍스트 모델인 ChatGPT 프롬프트보다 더 높은 품질의 결과를 기대할 수 있습니다. 또한 모델이 Fine-tuning 파인 튜닝을 통해 조정되면 더 적은 예제를 제공해도 되며 비용절감과 요청 대기시간의 단축을 기대할 수 있습니다.
파인튜닝을 사용하는 경우 #
파인튜닝으로 모델의 응답 결과를 개선할 수 있는 몇가지 사례는 다음과 같습니다.
- 스타일, 어조, 대답 형식의 지정 및 퀄리티 상승
- 학습한 내용에 대한 응답 결과의 신뢰성 향상
- 특정 케이스에 대한 응답 방향 설정 처리
파인튜닝을 통해 모델에 지시어, 질문(프롬프트)과 그에 따른 모범답안의 예시를 제시하여 모델의 응답 방향성을 미세 조정할 수 있습니다.
데이터셋 준비 #
파인 튜닝을 위해서는 JSONL 포멧의 학습 데이터를 준비해야 합니다. 조정하고자 하는 대화의 방향성과 유사한 다양한 데모 대화 데이터를 만들어야 합니다.
JSONL 포멧은 JSON Lines 텍스트 형식을 칭하며 JSON 포멧과 유사한 형태이지만 라인으로 구분되는, 라인 당 하나의 JSON Object 형태의 JSON 데이터 집합이라는 차이가 있습니다.
파인 튜닝할 모델에 따라 요구하는 JSONL 내의 JSON 데이터 포멧 정보가 다르기 때문에 파인 튜닝하고자 하는 모델에 맞게 데이터 셋을 구성해야 합니다.
포스팅 시점의 파인 튜닝이 가능한 모델은 babbage-002
, davinci-002
, gpt-3.5-turbo-0613
, gpt-3.5-turbo-1106
, gpt-4.0
이 있으며 gpt-4.0은 특수 라이선스가 있는 유저만 파인 튜닝이 가능한 상태 입니다. gpt-3.5-turbo
뒤에 붙어있는 0613
, 1106
등의 일자는 gpt-3.5-turbo
모델의 스냅샷 날짜로 해석하면 됩니다.
본 포스팅에서는 Legacy 모델인 babbage-002
, davinci-002
를 사용하지 않고 파인 튜닝이 가능한 가장 최신 모델인 gpt-3.5-turbo-1106
모델을 통해 파인튜닝 예제를 진행해 보도록 하겠습니다.
데이터셋 포멧 #
gpt-3.5-turbo-1106
모델의 데이터셋은 다음과 같은 포멧의 JSON Line으로 구성된 파일을 필요로 합니다.
{"messages": [{"role": "system", "content": "{시스템 지시어}"}, {"role": "user", "content": "{예상 질문}"}, {"role": "assistant", "content": "{예상 질문의 모범 답안}"}]}
system
: 시스템 지시어. 모델에 역할을 부여하거나 전반적인 대화 방향성을 조정합니다.user
: 사용자의 질문. 사용자가 질문할 가능성이 있는 예상 대화를 입력합니다.assistant
: 모델의 응답. 모델이 응답했으면 하는 정보를 포함한 내용을 입력합니다.
위의 포멧대로 여러 데이터셋을 준비해야하며, 같은 내용의 질문을 여러 어투와 방식으로 질문하는 내용을 추가하는 것은 파인 튜닝 완료된 모델의 응답 정확도를 더 향상시킬 수 있습니다.
데이터셋 예제 #
다음은 이노팩토리 챗봇을 위한 gpt-3.5-turbo-1106
모델의 파인튜닝에 사용한 JSONL 데이터의 일부 세트 예제입니다.
{"messages": [{"role": "system", "content": "너는 존댓말로 대답하는 회사 행정 Q&A 챗봇 이고 이름은 이노메이트 야. 너는 url이 포함된 응답을 할 때 {URL List}의 url 중에서만 선택해서 대답할 수 있어. 너가 적절한 답변을 찾지 못했을 경우에는 경영기획팀으로 문의해 주세요 라고 답변해야해."}, {"role": "user", "content": "안녕하세요"}, {"role": "assistant", "content": "안녕하세요. 이노팩토리 챗봇 이노메이트 입니다! 무엇을 도와드릴까요?"}]}
{"messages": [{"role": "system", "content": "너는 존댓말로 대답하는 회사 행정 Q&A 챗봇 이고 이름은 이노메이트 야. 너는 url이 포함된 응답을 할 때 {URL List}의 url 중에서만 선택해서 대답할 수 있어. 너가 적절한 답변을 찾지 못했을 경우에는 경영기획팀으로 문의해 주세요 라고 답변해야해."}, {"role": "user", "content": "법인 카드로 종이컵 구매 가능한가요?"}, {"role": "assistant", "content": "물품구입, 구매는 지출품의서를 작성해 주세요."}]}
데이터셋 예제 개수 권장 사항 #
모델을 파인 튜닝하려면 최소 10개 이상의 예제를 제공해야 합니다.
일반적으로는 50개에서 100개의 학습 예제를 파인 튜닝하면 분명한 개선을 확인할 수 있지만, 사용 목적에 따라 적절한 예제 개수는 달라질 수 있습니다.
파인 튜닝을 계속 시도하면서 모델의 성능을 확인하고, 예제개수를 조정하는 등의 피드백을 통해 모델 파인 튜닝을 진행하는 것이 바람직합니다.
Fine-tuning 파인 튜닝 작업 생성 #
OpenAI Fine-tuning 페이지에서 + Create
버튼을 눌러 파인튜닝을 진행해 보겠습니다.
버튼을 누르면 “Create a fine-tuned model"이라는 모달이 뜨게 됩니다.
- Base model : 파인 튜닝할 모델 베이스를 선택하는 항목입니다.
- Tranining data : 파인 튜닝을 진행할 데이터셋을 업로드 하고 선택하는 항목입니다.
- Validation data : 파인 튜닝된 후의 모델의 품질 평가에 사용되는 데이터셋 입니다. 파인 튜닝 중에는 영향을 미치지 않기 때문에 본 포스팅의 파인 튜닝 예제에서는 사용하지 않겠습니다.
파인튜닝 모델 선택 및 데이터셋 업로드 #
Base model에서 gpt-3.5-turbo-1106
를 선택하고 데이터셋을 업로드 해보겠습니다.
OpenAI API의 Fine-tuning 에서는 준비된 데이터 셋을 OpenAI 에서 제공하는 개인 파일 공간에 업로드 하는 과정이 포함되어 있습니다. 로컬에 위치한 데이터 셋을 선택하고 Upload and Select
버튼을 누르면
Files 공간으로 파일이 업로드 되며 화면이 다음과 같이 바뀝니다.
업로드된 파일은 Files 공간 에서도 확인할 수 있습니다.
데이터셋 업로드 완료 이후 Create
버튼을 눌러 Fine-tuning 작업을 시작합니다.
Fine-tuning 작업이 완료되면 작업 성공여부와 함께 파인 튜닝된 모델의 고유 ID가 부여됩니다.
Fine-tuning 파인 튜닝 사용 #
Fine-tuning이 성공적으로 완료될 경우 파인 튜닝된 모델의 고유 ID가 부여되게 됩니다. Request 요청 시 model 항목에 해당 고유 ID로 교체하여 요청하면 튜닝완료된 모델을 간단하게 사용할 수 있습니다.
이 외에도 파인 튜닝 API 응용을 통해 미세조정을 더욱 다양하게 수행할 수 있는 방법들이 있습니다. OpenAI API에서는 간편한 웹 UI를 통한 파인 튜닝 기능의 일부를 사용할 수 있게 해 두었지만 OpenAI CLI 또는 SDK 를 사용해 더 전문적인 조정이 가능할 수 있습니다.
자세한 내용은 [Open AI API Docs]( 미세 조정 - OpenAI API)에서 확인할 수 있습니다.
다음 포스팅에서는 이번 포스팅의 예제로 파인튜닝한 데이터를 사용해 회사 전용 행정 챗봇을 만드는 예제를 다뤄보겠습니다.