Мощные языковые модели + Scikit-learn = 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, выполните следующие действия:

Перейдите к Страница API OpenAI. Затем нажмите на свой профиль, расположенный в правом верхнем углу окна. Выбирать Посмотреть ключи API. Это приведет вас к Ключи API страница.

На Ключи API странице, нажмите на Создать новый секретный ключ кнопка.

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

Полный исходный код доступен в Репозиторий GitHub.

Теперь, когда у вас есть ключ API, откройте свою IDE и импортируйте СКЛЛМКонфиг класс из библиотеки Scikit-LLM. Этот класс позволяет вам устанавливать параметры конфигурации, связанные с использованием больших языковых моделей.

from skllm.config import SKLLMConfig

В этом классе ожидается, что вы установите ключ API OpenAI и сведения об организации.

# Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
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. Однако вы можете настроить его, чтобы использовать свой собственный набор данных.

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

Использование только первых 100 строк набора данных не является обязательным. Вы можете использовать весь свой набор данных.

Затем извлеките объекты и маркируйте столбцы. Затем разделите набор данных на обучающие и тестовые наборы.

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

Жанр Столбец содержит метки, которые вы хотите предсказать.

Классификация текста с нулевым выстрелом с помощью Scikit-LLM

Классификация текста с нулевым выстрелом — это функция, предлагаемая большими языковыми моделями. Он классифицирует текст по предопределенным категориям без необходимости явного обучения помеченным данным. Эта возможность очень полезна при решении задач, в которых вам необходимо классифицировать текст по категориям, которые вы не ожидали во время обучения модели.

Чтобы выполнить нулевую классификацию текста с помощью Scikit-LLM, используйте команду Классификатор ZeroShotGPT сорт.

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

Вывод следующий:

Отчет о классификации предоставляет метрики для каждой метки, которую пытается предсказать модель.

Классификация текста с нулевым выстрелом по нескольким меткам с помощью Scikit-LLM

В некоторых сценариях один текст может одновременно относиться к нескольким категориям. Традиционные модели классификации с этим сталкиваются. С другой стороны, Scikit-LLM делает эту классификацию возможной. Классификация текста с нулевым фрагментом по нескольким меткам имеет решающее значение для присвоения нескольких описательных меток одному образцу текста.

Использовать Классификатор MultiLabelZeroShotGPT чтобы предсказать, какие метки подходят для каждого образца текста.

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

В приведенном выше коде вы определяете возможные метки, которым может принадлежать ваш текст.

Результат такой, как показано ниже:

Этот отчет поможет вам понять, насколько хорошо ваша модель работает для каждой метки в классификации с несколькими метками.

Векторизация текста с помощью Scikit-LLM

При векторизации текста текстовые данные преобразуются в числовой формат, понятный моделям машинного обучения. Для этого Scikit-LLM предлагает GPTVectorizer. Он позволяет преобразовывать текст в векторы фиксированного размера с использованием моделей GPT.

Этого можно добиться, используя термин «Частота, обратная частоте документа».

# 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

Вот результат:

Выходные данные представляют собой векторизованные функции TF-IDF для первых 5 выборок в наборе данных.

Обобщение текста с помощью Scikit-LLM

Обобщение текста помогает сократить фрагмент текста, сохраняя при этом наиболее важную информацию. Scikit-LLM предлагает GPTSummarizer, который использует модели GPT создавать краткие изложения текста.

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

Вывод следующий:

Выше приведены краткие данные испытаний.

Создавайте приложения на основе LLM

Scikit-LLM открывает мир возможностей для анализа текста с помощью больших языковых моделей. Понимание технологии, лежащей в основе больших языковых моделей, имеет решающее значение. Это поможет вам понять их сильные и слабые стороны, что поможет вам создавать эффективные приложения на основе этой передовой технологии.