Zmogljivi jezikovni modeli + Scikit-learn = Scikit-LLM. S to knjižnico izvajajte naloge analize besedila na poti.

Scikit-LLM je paket Python, ki pomaga integrirati velike jezikovne modele (LLM) v okvir scikit-learn. Pomaga pri izpolnjevanju nalog analize besedila. Če poznate scikit-learn, vam bo lažje delati s Scikit-LLM.

Pomembno je vedeti, da Scikit-LLM ne nadomešča scikit-learn. scikit-learn je knjižnica strojnega učenja za splošne namene, vendar je Scikit-LLM zasnovan posebej za naloge analize besedila.

Kako začeti s Scikit-LLM

Za začetek Scikit-LLM, boste morali namestiti knjižnico in konfigurirati ključ API. Če želite namestiti knjižnico, odprite IDE in ustvarite novo virtualno okolje. To bo pomagalo preprečiti morebitne konflikte različic knjižnice. Nato zaženite naslednji ukaz v terminalu.

pip install scikit-llm 

Ta ukaz bo namestil Scikit-LLM in njegove zahtevane odvisnosti.

Če želite konfigurirati ključ API, ga morate pridobiti od ponudnika LLM. Če želite pridobiti ključ OpenAI API, sledite tem korakom:

instagram viewer

Nadaljujte na Stran OpenAI API. Nato kliknite svoj profil, ki se nahaja v zgornjem desnem kotu okna. Izberite Oglejte si ključe API. To vas bo pripeljalo do API ključi strani.

Na API ključi stran, kliknite na Ustvari nov skrivni ključ gumb.

Poimenujte svoj ključ API in kliknite na Ustvarite skrivni ključ gumb za ustvarjanje ključa. Po ustvarjanju morate kopirati ključ in ga shraniti na varno mesto, saj OpenAI ne bo več prikazal ključa. Če ga izgubite, boste morali ustvariti novega.

Celotna izvorna koda je na voljo v a Repozitorij GitHub.

Zdaj, ko imate ključ API, odprite IDE in uvozite SKLLMConfig razreda iz knjižnice Scikit-LLM. Ta razred vam omogoča nastavitev konfiguracijskih možnosti, povezanih z uporabo velikih jezikovnih modelov.

from skllm.config import SKLLMConfig

Ta razred pričakuje, da nastavite svoj ključ API OpenAI in podrobnosti o organizaciji.

# Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
SKLLMConfig.set_openai_org("Your organization ID")

ID organizacije in ime nista enaka. ID organizacije je edinstven identifikator vaše organizacije. Če želite pridobiti ID vaše organizacije, pojdite na Organizacija OpenAI stran z nastavitvami in jo kopirajte. Zdaj ste vzpostavili povezavo med Scikit-LLM in velikim jezikovnim modelom.

Scikit-LLM zahteva, da imate načrt plačila ob uporabi. To je zato, ker ima brezplačni preskusni račun OpenAI omejitev hitrosti treh zahtev na minuto, kar ne zadostuje za Scikit-LLM.

Poskus uporabe brezplačnega preizkusnega računa bo med izvajanjem analize besedila povzročil napako, podobno spodnji.

Če želite izvedeti več o omejitvah stopnje. Nadaljujte na Stran z omejitvami stopnje OpenAI.

Ponudnik LLM ni omejen le na OpenAI. Uporabite lahko tudi druge ponudnike LLM.

Uvažanje zahtevanih knjižnic in nalaganje nabora podatkov

Uvozite pande, ki jih boste uporabili za nalaganje nabora podatkov. Prav tako iz Scikit-LLM in scikit-learn uvozite zahtevane razrede.

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

Nato naložite nabor podatkov, na katerem želite izvesti analizo besedila. Ta koda uporablja nabor filmov IMDB. Lahko pa ga prilagodite tako, da bo uporabljal svoj nabor podatkov.

# Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100)

Uporaba samo prvih 100 vrstic nabora podatkov ni obvezna. Uporabite lahko celoten nabor podatkov.

Nato izvlecite funkcije in stolpce z oznakami. Nato razdelite svoj nabor podatkov na nabore za usposabljanje in preizkuse.

# 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 Žanr vsebuje oznake, ki jih želite predvideti.

Zero-Shot Klasifikacija besedila s Scikit-LLM

Zero-shot klasifikacija besedila je funkcija, ki jo ponujajo veliki jezikovni modeli. Besedilo razvršča v vnaprej določene kategorije brez potrebe po izrecnem usposabljanju za označene podatke. Ta zmožnost je zelo uporabna pri opravilih, pri katerih morate besedilo razvrstiti v kategorije, ki jih med usposabljanjem modela niste predvideli.

Če želite izvesti zero shot klasifikacijo besedila s Scikit-LLM, uporabite ZeroShotGPTClassifier razred.

# 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))

Rezultat je naslednji:

Poročilo o razvrščanju zagotavlja meritve za vsako oznako, ki jo model poskuša predvideti.

Klasifikacija besedila z več oznakami Zero-Shot s Scikit-LLM

V nekaterih scenarijih lahko posamezno besedilo pripada več kategorijam hkrati. Tradicionalni klasifikacijski modeli se s tem spopadajo. Scikit-LLM na drugi strani omogoča to razvrstitev. Klasifikacija besedila z več oznakami je ključnega pomena pri dodeljevanju več opisnih oznak enemu vzorcu besedila.

Uporaba MultiLabelZeroShotGPTClassifier predvideti, katere oznake so primerne za vsak vzorec besedila.

# 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))

V zgornji kodi določite kandidatne oznake, ki bi jim lahko pripadalo vaše besedilo.

Rezultat je prikazan spodaj:

To poročilo vam pomaga razumeti, kako uspešen je vaš model za vsako oznako v klasifikaciji z več oznakami.

Vektorizacija besedila s Scikit-LLM

Pri vektorizaciji besedila se besedilni podatki pretvorijo v numerično obliko, ki jo modeli strojnega učenja lahko razumejo. Scikit-LLM za to ponuja GPTVectorizer. Omogoča pretvorbo besedila v vektorje s fiksno dimenzijo z uporabo modelov GPT.

To lahko dosežete z uporabo izrazne frekvence in obratne frekvence dokumenta.

# 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

Tukaj je rezultat:

Izhod predstavlja vektorizirane značilnosti TF-IDF za prvih 5 vzorcev v naboru podatkov.

Povzemanje besedila s Scikit-LLM

Povzemanje besedila pomaga zgostiti del besedila, hkrati pa ohraniti njegove najpomembnejše informacije. Scikit-LLM ponuja GPTSummarizer, ki uporablja modeli GPT za ustvarjanje jedrnatih povzetkov besedila.

# Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)

Rezultat je naslednji:

Zgoraj je povzetek testnih podatkov.

Gradite aplikacije na vrhu LLM

Scikit-LLM odpira svet možnosti za analizo besedila z velikimi jezikovnimi modeli. Razumevanje tehnologije, ki stoji za velikimi jezikovnimi modeli, je ključnega pomena. Pomagal vam bo razumeti njihove prednosti in slabosti, kar vam lahko pomaga pri gradnji učinkovitih aplikacij na vrhu te vrhunske tehnologije.