Jaudīgi valodu modeļi + Scikit-learn = Scikit-LLM. Veiciet teksta analīzes uzdevumus, atrodoties ceļā, izmantojot šo bibliotēku.
Scikit-LLM ir Python pakotne, kas palīdz integrēt lielus valodu modeļus (LLM) scikit-learn sistēmā. Tas palīdz veikt teksta analīzes uzdevumus. Ja esat iepazinies ar scikit-learn, jums būs vieglāk strādāt ar Scikit-LLM.
Ir svarīgi atzīmēt, ka Scikit-LLM neaizstāj scikit-learn. scikit-learn ir vispārējas nozīmes mašīnmācīšanās bibliotēka, bet Scikit-LLM ir īpaši izstrādāta teksta analīzes uzdevumiem.
Darba sākšana ar Scikit-LLM
Lai sāktu ar Scikit-LLM, jums būs jāinstalē bibliotēka un jākonfigurē API atslēga. Lai instalētu bibliotēku, atveriet savu IDE un izveidot jaunu virtuālo vidi. Tas palīdzēs novērst iespējamos bibliotēkas versiju konfliktus. Pēc tam terminālī palaidiet šādu komandu.
pip install scikit-llm
Šī komanda instalēs Scikit-LLM un tā nepieciešamās atkarības.
Lai konfigurētu API atslēgu, jums tā ir jāiegādājas no sava LLM nodrošinātāja. Lai iegūtu OpenAI API atslēgu, rīkojieties šādi:
Dodieties uz OpenAI API lapa. Pēc tam noklikšķiniet uz sava profila, kas atrodas loga augšējā labajā stūrī. Izvēlieties Skatīt API atslēgas. Tas jūs aizvedīs uz API atslēgas lappuse.
Uz API atslēgas lapā noklikšķiniet uz Izveidojiet jaunu slepeno atslēgu pogu.
Nosauciet savu API atslēgu un noklikšķiniet uz Izveidojiet slepeno atslēgu pogu, lai ģenerētu atslēgu. Pēc ģenerēšanas atslēga ir jākopē un jāuzglabā drošā vietā, jo OpenAI vairs nerādīs atslēgu. Ja to pazaudēsit, jums būs jāģenerē jauns.
Pilns pirmkods ir pieejams a GitHub repozitorijs.
Tagad, kad jums ir API atslēga, atveriet savu IDE un importējiet SKLLMConfig klase no Scikit-LLM bibliotēkas. Šī klase ļauj iestatīt konfigurācijas opcijas, kas saistītas ar lielu valodu modeļu izmantošanu.
from skllm.config import SKLLMConfig
Šajā klasē jums ir jāiestata OpenAI API atslēga un informācija par organizāciju.
# Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
SKLLMConfig.set_openai_org("Your organization ID")
Organizācijas ID un nosaukums nav viens un tas pats. Organizācijas ID ir unikāls jūsu organizācijas identifikators. Lai iegūtu organizācijas ID, pārejiet uz OpenAI organizācija iestatījumu lapu un kopējiet to. Tagad esat izveidojis savienojumu starp Scikit-LLM un lielo valodas modeli.
Scikit-LLM pieprasa, lai jums būtu līdzsvara plāns. Tas ir tāpēc, ka bezmaksas izmēģinājuma OpenAI kontam ir trīs pieprasījumu skaita ierobežojums minūtē, kas Scikit-LLM nav pietiekams.
Mēģinot izmantot bezmaksas izmēģinājuma kontu, teksta analīzes laikā radīsies kļūda, kas līdzīga tālāk norādītajai.
Lai uzzinātu vairāk par tarifu ierobežojumiem. Dodieties uz OpenAI likmes ierobežojumu lapa.
LLM nodrošinātājs neaprobežojas tikai ar OpenAI. Varat izmantot arī citus LLM pakalpojumu sniedzējus.
Nepieciešamo bibliotēku importēšana un datu kopas ielāde
Importējiet pandas, kuras izmantosit datu kopas ielādei. Tāpat no Scikit-LLM un scikit-learn importējiet vajadzīgās klases.
import pandas as pd
from skllm import ZeroShotGPTClassifier, MultiLabelZeroShotGPTClassifier
from skllm.preprocessing import GPTSummarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import MultiLabelBinarizer
Pēc tam ielādējiet datu kopu, kurai vēlaties veikt teksta analīzi. Šis kods izmanto IMDB filmu datu kopu. Tomēr varat to pielāgot, lai izmantotu savu datu kopu.
# Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100)
Tikai pirmo 100 datu kopas rindu izmantošana nav obligāta. Varat izmantot visu savu datu kopu.
Pēc tam izņemiet līdzekļus un etiķešu kolonnas. Pēc tam sadaliet datu kopu vilcienu un testa kopās.
# Extract relevant columns
X = data['Description']
# Assuming 'Genre' contains the labels for classification
y = data['Genre']
# Split the dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
The Žanrs kolonna satur iezīmes, kuras vēlaties paredzēt.
Zero-Shot teksta klasifikācija ar Scikit-LLM
Zero-shot teksta klasifikācija ir funkcija, ko piedāvā lieli valodu modeļi. Tas klasificē tekstu iepriekš noteiktās kategorijās, neprasot precīzas apmācības par marķētiem datiem. Šī iespēja ir ļoti noderīga, veicot uzdevumus, kuros teksts ir jāklasificē kategorijās, kuras neparedzējāt modeļu apmācības laikā.
Lai veiktu nulles teksta klasifikāciju, izmantojot Scikit-LLM, izmantojiet ZeroShotGPTCklasifikators klasē.
# Perform Zero-Shot Text Classification
zero_shot_clf = ZeroShotGPTClassifier(openai_model="gpt-3.5-turbo")
zero_shot_clf.fit(X_train, y_train)
zero_shot_predictions = zero_shot_clf.predict(X_test)
# Print Zero-Shot Text Classification Report
print("Zero-Shot Text Classification Report:")
print(classification_report(y_test, zero_shot_predictions))
Izvade ir šāda:
Klasifikācijas pārskatā ir sniegta metrika katrai etiķetei, kuru modelis mēģina paredzēt.
Multi-Label Zero-Shot teksta klasifikācija ar Scikit-LLM
Dažos gadījumos viens teksts var vienlaikus piederēt vairākām kategorijām. Tradicionālie klasifikācijas modeļi cīnās ar to. No otras puses, Scikit-LLM padara šo klasifikāciju iespējamu. Vairāku etiķešu nulles teksta klasifikācija ir ļoti svarīga, lai vienam teksta paraugam piešķirtu vairākas aprakstošas etiķetes.
Izmantot MultiLabelZeroShotGPTCklasifikators lai paredzētu, kuras etiķetes ir piemērotas katram teksta paraugam.
# Perform Multi-Label Zero-Shot Text Classification
# Make sure to provide a list of candidate labels
candidate_labels = ["Action", "Comedy", "Drama", "Horror", "Sci-Fi"]
multi_label_zero_shot_clf = MultiLabelZeroShotGPTClassifier(max_labels=2)
multi_label_zero_shot_clf.fit(X_train, candidate_labels)
multi_label_zero_shot_predictions = multi_label_zero_shot_clf.predict(X_test)# Convert the labels to binary array format using MultiLabelBinarizer
mlb = MultiLabelBinarizer()
y_test_binary = mlb.fit_transform(y_test)
multi_label_zero_shot_predictions_binary = mlb.transform(multi_label_zero_shot_predictions)
# Print Multi-Label Zero-Shot Text Classification Report
print("Multi-Label Zero-Shot Text Classification Report:")
print(classification_report(y_test_binary, multi_label_zero_shot_predictions_binary))
Iepriekš minētajā kodā jūs definējat kandidātu iezīmes, kurām varētu piederēt jūsu teksts.
Izvade ir tāda, kā parādīts zemāk:
Šis pārskats palīdz saprast, cik labi jūsu modeļa veiktspēja ir katrai etiķetei vairāku iezīmju klasifikācijā.
Teksta vektorizācija ar Scikit-LLM
Teksta vektorizācijā teksta dati tiek pārveidoti ciparu formātā, ko var saprast mašīnmācīšanās modeļi. Šim nolūkam Scikit-LLM piedāvā GPTVectorizer. Tas ļauj pārveidot tekstu fiksētas dimensijas vektoros, izmantojot GPT modeļus.
To var panākt, izmantojot terminu Frekvence-Inverse Document Frequency.
# Perform Text Vectorization using TF-IDF
tfidf_vectorizer = TfidfVectorizer(max_features=1000)
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)
# Print the TF-IDF vectorized features for the first few samples
print("TF-IDF Vectorized Features (First 5 samples):")
print(X_train_tfidf[:5]) # Change to X_test_tfidf if you want to print the test set
Šeit ir izvade:
Izvade atspoguļo TF-IDF vektorizētos līdzekļus pirmajiem 5 datu kopas paraugiem.
Teksta kopsavilkums ar Scikit-LLM
Teksta kopsavilkums palīdz saīsināt teksta daļu, vienlaikus saglabājot tā vissvarīgāko informāciju. Scikit-LLM piedāvā GPTSummarizer, kas izmanto GPT modeļiem lai izveidotu kodolīgus teksta kopsavilkumus.
# Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)
Izvade ir šāda:
Iepriekš minētais ir testa datu kopsavilkums.
Veidojiet lietojumprogrammas, izmantojot LLM
Scikit-LLM paver iespēju pasauli teksta analīzei ar lieliem valodu modeļiem. Izpratne par tehnoloģiju, kas slēpjas lielo valodu modeļu pamatā, ir ļoti svarīga. Tas palīdzēs jums izprast to stiprās un vājās puses, kas var palīdzēt jums izveidot efektīvas lietojumprogrammas, papildinot šo progresīvo tehnoloģiju.