Hatékony nyelvi modellek + Scikit-learn = Scikit-LLM. Végezzen szövegelemzési feladatokat útközben ennek a könyvtárnak a segítségével.

A Scikit-LLM egy Python-csomag, amely segít integrálni a nagy nyelvi modelleket (LLM) a scikit-learn keretrendszerbe. Segít a szövegelemzési feladatok elvégzésében. Ha ismeri a scikit-learnt, könnyebb lesz a Scikit-LLM-mel dolgozni.

Fontos megjegyezni, hogy a Scikit-LLM nem helyettesíti a scikit-learnt. A scikit-learn egy általános célú gépi tanulási könyvtár, de a Scikit-LLM kifejezetten szövegelemzési feladatokhoz készült.

A Scikit-LLM használatának megkezdése

A kezdéshez Scikit-LLM, telepítenie kell a könyvtárat, és konfigurálnia kell az API-kulcsot. A könyvtár telepítéséhez nyissa meg az IDE-jét és hozzon létre egy új virtuális környezetet. Ez segít megelőzni a lehetséges könyvtárverziókonfliktusokat. Ezután futtassa a következő parancsot a terminálban.

pip install scikit-llm 

Ez a parancs telepíti a Scikit-LLM-et és a szükséges függőségeit.

Az API-kulcs konfigurálásához be kell szereznie egyet az LLM-szolgáltatótól. Az OpenAI API kulcs beszerzéséhez kövesse az alábbi lépéseket:

Folytassa a OpenAI API oldal. Ezután kattintson az ablak jobb felső sarkában található profiljára. Válassza ki API-kulcsok megtekintése. Ez elviszi a API kulcsok oldalon.

A API kulcsok oldalon kattintson a Hozzon létre új titkos kulcsot gomb.

Nevezze el az API-kulcsot, és kattintson a gombra Hozzon létre titkos kulcsot gombot a kulcs létrehozásához. Generálás után le kell másolnia a kulcsot, és biztonságos helyen tárolni, mivel az OpenAI nem jeleníti meg újra a kulcsot. Ha elveszíti, akkor újat kell generálnia.

A teljes forráskód elérhető a GitHub adattár.

Most, hogy megvan az API-kulcs, nyissa meg az IDE-jét, és importálja SKLLMConfig osztály a Scikit-LLM könyvtárból. Ez az osztály lehetővé teszi a nagy nyelvi modellek használatához kapcsolódó konfigurációs beállítások megadását.

from skllm.config import SKLLMConfig

Ez az osztály elvárja, hogy állítsa be az OpenAI API-kulcsot és a szervezeti adatokat.

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

A szervezet azonosítója és a név nem ugyanaz. A szervezetazonosító a szervezet egyedi azonosítója. A szervezeti azonosító beszerzéséhez folytassa a következővel: OpenAI szervezet beállítások oldalt, és másolja ki. Ezzel létrehozta a kapcsolatot a Scikit-LLM és a nagy nyelvi modell között.

A Scikit-LLM felosztó-kirovó tervvel rendelkezik. Ennek az az oka, hogy az ingyenes próbaverziós OpenAI-fiók percenkénti három kérés sebessége nem elegendő a Scikit-LLM számára.

Az ingyenes próbafiók használatának kísérlete az alábbihoz hasonló hibához vezet szövegelemzés közben.

Ha többet szeretne megtudni a sebességkorlátokról. Folytassa a OpenAI díjhatárok oldala.

Az LLM-szolgáltató nem korlátozódik csak az OpenAI-ra. Használhat más LLM szolgáltatókat is.

A szükséges könyvtárak importálása és az adatkészlet betöltése

Importáljon pandákat, amelyeket az adatkészlet betöltéséhez fog használni. Ezenkívül a Scikit-LLM és a scikit-learn programból importálja a szükséges osztályokat.

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

Ezután töltse be azt az adatkészletet, amelyen szövegelemzést szeretne végezni. Ez a kód az IMDB filmek adatkészletét használja. Azonban módosíthatja, hogy saját adatkészletét használja.

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

Az adatkészlet első 100 sorának használata nem kötelező. Használhatja a teljes adatkészletét.

Ezután bontsa ki a jellemzőket és a címkeoszlopokat. Ezután ossza fel az adatkészletet vonat- és tesztkészletekre.

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

A Műfaj oszlop tartalmazza a megjósolni kívánt címkéket.

Zero-Shot szövegosztályozás Scikit-LLM segítségével

A nullapontos szövegbesorolás a nagy nyelvi modellek által kínált szolgáltatás. A szöveget előre definiált kategóriákba sorolja anélkül, hogy a címkézett adatokra lenne szükség. Ez a képesség nagyon hasznos olyan feladatok elvégzésekor, ahol olyan kategóriákba kell besorolni a szöveget, amelyekre a modellképzés során nem számított.

A Scikit-LLM használatával nullapontos szövegosztályozás végrehajtásához használja a ZeroShotGPTClassifier osztály.

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

A kimenet a következő:

Az osztályozási jelentés mutatókat tartalmaz minden egyes címkéhez, amelyet a modell megjósolni próbál.

Multi-Label Zero-Shot szövegosztályozás Scikit-LLM segítségével

Egyes esetekben egyetlen szöveg egyszerre több kategóriába is tartozhat. A hagyományos osztályozási modellek ezzel küzdenek. A Scikit-LLM viszont lehetővé teszi ezt az osztályozást. A többcímkés, nulla felvételű szövegbesorolás kulcsfontosságú abban, hogy több leíró címkét rendeljünk egyetlen szövegmintához.

Használat MultiLabelZeroShotGPTClassifier megjósolni, hogy mely címkék megfelelőek az egyes szövegmintákhoz.

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

A fenti kódban meghatározhatja azokat a jelölt címkéket, amelyekhez a szöveg tartozhat.

A kimenet a következő:

Ez a jelentés segít megérteni, hogy a modell milyen jól teljesít az egyes címkék esetében a többcímkés osztályozásban.

Szöveg vektorizálása Scikit-LLM-mel

A szövegvektorizálás során a szöveges adatokat a gépi tanulási modellek által megérthető numerikus formátumba konvertálják. A Scikit-LLM ehhez kínálja a GPTVectorit. Lehetővé teszi, hogy szöveget fix dimenziós vektorokká alakítson át GPT-modellek segítségével.

Ezt a Frekvencia-Inverz dokumentumgyakoriság kifejezés használatával érheti el.

# 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

Íme a kimenet:

A kimenet az adatkészlet első 5 mintájának TF-IDF vektorizált jellemzőit képviseli.

Szövegösszegzés Scikit-LLM-mel

A szövegösszegzés segít egy szövegrész tömörítésében, miközben megőrzi a legkritikusabb információkat. A Scikit-LLM a GPTSummarizer-t kínálja, amely a a GPT modellek hogy tömör összefoglalókat készítsen a szövegről.

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

A kimenet a következő:

A fenti a tesztadatok összefoglalása.

Építsen alkalmazásokat LLM-ekre

A Scikit-LLM lehetőségek világát nyitja meg a szövegelemzésben nagy nyelvi modellekkel. Kulcsfontosságú a nagy nyelvi modellek mögött rejlő technológia megértése. Segít megérteni erősségeiket és gyengeségeiket, amelyek segíthetnek hatékony alkalmazások létrehozásában ezen a csúcstechnológián felül.