Contents

Jak używać Scikit-LLM do analizy tekstu z dużymi modelami językowymi?

Scikit-LLM to pakiet Pythona, który pomaga zintegrować duże modele językowe (LLM) z frameworkiem scikit-learn. Pomaga on w realizacji zadań związanych z analizą tekstu. Jeśli jesteś zaznajomiony z scikit-learn, praca z Scikit-LLM będzie łatwiejsza.

Należy przyznać, że Scikit-LLM i scikit-learn służą różnym celom, z których pierwszy jest dostosowany do zadań analizy tekstu, podczas gdy drugi służy jako bardziej wszechstronna biblioteka uczenia maszynowego ogólnego przeznaczenia.

Rozpoczęcie pracy z Scikit-LLM

Aby rozpocząć pracę z Scikit-LLM , należy zainstalować bibliotekę i skonfigurować klucz API. Aby zainstalować bibliotekę, otwórz IDE i utwórz nowe środowisko wirtualne. Pomoże to zapobiec potencjalnym konfliktom wersji biblioteki. Następnie uruchom następujące polecenie w terminalu.

 pip install scikit-llm

Wykonanie tej instrukcji ułatwi instalację Scikit-LLM wraz ze wszystkimi niezbędnymi warunkami wstępnymi.

Aby skonfigurować klucz API dla dostawcy usług Large Language Model (LLM), konieczne jest uzyskanie go od niego. Osoby poszukujące klucza API OpenAI powinny postępować zgodnie z poniższą procedurą:

Przejdź do strony API OpenAI . Następnie kliknij swój profil znajdujący się w prawym górnym rogu okna. Wybierz opcję Wyświetl klucze API . Spowoduje to przejście do strony kluczy API.

/pl/images/introduction-to-langchain-api-key-page.jpeg

Aby uzyskać dostęp do strony kluczy API i utworzyć nowy tajny klucz, wykonaj następujące kroki w wyrafinowany sposób:1. Przejdź do wyznaczonej strony internetowej, na której klucze API są zarządzane w pulpicie nawigacyjnym aplikacji lub panelu sterowania. Może to być dostępne za pośrednictwem menu głównego w sekcji “Ustawienia” lub “Integracje”. 2. Po uzyskaniu dostępu do odpowiedniej strony znajdź sekcję poświęconą zarządzaniu kluczami API. Prawdopodobnie znajduje się ona w pobliżu górnej części strony lub jest wyświetlana jako opcja w menu rozwijanym.3 W tej sekcji poszukaj widocznego przycisku oznaczonego “Utwórz nowy tajny klucz”, który zainicjuje proces generowania nowego klucza API. Alternatywnie, jeśli nie ma takiego przycisku, poszukaj innych monitów lub instrukcji, które mogą poprowadzić Cię w kierunku

/pl/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-api-keys.jpg

Utwórz klucz API, klikając przycisk “Utwórz tajny klucz”, aby wygenerować niezbędne dane uwierzytelniające. Ważne jest, aby następnie bezpiecznie zapisać te informacje, ponieważ Open AI nie zapewnia opcji ich późniejszego odzyskania. W przypadku zgubienia klucza należy wygenerować nowy w jego miejsce.

Dostęp do pełnego kodu źródłowego można uzyskać za pośrednictwem repozytorium GitHub, które zapewnia łatwy dostęp i możliwości udostępniania programistom do współpracy nad projektami i przyczyniania się do rozwoju oprogramowania typu open source.

Po uzyskaniu klucza API należy przejść do preferowanego zintegrowanego środowiska programistycznego (IDE) i włączyć moduł SKLLMConfig do biblioteki Scikit-LLM. Integracja ta umożliwia manipulowanie konfigurowalnymi parametrami odnoszącymi się do wykorzystania ekspansywnych modeli lingwistycznych.

 from skllm.config import SKLLMConfig

Upewnij się, że podałeś swój klucz Open AI API i odpowiednie informacje organizacyjne dla tego kursu, ponieważ jest to warunek wstępny jego pomyślnego ukończenia.

 # 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 unikatowy identyfikator Twojej organizacji. Aby uzyskać identyfikator organizacji, przejdź do strony ustawień OpenAI Organization i skopiuj go. Ustanowiłeś teraz połączenie między Scikit-LLM a dużym modelem językowym.

Scikit-LLM wymaga subskrypcji usługi pay-as-you-go, ponieważ ograniczony limit narzucony przez bezpłatne konto OpenAI, z ograniczeniem do trzech żądań na minutę, nie wystarcza do optymalnej wydajności Scikit-LLM.

Korzystanie z bezpłatnego konta próbnego może spowodować napotkanie błędu porównywalnego z poniższym komunikatem podczas próby wykonania analizy tekstu.

/pl/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-error.jpg

Aby dowiedzieć się więcej o limitach szybkości. Przejdź do strony Limity szybkości OpenAI .

Korzystanie z platformy LLM wykracza poza wyłączne poleganie na Open AI; istnieją alternatywni dostawcy usług LLM, których można rozważyć dla swoich potrzeb.

Importowanie wymaganych bibliotek i ładowanie zbioru danych

