Як використовувати Scikit-LLM для аналізу тексту з моделями великих мов

Scikit-LLM — це пакет Python, який допомагає інтегрувати великі мовні моделі (LLM) у структуру scikit-learn. Допомагає у виконанні завдань аналізу тексту. Якщо ви знайомі з scikit-learn, вам буде легше працювати з Scikit-LLM.

Важливо зазначити, що Scikit-LLM не замінює scikit-learn. scikit-learn — це бібліотека машинного навчання загального призначення, але Scikit-LLM розроблено спеціально для завдань аналізу тексту.

Початок роботи зі Scikit-LLM

Для початку Scikit-LLM, вам потрібно буде встановити бібліотеку та налаштувати ключ API. Щоб установити бібліотеку, відкрийте IDE і створіть нове віртуальне середовище. Це допоможе запобігти потенційним конфліктам версій бібліотеки. Потім виконайте наступну команду в терміналі.

 pip install scikit-llm 

Ця команда встановить Scikit-LLM і його необхідні залежності.

Щоб налаштувати ключ API, вам потрібно отримати його у свого постачальника LLM. Щоб отримати ключ API OpenAI, виконайте такі дії:

Перейти до Сторінка OpenAI API. Потім натисніть на свій профіль, розташований у верхньому правому куті вікна. Виберіть Переглянути ключі API. Ви перейдете на сторінку ключів API.

На сторінці ключів API натисніть кнопку Створити новий секретний ключ.

Назвіть свій ключ API та натисніть кнопку «Створити секретний ключ», щоб згенерувати ключ. Після створення вам потрібно скопіювати ключ і зберегти його в безпечному місці, оскільки OpenAI більше не відображатиме ключ. Якщо ви його втратите, вам доведеться створити новий.

Тепер, коли у вас є ключ API, відкрийте IDE та імпортуйте клас SKLLMConfig із бібліотеки Scikit-LLM. Цей клас дозволяє встановлювати параметри конфігурації, пов’язані з використанням великих мовних моделей.

 from skllm.config import SKLLMConfig

Цей клас очікує, що ви налаштуєте свій ключ OpenAI API та деталі організації.

 
SKLLMConfig.set_openai_key("Your API key")
SKLLMConfig.set_openai_org("Your organization ID")

Ідентифікатор організації та назва не збігаються. Ідентифікатор організації – це унікальний ідентифікатор вашої організації. Щоб отримати ідентифікатор організації, перейдіть до Організація OpenAI сторінку налаштувань і скопіюйте її. Тепер ви встановили зв’язок між Scikit-LLM і великою мовною моделлю.

Scikit-LLM вимагає, щоб у вас був план оплати за використання. Це пояснюється тим, що безкоштовний пробний обліковий запис OpenAI має обмеження на швидкість у три запити на хвилину, чого недостатньо для Scikit-LLM.

Спроба використання безкоштовного пробного облікового запису призведе до помилки, подібної до наведеної нижче, під час аналізу тексту.

Щоб дізнатися більше про обмеження ставок. Перейти до Сторінка обмежень швидкості OpenAI.

Провайдер LLM не обмежується лише OpenAI. Ви також можете використовувати інші постачальники LLM.

Імпортування необхідних бібліотек і завантаження набору даних

Імпортуйте панди, які ви використовуватимете для завантаження набору даних. Також із Scikit-LLM і 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

Далі завантажте набір даних, для якого потрібно виконати аналіз тексту. Цей код використовує набір даних фільмів IMDB. Однак ви можете налаштувати його, щоб використовувати свій власний набір даних.

 
data = pd.read_csv("imdb_movies_dataset.csv")
data = data.head(100)

Використання лише перших 100 рядків набору даних не є обов’язковим. Ви можете використовувати весь набір даних.

Далі витягніть елементи та стовпці міток. Потім розділіть свій набір даних на набори для навчання та тестування.

 
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)

Стовпець «Жанр» містить мітки, які потрібно передбачити.

Класифікація тексту Zero-Shot за допомогою Scikit-LLM

Класифікація нульового тексту є функцією, яку пропонують великі мовні моделі. Він класифікує текст за попередньо визначеними категоріями без потреби в явному навчанні позначених даних. Ця можливість дуже корисна під час виконання завдань, де потрібно класифікувати текст за категоріями, які ви не передбачали під час навчання моделі.

Щоб виконати нульову класифікацію тексту за допомогою Scikit-LLM, використовуйте клас 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("Zero-Shot Text Classification Report:")
print(classification_report(y_test, zero_shot_predictions))

Результат виглядає наступним чином:

Звіт про класифікацію містить показники для кожної мітки, яку модель намагається передбачити.

Класифікація тексту з кількома мітками Zero-Shot за допомогою Scikit-LLM

У деяких сценаріях один текст може належати до кількох категорій одночасно. Традиційні моделі класифікації борються з цим. Scikit-LLM, з іншого боку, робить таку класифікацію можливою. Класифікація тексту з декількома мітками має вирішальне значення для призначення кількох описових міток одному зразку тексту.

Використовуйте MultiLabelZeroShotGPTClassifier, щоб передбачити, які мітки підходять для кожного зразка тексту.

 
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)


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(classification_report(y_test_binary, multi_label_zero_shot_predictions_binary))

У наведеному вище коді ви визначаєте мітки-кандидати, до яких може належати ваш текст.

Вихід виглядає як показано нижче:

Цей звіт допоможе вам зрозуміти, наскільки добре ваша модель працює для кожної мітки в класифікації за кількома мітками.

Векторизація тексту за допомогою Scikit-LLM

У векторизації тексту текстові дані перетворюються в числовий формат, який можуть зрозуміти моделі машинного навчання. Scikit-LLM пропонує для цього GPTVectorizer. Він дозволяє перетворювати текст у вектори з фіксованою розмірністю за допомогою моделей GPT.

Ви можете досягти цього за допомогою терміну Частота-Зворотна частота документа.

 
tfidf_vectorizer = TfidfVectorizer(max_features=1000)
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)


print("TF-IDF Vectorized Features (First 5 samples):")
print(X_train_tfidf[:5])

Ось результат:

Результат представляє векторизовані функції TF-IDF для перших 5 зразків у наборі даних.

Резюмування тексту за допомогою Scikit-LLM

Резюмування тексту допомагає стиснути фрагмент тексту, зберігаючи його найважливішу інформацію. Scikit-LLM пропонує GPTSummarizer, який використовує моделі GPT для створення стислого резюме тексту.

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

Результат виглядає наступним чином:

Вище наведено зведення даних тестування.

Створюйте програми на базі LLM

Scikit-LLM відкриває світ можливостей для аналізу тексту за допомогою великих мовних моделей. Розуміння технології, що лежить в основі великих мовних моделей, має вирішальне значення. Це допоможе вам зрозуміти їхні сильні та слабкі сторони, що може допомогти вам створювати ефективні програми на основі цієї передової технології.