Scikit-LLM este un instrument Python care simplifică integrarea modelelor lingvistice mari (LLM) în cadrul bibliotecii scikit-learn. Acesta facilitează procesele de analiză a textului. Dacă sunteți familiarizat cu scikit-learn, tranziția către Scikit-LLM va fi una lină și intuitivă.
Este esențial să rețineți că Scikit-LLM nu înlocuiește scikit-learn. În timp ce scikit-learn este o bibliotecă generală de învățare automată, Scikit-LLM este special concepută pentru sarcinile de analiză a textului.
Introducere în Scikit-LLM
Pentru a începe să utilizați Scikit-LLM, trebuie să instalați biblioteca și să configurați cheia API. Pentru a instala biblioteca, porniți IDE-ul și creați un nou mediu virtual. Acest lucru va preveni eventualele conflicte de versiuni. Apoi, rulați următoarea comandă în terminal:
pip install scikit-llm
Această comandă va instala Scikit-LLM împreună cu toate dependențele necesare.
Pentru configurarea cheii API, este necesar să obțineți una de la furnizorul LLM. Pentru a obține cheia API OpenAI, urmați acești pași:
Accesați pagina API OpenAI. Apoi, faceți clic pe profilul dvs. situat în colțul din dreapta sus. Selectați „Vizualizați cheile API”. Veți fi redirecționat către pagina dedicată cheilor API.

Pe pagina cheilor API, dați clic pe butonul „Creați o nouă cheie secretă”.

Denumiți cheia API și dați clic pe „Creați cheia secretă” pentru a o genera. După generare, copiați cheia și păstrați-o într-un loc sigur, deoarece OpenAI nu o va mai afișa. În cazul pierderii, va trebui să generați una nouă.
Acum că dețineți cheia API, deschideți IDE-ul și importați clasa SKLLMConfig din Scikit-LLM. Această clasă vă permite să personalizați setările legate de folosirea modelelor lingvistice mari.
from skllm.config import SKLLMConfig
Clasa solicită specificarea cheii API OpenAI și detaliile organizației.
SKLLMConfig.set_openai_key("Cheia ta API")
SKLLMConfig.set_openai_org("ID-ul organizației tale")
ID-ul organizației diferă de numele acesteia. ID-ul organizației este un identificator unic. Pentru a-l obține, accesați pagina de setări a organizației OpenAI și copiați-l. Acum ați stabilit o conexiune între Scikit-LLM și modelul lingvistic mare.
Scikit-LLM necesită un plan de plată. Aceasta este din cauza limitei de trei solicitări pe minut impusă contului gratuit OpenAI, care nu este suficientă pentru Scikit-LLM.
Încercarea de a folosi contul gratuit va duce la o eroare similară cu cea de mai jos, în timpul analizei textului.

Pentru mai multe informații despre limitele de viteză, consultați pagina dedicată limitelor de viteză OpenAI.
Furnizorul LLM nu se limitează doar la OpenAI. Puteți utiliza și alți furnizori de LLM.
Importul bibliotecilor necesare și încărcarea setului de date
Importați biblioteca pandas pentru a încărca setul de date. De asemenea, importați clasele necesare din Scikit-LLM și scikit-learn.
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
Apoi, încărcați setul de date pentru analiza textului. Acest cod folosește setul de date IMDB pentru filme. Cu toate acestea, puteți modifica codul pentru a utiliza propriul set de date.
data = pd.read_csv("imdb_movies_dataset.csv")
data = data.head(100)
Utilizarea doar a primelor 100 de rânduri ale setului de date este opțională. Puteți folosi întregul set de date.
Apoi, extrageți caracteristicile și etichetați coloanele. Ulterior, împărțiți setul de date în seturi de antrenament și testare.
X = data['Description']y = data['Genre']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Coloana „Gen” conține etichetele pe care doriți să le preziceți.
Clasificare text zero-shot cu Scikit-LLM
Clasificarea textului zero-shot este o funcție oferită de modelele lingvistice mari. Aceasta clasifică textul în categorii predefinite fără a necesita instruire specifică pe date etichetate. Această capacitate este utilă în situațiile în care trebuie să clasificați textul în categorii neanticipate în timpul antrenamentului modelului.
Pentru a efectua clasificarea textului zero-shot folosind Scikit-LLM, utilizați clasa ZeroShotGPTClassifier.
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("Raportul clasificării textului zero-shot:")
print(classification_report(y_test, zero_shot_predictions))
Rezultatul este următorul:

Raportul de clasificare oferă indicatori pentru fiecare etichetă pe care modelul încearcă să o prezică.
Clasificare text zero-shot multi-etichetă cu Scikit-LLM
În anumite scenarii, un singur text poate aparține simultan mai multor categorii. Modelele tradiționale de clasificare întâmpină dificultăți în această privință. Scikit-LLM, în schimb, facilitează această clasificare. Clasificarea textului zero-shot multi-etichetă este esențială în atribuirea mai multor etichete descriptive unui singur eșantion de text.
Utilizați MultiLabelZeroShotGPTClassifier pentru a evalua etichetele adecvate pentru fiecare eșantion de text.
candidate_labels = ["Acțiune", "Comedie", "Dramă", "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)
mlb = MultiLabelBinarizer()
y_test_binary = mlb.fit_transform(y_test)
multi_label_zero_shot_predictions_binary = mlb.transform(multi_label_zero_shot_predictions)
print("Raportul clasificării textului zero-shot multi-etichetă:")
print(classification_report(y_test_binary, multi_label_zero_shot_predictions_binary))
În codul de mai sus, definiți etichetele candidate cărora le-ar putea aparține textul dvs.
Rezultatul este afișat mai jos:

Acest raport vă ajută să evaluați performanța modelului pentru fiecare etichetă în clasificarea multi-etichetă.
Vectorizarea textului cu Scikit-LLM
În vectorizarea textului, datele textuale sunt convertite într-un format numeric inteligibil pentru modelele de învățare automată. Scikit-LLM oferă GPTVectorizer pentru aceasta. Acesta vă permite să transformați textul în vectori cu dimensiuni fixe, folosind modele GPT.
Puteți realiza acest lucru prin utilizarea metodei Frecvența Termenului – Frecvența Documentului Invers.
tfidf_vectorizer = TfidfVectorizer(max_features=1000)
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)
print("Caracteristici vectorizate TF-IDF (primele 5 eșantioane):")
print(X_train_tfidf[:5])
Iată rezultatul:

Rezultatul prezintă caracteristicile vectorizate TF-IDF pentru primele 5 eșantioane din setul de date.
Rezumatul textului cu Scikit-LLM
Rezumarea textului ajută la condensarea unei secțiuni de text, reținând informațiile esențiale. Scikit-LLM oferă GPTSummarizer, care utilizează modelele GPT pentru a genera rezumate concise ale textului.
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)
Rezultatul este următorul:

Acesta este un rezumat al datelor de testare.
Dezvoltarea aplicațiilor bazate pe LLM-uri
Scikit-LLM deschide un univers de posibilități pentru analiza textului cu ajutorul modelelor lingvistice mari. Înțelegerea tehnologiei din spatele acestora este crucială. Aceasta vă va ajuta să înțelegeți avantajele și limitele, permițându-vă să construiți aplicații eficiente folosind această tehnologie de vârf.