Potężne modele językowe + Scikit-learn = Scikit-LLM. Dzięki tej bibliotece możesz wykonywać zadania związane z analizą tekstu w dowolnym miejscu.
Scikit-LLM to pakiet Pythona, który pomaga integrować duże modele językowe (LLM) ze strukturą scikit-learn. Pomaga w realizacji zadań związanych z analizą tekstu. Jeśli znasz scikit-learn, łatwiej będzie ci pracować z Scikit-LLM.
Należy zauważyć, że Scikit-LLM nie zastępuje scikit-learn. scikit-learn to uniwersalna biblioteka do uczenia maszynowego, ale Scikit-LLM jest specjalnie zaprojektowana do zadań związanych z analizą tekstu.
Pierwsze kroki z Scikit-LLM
Na początek Scikit-LLM, musisz zainstalować bibliotekę i skonfigurować klucz API. Aby zainstalować bibliotekę, otwórz swoje IDE i stworzyć nowe środowisko wirtualne. Pomoże to zapobiec potencjalnym konfliktom wersji bibliotek. Następnie uruchom następujące polecenie w terminalu.
pip install scikit-llm
To polecenie zainstaluje Scikit-LLM i jego wymagane zależności.
Aby skonfigurować klucz API, musisz go nabyć od swojego dostawcy LLM. Aby uzyskać klucz OpenAI API, wykonaj następujące kroki:
Przejdź do Strona API OpenAI. Następnie kliknij swój profil znajdujący się w prawym górnym rogu okna. Wybierać Wyświetl klucze API. To zabierze Cię do Klucze API strona.
Na Klucze API stronie, kliknij Utwórz nowy tajny klucz przycisk.
Nazwij swój klucz API i kliknij Utwórz tajny klucz przycisk, aby wygenerować klucz. Po wygenerowaniu musisz skopiować klucz i przechowywać go w bezpiecznym miejscu, ponieważ OpenAI nie wyświetli go ponownie. Jeśli go zgubisz, będziesz musiał wygenerować nowy.
Pełny kod źródłowy jest dostępny w formacie a Repozytorium GitHuba.
Teraz, gdy masz już klucz API, otwórz swoje IDE i zaimportuj SKLLMConfig class z biblioteki Scikit-LLM. Klasa ta umożliwia ustawienie opcji konfiguracyjnych związanych z wykorzystaniem dużych modeli językowych.
from skllm.config import SKLLMConfig
Podczas tych zajęć oczekujemy od Ciebie ustawienia klucza API OpenAI i szczegółów organizacji.
# Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
SKLLMConfig.set_openai_org("Your organization ID")
Identyfikator organizacji i nazwa nie są takie same. Identyfikator organizacji to unikalny identyfikator Twojej organizacji. Aby uzyskać identyfikator organizacji, przejdź do Organizacja OpenAI stronę ustawień i skopiuj ją. Ustanowiłeś już połączenie pomiędzy Scikit-LLM i dużym modelem językowym.
Scikit-LLM wymaga posiadania planu płatności zgodnie z rzeczywistym użyciem. Dzieje się tak dlatego, że bezpłatne konto próbne OpenAI ma limit szybkości wynoszący trzy żądania na minutę, co nie jest wystarczające dla Scikit-LLM.
Próba skorzystania z bezpłatnego konta próbnego podczas analizy tekstu spowoduje błąd podobny do poniższego.
Aby dowiedzieć się więcej o limitach stawek. Przejdź do Strona z limitami prędkości OpenAI.
Dostawca LLM nie ogranicza się tylko do OpenAI. Możesz także skorzystać z usług innych dostawców LLM.
Importowanie wymaganych bibliotek i ładowanie zestawu danych
Zaimportuj pandy, których użyjesz do załadowania zestawu danych. Ponadto z Scikit-LLM i scikit-learn zaimportuj wymagane klasy.
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
Następnie załaduj zbiór danych, na którym chcesz przeprowadzić analizę tekstu. Ten kod korzysta ze zbioru danych filmów IMDB. Można go jednak dostosować tak, aby korzystał z własnego zestawu danych.
# Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100)
Użycie tylko pierwszych 100 wierszy zbioru danych nie jest obowiązkowe. Możesz wykorzystać cały swój zbiór danych.
Następnie wyodrębnij elementy i kolumny etykiet. Następnie podziel zbiór danych na zbiory pociągowe i testowe.
# 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 Gatunek muzyczny kolumna zawiera etykiety, które chcesz przewidzieć.
Klasyfikacja tekstu zerowego za pomocą Scikit-LLM
Klasyfikacja tekstu typu zero-shot to funkcja oferowana przez duże modele językowe. Klasyfikuje tekst na predefiniowane kategorie bez potrzeby jawnego szkolenia na oznaczonych danych. Ta funkcja jest bardzo przydatna podczas wykonywania zadań, w których trzeba sklasyfikować tekst na kategorie, których nie przewidziałeś podczas uczenia modelu.
Aby przeprowadzić klasyfikację tekstu zerowego za pomocą Scikit-LLM, użyj metody Klasyfikator ZeroShotGPT klasa.
# 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))
Dane wyjściowe są następujące:
Raport klasyfikacji zawiera metryki dla każdej etykiety, którą model próbuje przewidzieć.
Klasyfikacja tekstu z wieloma etykietami typu Zero-Shot za pomocą Scikit-LLM
W niektórych scenariuszach pojedynczy tekst może należeć do wielu kategorii jednocześnie. Tradycyjne modele klasyfikacji borykają się z tym problemem. Z drugiej strony Scikit-LLM umożliwia taką klasyfikację. Klasyfikacja tekstu z wieloma etykietami ma kluczowe znaczenie przy przypisywaniu wielu etykiet opisowych do pojedynczej próbki tekstu.
Używać Klasyfikator MultiLabelZeroShotGPT aby przewidzieć, które etykiety są odpowiednie dla każdej próbki tekstu.
# 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))
W powyższym kodzie definiujesz potencjalne etykiety, do których może należeć Twój tekst.
Dane wyjściowe są takie, jak pokazano poniżej:
Ten raport pomaga zrozumieć, jak dobrze Twój model radzi sobie z każdą etykietą w klasyfikacji z wieloma etykietami.
Wektoryzacja tekstu za pomocą Scikit-LLM
W wektoryzacji tekstu dane tekstowe są konwertowane na format liczbowy zrozumiały dla modeli uczenia maszynowego. Scikit-LLM oferuje do tego GPTVectorizer. Umożliwia przekształcanie tekstu w wektory o stałych wymiarach przy użyciu modeli GPT.
Można to osiągnąć za pomocą terminu Częstotliwość-Odwrotna częstotliwość 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
Oto dane wyjściowe:
Dane wyjściowe reprezentują wektoryzowane cechy TF-IDF dla pierwszych 5 próbek w zestawie danych.
Podsumowanie tekstu w Scikit-LLM
Podsumowanie tekstu pomaga skondensować fragment tekstu, zachowując jednocześnie jego najważniejsze informacje. Scikit-LLM oferuje GPTSummarizer, który wykorzystuje modele GPT do generowania zwięzłych streszczeń tekstu.
# Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)
Dane wyjściowe są następujące:
Powyżej znajduje się podsumowanie danych testowych.
Twórz aplikacje na bazie LLM
Scikit-LLM otwiera świat możliwości analizy tekstu za pomocą dużych modeli językowych. Zrozumienie technologii stojącej za dużymi modelami językowymi ma kluczowe znaczenie. Pomoże Ci zrozumieć ich mocne i słabe strony, co może pomóc w tworzeniu wydajnych aplikacji w oparciu o tę najnowocześniejszą technologię.