Wykorzystanie biblioteki pandas w celu uzyskania dostępu do zbioru danych i jego przetwarzania. Dodatkowo zaimportuj niezbędne klasy z bibliotek 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

Aby rozpocząć, zaimportuj i załaduj zestaw danych, który zamierzasz analizować pod kątem zawartości tekstowej. W tym przykładzie wykorzystamy bazę danych filmów IMDB jako odniesienie; można ją jednak dostosować, aby uwzględnić preferowany zestaw danych.

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

Masz możliwość wykorzystania wszystkich danych w swoim zestawie danych, zamiast ograniczać się tylko do początkowych 100 wierszy.

Następnie przejdziemy do wyodrębnienia kolumn cech i etykiet z naszego zbioru danych, a następnie podzielimy go na zestaw treningowy i testowy do dalszej analizy.

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

Kategoria klasyfikacji obejmuje oznaczenia, które są przeznaczone do przewidywania, co w tym kontekście jest określane terminem “Genre”.

Zero-Shot Text Classification With Scikit-LLM

Duże modele językowe posiadają zdolność zerowej klasyfikacji tekstu, co pociąga za sobą kategoryzację nieoznakowanych danych do predefiniowanych klas bez konieczności wcześniejszego szkolenia na oznakowanych informacjach. Podejście to okazuje się szczególnie korzystne w sytuacjach, które obejmują klasyfikację tekstów do niezdefiniowanych kategorii wykraczających poza te rozważane w fazie rozwoju modelu.

Aby wykonać zadanie klasyfikacji tekstu z zerowym strzałem przy użyciu Scikit-LLM, można użyć klasy ZeroShotGPTClassifier.

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

Wynik jest następujący:

/pl/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-zero-shot-classification.jpg

Raport klasyfikacji oferuje pomiary ilościowe odnoszące się do każdej z etykiet, które model stara się sklasyfikować.

Multi-Label Zero-Shot Text Classification With Scikit-LLM

W niektórych sytuacjach nierzadko zdarza się, że dany fragment tekstu należy do więcej niż jednej kategorii jednocześnie. Konwencjonalne metody klasyfikacji nie są w stanie skutecznie radzić sobie z takimi przypadkami. Jednak dzięki swoim zaawansowanym możliwościom, Scikit-LLM wykazał się wyjątkową biegłością w radzeniu sobie z tymi złożonościami, umożliwiając klasyfikację tekstu z wieloma etykietami. Podejście to polega na dołączaniu wielu etykiet opisowych do pojedynczej próbki tekstu, co ma ogromne znaczenie w dokładnym przechwytywaniu i kategoryzowaniu informacji w różnych dziedzinach.

Wykorzystaj MultiLabelZeroShotGPTClassifier, aby ustalić, która etykieta lub etykiety mają zastosowanie do każdego fragmentu 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)) 

Powyżej ustaliliśmy potencjalne oznaczenia, do których nasz tekst mógłby zostać przypisany jako pretendent.

Wynik jest następujący:

/pl/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-multi-label-classification.jpg

Niniejszy dokument służy do naświetlenia wydajności modelu w różnych etykietach w scenariuszu klasyfikacji wieloetykietowej, oferując cenny wgląd w jego skuteczność w odniesieniu do każdego indywidualnego oznaczenia.

Wektoryzacja tekstu za pomocą Scikit-LLM

Scikit-LLM udostępnia GPTVectorizer, który umożliwia konwersję danych tekstowych do postaci numerycznej zrozumiałej dla algorytmów uczenia maszynowego poprzez wektoryzację tekstu.Ten proces transformacji obejmuje przekształcanie tekstu w wektory o stałym wymiarze przy użyciu modeli GPT.

Jednym z podejść do osiągnięcia tego celu jest wykorzystanie metody Term Frequency-Inverse Document Frequency.

 # 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 wynik:

/pl/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-vector-output.jpg

Powyższe informacje odnoszą się do przekształconej reprezentacji cech początkowych pięciu instancji w zbiorze danych, która jest oznaczona jako wynik wektoryzacji TF-IDF.

Streszczanie tekstu za pomocą Scikit-LLM

Streszczanie tekstu to proces polegający na kompresji pracy pisemnej przy jednoczesnym zachowaniu jej zasadniczej treści. GPTSummarizer, dostępny za pośrednictwem biblioteki Scikit-LLM, wykorzystuje zaawansowane modele językowe oparte na architekturze GPT do tworzenia zwięzłych podsumowań tekstów.

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

Wynik jest następujący:

/pl/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-summarization.jpg

Powyższe służy jako przegląd wyników eksperymentalnych.

Tworzenie aplikacji na bazie LLM

Scikit-LLM oferuje szeroki wachlarz możliwości kompleksowego badania tekstu przy użyciu zaawansowanych modeli językowych. Zrozumienie podstaw technologicznych tych modeli jest niezbędne, ponieważ ułatwia dogłębne zrozumienie ich potężnych możliwości i ograniczeń, które są niezbędne do konstruowania wysokowydajnych rozwiązań programowych opartych na tej najnowocześniejszej innowacji.