사용자 지정 의도 분류를 위해 GPT-3를 미세 조정하는 방법

사용자 발화 또는 대화의 의도 인식은 대부분의 모든 챗봇의 최전선입니다. 여기서는 데이터로 OpenAI GPT-3 모델을 활용하고 미세 조정하는 방법을 단계별로 보여줍니다!

저는 현재 수석 전도사 @ HumanFirst 입니다 . 나는 AI와 언어의 교차점에서 모든 것을 탐구하고 씁니다. LLM, 챗봇, 보이스봇, 개발 프레임워크, 데이터 중심 잠재 공간 등에 이르기까지 다양합니다.

사실상 모든 챗봇은 기반 의도 탐지 기능을 가지고 있습니다. 본질적으로 의도/분류는 예제 교육 데이터를 사용하여 미리 정의되며 사용자 입력에서 실시간으로 의도/분류를 감지하고 인식하는 모델이 교육됩니다.
이것은 더 일반적으로 알려진 생성 시나리오와 달리 예측 방식으로 LLM을 분명히 사용하고 있습니다.
전문 용어, 산업별 용어, 회사별 제품 및 서비스 등의 측면에서 도메인별 사용 사례 및 특정 구현에 대한 정확도를 높이려면 미세 조정이 종종 필요합니다.
시작합시다... 생각보다 쉽습니다!
이 예에서는 총 1,197개의 예가 있는 이메일 메일링 리스트인 스포츠 관련 이메일의 공개 데이터 세트를 사용합니다. 이 예제는 597개의 야구 예제와 600개의 하키 예제로 나뉩니다.
이 예에서 GPT-3 ada 모델은 야구와 하키의 두 스포츠를 구별하기 위해 분류기로 미세 조정/훈련되었습니다.
ADA 모델은 원래 기본 GPT-3 시리즈의 일부를 구성합니다.
이 두 가지 스포츠를 두 가지 기본 의도로 볼 수 있습니다. 하나는 "야구"이고 다른 하나는 "하키"입니다.
Total examples: 1197, Baseball examples: 597, Hockey examples: 600

⭐️ 업데이트를 보려면 LinkedIn 에서 저를 팔로우하세요 .
데이터 얻기
아래는 이 데모에 대한 Colab 노트북 사용 보기입니다 . ⬇️

뉴스 그룹 데이터 세트는 sklearn을 사용하여 로드할 수 있습니다. 아래와 같이 데이터 세트를 검사할 수 있습니다.
from sklearn.datasets import fetch_20newsgroups
import pandas as pd
import openai
categories = ['rec.sport.baseball', 'rec.sport.hockey']
sports_dataset = fetch_20newsgroups(subset='train', shuffle=True, random_state=42, categories=categories)
print(sports_dataset['data'][10])
데이터 변환
이 코드 조각을 사용하면 데이터가 pandas 데이터 프레임으로 변환됩니다.
import pandas as pd
labels = [sports_dataset.target_names[x].split('.')[-1] for x in sports_dataset['target']]
texts = [text.strip() for text in sports_dataset['data']]
df = pd.DataFrame(zip(texts, labels), columns = ['prompt','completion']) #[:300]
df.head()

이 명령을 사용하면 데이터 세트가 jsonl 파일로 저장됩니다…⬇️
df.to_json("sport2.jsonl", orient='records', lines=True)
프로덕션 시나리오의 경우 NLU/NLG 디자인 데이터를 효율적으로 수집, 처리 및 구조화하려면 코드 없는 NLU/NLG 디자인 도구가 필요합니다.
{"prompt":"he MLB team with the most Hall of Famers is the New York Yankees with 27.",
"completion":"Baseball"}
{"prompt":"The first organized indoor game was played in Montreal in 1875.",
"completion":"Hockey"}
!pip install --upgrade openai
!openai tools fine_tunes.prepare_data -f sport2.jsonl -q

⭐️ 업데이트를 보려면 LinkedIn 에서 저를 팔로우하세요 .
모델 교육
아래는 교육 프로세스를 시작하는 코드 줄입니다. 명령 내 api-key의 배치에 주목하십시오.
!openai --api-key 'xxxxxxxxxxxxxxxxxxxxxxxx' api fine_tunes.create -t "sport2_prepared_train.jsonl" -v "sport2_prepared_valid.jsonl" --compute_classification_metrics --classification_positive_class " baseball" -m ada

