Jak dostroić GPT-3 do niestandardowej klasyfikacji intencji

Rozpoznawanie intencji wypowiedzi lub konwersacji użytkowników jest pierwszą linią działania większości chatbotów. Tutaj pokażę ci krok po kroku, jak wykorzystać i dostroić model OpenAI GPT-3 za pomocą swoich danych!

Obecnie jestem Głównym Ewangelistą @ HumanFirst . Odkrywam i piszę o wszystkich rzeczach na styku sztucznej inteligencji i języka; począwszy od LLM, Chatbotów, Voicebotów, Frameworków programistycznych, ukrytych przestrzeni zorientowanych na dane i innych.

Praktycznie wszystkie chatboty mają jako podstawę wykrywanie intencji. Zasadniczo intencje/klasyfikacje są wstępnie definiowane przy użyciu przykładowych danych szkoleniowych, a model jest szkolony, który wykrywa i rozpoznaje intencje/klasyfikacje w czasie rzeczywistym na podstawie danych wprowadzonych przez użytkownika.
Jest to oczywiście użycie LLM w sposób predykcyjny, w przeciwieństwie do bardziej powszechnie znanych scenariuszy generatywnych.
Dostrajanie jest często konieczne w przypadku zastosowań specyficznych dla domeny i zwiększania dokładności dla konkretnej implementacji pod względem żargonu, terminów branżowych, produktów i usług specyficznych dla firmy itp.
Zaczynajmy… to łatwiejsze niż myślisz!
W tym przykładzie wykorzystamy publiczny zbiór e-maili związanych ze sportem, jest to lista mailingowa zawierająca łącznie 1197 przykładów. Te przykłady są podzielone na 597 przykładów z baseballu i 600 przykładów z hokeja.
W tym przykładzie model ada GPT-3 jest dostrojony/wytrenowany jako klasyfikator, aby rozróżnić dwa sporty: baseball i hokej.
Model ady jest częścią oryginalnej, podstawowej serii GPT-3.
Możesz postrzegać te dwa sporty jako dwa podstawowe cele, z których jednym jest „baseball”, a drugim „hokej”.
Total examples: 1197, Baseball examples: 597, Hockey examples: 600

⭐️ Śledź mnie na LinkedIn , aby otrzymywać aktualizacje.
Pobieranie danych
Poniżej znajduje się widok użycia mojego notatnika Colab w tej wersji demonstracyjnej. ⬇️

Zestaw danych grupy dyskusyjnej można załadować za pomocą sklearn. Możesz sprawdzić zestaw danych, jak pokazano poniżej:
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])
Transformacja danych
Za pomocą tego fragmentu kodu dane są przekształcane w ramkę danych pandy.
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()

Za pomocą tego polecenia zestaw danych jest zapisywany jako plik jsonl…⬇️
df.to_json("sport2.jsonl", orient='records', lines=True)
W przypadku scenariusza produkcyjnego wymagane będzie narzędzie projektowe NLU/NLG bez użycia kodu, aby wydajnie pobierać, przetwarzać i konstruować dane projektowe 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

⭐️ Śledź mnie na LinkedIn , aby otrzymywać aktualizacje.
Szkolenie modelu
Poniżej znajduje się wiersz kodu inicjujący proces uczenia… zwróć uwagę na umieszczenie klucza api w poleceniu:
!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

Jeśli strumień zostanie przerwany, możesz go ponownie uruchomić za pomocą tego polecenia:
!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>
Testowanie modelu
Model można przetestować za pomocą poniższego kodu… precyzyjnie dostrojony klasyfikator jest bardzo wszechstronny. I chociaż jest szkolony w zakresie wiadomości e-mail, inne rodzaje danych wejściowych mogą działać dobrze pod względem tweetów, wypowiedzi użytkowników itp.
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

⭐️ Śledź mnie na LinkedIn , aby otrzymywać aktualizacje.
Plac zabaw OpenAI
Jak widać poniżej, dopracowany model jest natychmiast dostępny na placu zabaw OpenAI.

⭐️ Śledź mnie na LinkedIn , aby otrzymywać aktualizacje.
Podsumowując
Dla mnie takie ćwiczenie daje dobry wgląd w wymagania środowiska produkcyjnego.
Brakującym ogniwem w tym całym procesie jest narzędzie do projektowania NLU/NLG, które może być używane do pozyskiwania nieustrukturyzowanych danych i przekształcania tych nieustrukturyzowanych danych w dane projektowe NLU/NLG bez użycia kodu.
Jak widać z przykładów kodu, dane treningowe mają ustalony format, a ręczne przetwarzanie danych treningowych za pomocą czegoś takiego jak Notepad++ lub MS Excel nie jest wykonalnym i trwałym rozwiązaniem.
Studio projektowe NLU/NLG bez użycia kodu, takie jak HumanFirst, uzupełnia ten proces przygotowania danych, strukturyzacji i integracji LLM.

Obecnie jestem Głównym Ewangelistą @ HumanFirst . Odkrywam i piszę o wszystkich rzeczach na styku sztucznej inteligencji i języka; począwszy od LLM , Chatbotów , Voicebotów , Frameworków programistycznych, ukrytych przestrzeni Data-Centric i innych.




