Výkonné jazykové modely + Scikit-learn = Scikit-LLM. Provádějte úlohy analýzy textu na cestách s pomocí této knihovny.
Scikit-LLM je balíček Pythonu, který pomáhá integrovat velké jazykové modely (LLM) do rámce scikit-learn. Pomáhá při plnění úkolů analýzy textu. Pokud znáte scikit-learn, bude pro vás snazší pracovat se Scikit-LLM.
Je důležité poznamenat, že Scikit-LLM nenahrazuje scikit-learn. scikit-learn je univerzální knihovna pro strojové učení, ale Scikit-LLM je speciálně navržen pro úlohy analýzy textu.
Začínáme se Scikit-LLM
Chcete-li začít Scikit-LLM, budete muset nainstalovat knihovnu a nakonfigurovat klíč API. Chcete-li nainstalovat knihovnu, otevřete své IDE a vytvořit nové virtuální prostředí. To pomůže zabránit případným konfliktům verzí knihovny. Poté spusťte v terminálu následující příkaz.
pip install scikit-llm
Tento příkaz nainstaluje Scikit-LLM a jeho požadované závislosti.
Chcete-li nakonfigurovat klíč API, musíte jej získat od poskytovatele LLM. Chcete-li získat klíč OpenAI API, postupujte takto:
Pokračujte k Stránka OpenAI API. Poté klikněte na svůj profil umístěný v pravém horním rohu okna. Vybrat Zobrazit klíče API. Tím se dostanete do API klíče strana.
Na API klíče klikněte na stránku Vytvořte nový tajný klíč knoflík.
Pojmenujte svůj API klíč a klikněte na Vytvořte tajný klíč tlačítko pro vygenerování klíče. Po vygenerování musíte klíč zkopírovat a uložit na bezpečné místo, protože OpenAI klíč znovu nezobrazí. Pokud jej ztratíte, budete si muset vygenerovat nový.
Úplný zdrojový kód je k dispozici v a úložiště GitHub.
Nyní, když máte klíč API, otevřete své IDE a importujte Konfigurace SKLLMC třídy z knihovny Scikit-LLM. Tato třída umožňuje nastavit možnosti konfigurace související s používáním velkých jazykových modelů.
from skllm.config import SKLLMConfig
Tato třída očekává, že nastavíte svůj klíč OpenAI API a podrobnosti o organizaci.
# Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
SKLLMConfig.set_openai_org("Your organization ID")
ID organizace a název nejsou stejné. ID organizace je jedinečný identifikátor vaší organizace. Chcete-li získat ID vaší organizace, přejděte na stránku Organizace OpenAI stránku nastavení a zkopírujte ji. Nyní jste vytvořili spojení mezi Scikit-LLM a velkým jazykovým modelem.
Scikit-LLM vyžaduje, abyste měli plán průběžných plateb. Je to proto, že bezplatný zkušební účet OpenAI má limit tří požadavků za minutu, což pro Scikit-LLM nestačí.
Pokus o použití bezplatného zkušebního účtu povede při provádění analýzy textu k chybě podobné té níže.
Chcete-li se dozvědět více o limitech sazeb. Pokračujte k Stránka s limity sazeb OpenAI.
Poskytovatel LLM není omezen pouze na OpenAI. Můžete využít i jiné poskytovatele LLM.
Import požadovaných knihoven a načtení datové sady
Importujte pandy, které použijete k načtení datové sady. Také ze Scikit-LLM a scikit-learn importujte požadované třídy.
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
Dále načtěte datovou sadu, na které chcete provést textovou analýzu. Tento kód používá datovou sadu filmů IMDB. Můžete jej však vyladit tak, aby používal vlastní datovou sadu.
# Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100)
Použití pouze prvních 100 řádků datové sady není povinné. Můžete použít celou svou datovou sadu.
Dále extrahujte prvky a sloupce štítků. Poté rozdělte svou datovou sadu na vlakovou a testovací sadu.
# 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 Žánr sloupec obsahuje štítky, které chcete předpovědět.
Klasifikace textu Zero-Shot pomocí Scikit-LLM
Klasifikace textu s nulovým záběrem je funkce, kterou nabízejí velké jazykové modely. Klasifikuje text do předem definovaných kategorií bez nutnosti explicitního školení na označených datech. Tato schopnost je velmi užitečná při řešení úloh, kdy potřebujete zařadit text do kategorií, se kterými jste při trénování modelu nepočítali.
Chcete-li provést klasifikaci textu s nulovým záběrem pomocí Scikit-LLM, použijte Klasifikátor ZeroShotGPTC třída.
# 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))
Výstup je následující:
Zpráva o klasifikaci poskytuje metriky pro každý štítek, který se model pokouší předpovědět.
Klasifikace textu Multi-Label Zero-Shot pomocí Scikit-LLM
V některých scénářích může jeden text patřit do více kategorií současně. Tradiční klasifikační modely s tím bojují. Scikit-LLM na druhé straně tuto klasifikaci umožňuje. Klasifikace textu s nulovým záběrem s více štítky je zásadní při přiřazování více popisných štítků k jednomu vzorku textu.
Použití MultiLabelZeroShotGPTClassifier předpovědět, které štítky jsou vhodné pro každý vzorek textu.
# 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))
Ve výše uvedeném kódu definujete kandidátní štítky, ke kterým může váš text patřit.
Výstup je následující:
Tento přehled vám pomůže pochopit, jak dobře si váš model vede pro jednotlivé štítky v klasifikaci více štítků.
Vektorizace textu pomocí Scikit-LLM
Při vektorizaci textu jsou textová data převedena do numerického formátu, kterému modely strojového učení rozumí. Scikit-LLM k tomu nabízí GPTVectorizer. Umožňuje vám transformovat text do vektorů s pevnou dimenzí pomocí modelů GPT.
Toho můžete dosáhnout pomocí termínu Frekvence-inverzní frekvence dokumentu.
# 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
Zde je výstup:
Výstup představuje vektorizované vlastnosti TF-IDF pro prvních 5 vzorků v datové sadě.
Shrnutí textu pomocí Scikit-LLM
Sumarizace textu pomáhá při zhuštění části textu při zachování nejdůležitějších informací. Scikit-LLM nabízí GPTSummarizer, který využívá modely GPT vytvářet stručné shrnutí textu.
# Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)
Výstup je následující:
Výše uvedené je shrnutí testovacích dat.
Vytvářejte aplikace nad LLM
Scikit-LLM otevírá svět možností pro analýzu textu s velkými jazykovými modely. Pochopení technologie za velkými jazykovými modely je zásadní. Pomůže vám porozumět jejich silným a slabým stránkám, které vám mohou pomoci při vytváření efektivních aplikací na této špičkové technologii.