스트림이 중단되면 다음 명령으로 다시 시작할 수 있습니다.
!openai --api-key 'xxxxxxxxxxxxxxxxxxxxxxxx' api fine_tunes.follow -i ft-KGbV68gqwGwmfEqnVMMM13FU
[2023-01-06 08:53:57] Created fine-tune: ft-KGbV68gqwGwmfEqnVMMM13FU
[2023-01-06 08:54:54] Fine-tune costs $0.78
[2023-01-06 08:54:54] Fine-tune enqueued. Queue number: 1
[2023-01-06 09:11:24] Fine-tune is in the queue. Queue number: 0
[2023-01-06 09:12:00] Fine-tune started
[2023-01-06 09:14:37] Completed epoch 1/4
[2023-01-06 09:17:11] Completed epoch 2/4
[2023-01-06 09:19:42] Completed epoch 3/4
[2023-01-06 09:22:14] Completed epoch 4/4
[2023-01-06 09:22:46] Uploaded model: ada:ft-personal-2023-01-06-09-22-45
[2023-01-06 09:22:47] Uploaded result file: file-kX8n4tm6DU7s5AFImIxChUAR
[2023-01-06 09:22:47] Fine-tune succeeded
Job complete! Status: succeeded
Try out your fine-tuned model:
openai api completions.create -m ada:ft-personal-2023-01-06-09-22-45 -p <YOUR_PROMPT>
모델 테스트
모델은 아래 코드로 테스트할 수 있습니다. 미세 조정된 분류기는 매우 다양합니다. 그리고 이메일에 대해 교육을 받았지만 트윗, 사용자 발화 등의 측면에서 다른 유형의 입력이 잘 작동할 수 있습니다.
ft_model = 'ada:ft-personal-2023-01-06-09-22-45'
sample_baseball_tweet="""BREAKING: The Tampa Bay Rays are finalizing a deal to acquire slugger Nelson Cruz from the Minnesota Twins, sources tell ESPN."""
res = openai.Completion.create(model=ft_model, prompt=sample_baseball_tweet + '\n\n###\n\n', max_tokens=1, temperature=0, logprobs=2)
res['choices'][0]['text']
baseball
ft_model = 'ada:ft-personal-2023-01-06-09-22-45'
sample_baseball_tweet="""The ice is not well maintained so that is something the Caps will have to attend to."""
res = openai.Completion.create(model=ft_model, prompt=sample_baseball_tweet + '\n\n###\n\n', max_tokens=1, temperature=0, logprobs=2)
res['choices'][0]['text']
hockey

⭐️ 업데이트를 보려면 LinkedIn 에서 저를 팔로우하세요 .
OpenAI 놀이터
아래에서 볼 수 있듯이 미세 조정된 모델은 OpenAI 플레이그라운드 내에서 즉시 사용할 수 있습니다.

⭐️ 업데이트를 보려면 LinkedIn 에서 저를 팔로우하세요 .
결론적으로
저에게는 이와 같은 연습을 통해 프로덕션 환경이 요구하는 사항에 대한 좋은 통찰력을 얻을 수 있습니다.
이 전체 프로세스에서 누락된 링크는 비정형 데이터를 수집하고 이 비정형 데이터를 코드 없는 방식으로 NLU/NLG 설계 데이터로 변환하는 데 사용할 수 있는 NLU/NLG 설계 도구입니다.
코드 예제에서 볼 수 있듯이 교육 데이터는 고정된 형식을 가지며 Notepad++ 또는 MS Excel과 같은 것을 통해 수동으로 교육 데이터를 처리하는 것은 실행 가능하고 지속 가능한 솔루션이 아닙니다.
HumanFirst와 같은 노코드 NLU/NLG 디자인 스튜디오는 이 데이터 준비, 구조화 큐레이션 및 LLM 통합 프로세스를 완료합니다.

저는 현재 수석 전도사 @ HumanFirst 입니다 . 나는 AI와 언어의 교차점에서 모든 것을 탐구하고 씁니다. LLM , 챗봇 , 보이스봇 , 개발 프레임워크, 데이터 중심 잠재 공간 등에 이르기까지 다양 합니다 .




