Когда дело доходит до классификации текста с небольшими наборами данных, традиционные методы ИИ часто изо всех сил пытаются изучить достаточные шаблоны и не могут хорошо обобщать. Однако мы можем использовать возможности больших языковых моделей (LLM), таких как OpenAI и cohere.ai. Эти модели предварительно обучены на большом количестве текстовых данных, что позволяет им фиксировать сложные языковые шаблоны и контекстную информацию. В этой статье мы рассмотрим потенциал генеративной LLM cohere.ai для классификации текста с использованием небольшого набора данных.

Для нашего эксперимента мы будем работать с набором кликбейтных данных, состоящим из 32 000 заголовков из таких источников, как Wikinews, New York Times, BuzzFeed и других. Эти заголовки помечаются как кликбейтные или не кликбейтные. Чтобы все было интересно, мы будем использовать только часть набора данных: 5 % (1600 записей) для обучения и 50 % (15 174 записи) для оценки. Это сложная задача, если мы сможем точно классифицировать заголовки, используя такой небольшой обучающий набор. Но почему cohere.ai? Что ж, хотя вы часто слышите о моделях OpenAI, я хотел изучить что-то менее распространенное в сообществе ИИ.

Тонкая настройка генеративной модели cohere.ai:

Прежде всего, нам нужно будет произвести необходимые установки и импорт.

!pip install cohere
import pandas as pd
import cohere
import time
from cohere.custom_model_dataset import CsvDataset, InMemoryDataset
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_scor

Чтобы работать с моделями cohere.ai в python, вы должны сначала зарегистрироваться на cohere.ai и получить ключ API.

api_key = 'YOUR_COHEREAI_API_KEY_HERE'
co = cohere.Client(api_key)

Подготовка данных для тонкой настройки:

Чтобы начать обработку данных, мы импортируем и подготовим набор данных, преобразовав столбец "headlines" в подсказки, а столбец "clickbait" — в завершения. Эти пары быстрое завершение будут служить основой для тонкой настройки.

clickbait_df=pd.read_csv("clickbait_data.csv")
clickbait_df=clickbait_df.rename(columns={'headline':'Prompt','clickbait':'Completion'})

В наборе данных значение кликбейта представлено 1, а не кликбейта — 0. Таким образом, числа заменены на «кликбейт» и «не кликбейт» соответственно. . Кроме того, мы добавим четкую подсказку с инструкциями, добавив к каждому заголовку суффикс «\n Является ли приведенное выше утверждение кликбейтом или нет?\n\n###\n\n». "\n\n###\n\n" используется для того, чтобы указать модели, где заканчивается подсказка и начинается текст завершения, когда он будет использоваться позже.

clickbait_df['Completion'].replace({1: ' clickbait\n', 0: ' not clickbait\n'}, inplace=True)
clickbait_df['Prompt']=clickbait_df['Prompt']+'/n is the above statement a clickbait or not?\n\n###\n\n'

Далее мы разделим набор данных на наборы для обучения и проверки. Мы выделим 5% на обучение и 50% на оценку. Учебный набор будет использоваться для точной настройки модели, а проверочный набор будет оценивать ее производительность.

#a function for splitting the dataset by the fraction given as input
def get_dec_percent(x, dec, exclude=None):
    if exclude is not None:
        x = x[~x.index.isin(exclude.index)]
    return x.sample(frac=dec)

df_train = clickbait_df.groupby('Completion').apply(get_dec_percent, 0.05)
df_validation = clickbait_df.groupby('Completion').apply(get_dec_percent, 0.50, exclude=df_train)

Чтобы облегчить процесс тонкой настройки, мы преобразуем обучающие и проверочные наборы в InMemoryDataset, экземпляр, который можно создать из библиотеки cohere.custom_model_dataset. Это позволяет нам напрямую передавать данные в cohere.ai, не сохраняя их. Мы также будем использовать проверочный набор для получения показателей оценки, что даст нам представление о производительности модели при невидимых запросах.

data_list = [tuple(row) for row in df_train.values]
eval_data_list = [tuple(row) for row in df_validation.values]
dataset_with_eval = InMemoryDataset(training_data = data_list, eval_data=eval_data_list)

Точная настройка модели:

Используя функциональность cohere.ai, мы создадим пользовательскую модель с именем "prompt-completion-ft-with-eval" для тонкой настройки. Эта модель использует подготовленный набор данных и мощь генеративной языковой модели cohere.ai. Цель состоит в том, чтобы обучить и оценить модель в задаче классификации кликбейтов, фиксируя нюансы и закономерности, необходимые для точных прогнозов.

finetune_with_eval_ = co.create_custom_model("prompt-completion-ft-with-eval", dataset=dataset_with_eval, model_type="GENERATIVE")

Вы можете перейти на панель управления учетной записью cohere.ai, чтобы проверить, как работает модель после ее тонкой настройки. Процесс тонкой настройки также относительно быстр, учитывая, что по большей части он ожидает в очереди. Этот занял около часа или около того.

Удивительно, как он правильно классифицировал все значения завершения с точностью до 100%.

Оценка эффективности модели:

Мы можем видеть на приборной панели, что он дал отличные оценки, но мы должны проверить, насколько хорошо это на самом деле работает вне процесса тонкой настройки. Итак, мы будем использовать отдельный тестовый набор данных, состоящий из 1% набора данных кликбейта (320 пар приглашение-завершение). Здесь мы загрузим тестовый набор данных и создадим списки для хранения прогнозируемых и фактических меток. Модель будет генерировать завершения для каждой подсказки, и мы сравним их с ожидаемыми завершениями из тестового набора данных. Когда мы смотрим на набор показателей, таких как точность, точность, полнота и оценка F1, мы можем глубже понять, как работает модель, и посмотреть, соответствует ли она нашим стандартам оценки, поскольку мы можем получить более глубокое представление о производительности модели.

df_test = clickbait_df.groupby('Completion').apply(get_dec_percent, 0.01, exclude=pd.concat([df_train, df_validation]))
predicted_labels = []
actual_labels = []
# change the test dataframe into a list of dictionaries
test_list=df_test.to_dict('records')
# Generate text using the fine-tuned model
for item in test_list:
    response = co.generate(
      model="YOUR MODEL ID HERE",
      prompt=item['Prompt'],
      stop_sequences=["\n\n###\n\n"],
      return_likelihoods='NONE')

    generated_completion = response.generations[0].text

    # as 'completion' column contains the expected completion in the test dataset
    expected_completion = item['Completion']

    predicted_labels.append(generated_completion)
    actual_labels.append(expected_completion)
    i=i+1
    print(i)
    time.sleep(25)
# Calculate evaluation metrics
accuracy = accuracy_score(actual_labels, predicted_labels)
precision = precision_score(actual_labels, predicted_labels, average='weighted')
recall = recall_score(actual_labels, predicted_labels, average='weighted')
f1 = f1_score(actual_labels, predicted_labels, average='weighted')

Результаты оценки:

Результаты есть, и они выглядят великолепно! Модель набрала примерно 99,38% по всем показателям оценки, включая точность, достоверность, полноту и оценку F1, что является довольно хорошим показателем! Тот факт, что все оценки имеют одинаковое значение, указывает на то, что производительность модели постоянна по всем показателям. Такой результат обычно возникает, когда данные сбалансированы. В нашем случае тестовые данные имеют одинаковое количество для обеих меток. В целом, оценки свидетельствуют о мощности модели и ее способности справляться с задачами классификации текста даже при ограниченных обучающих данных.

Заключение

В этой статье мы рассмотрели, насколько хорошо генеративная языковая модель cohere.ai работает для классификации текста с небольшим набором данных. Мы стали свидетелями того, как эти LLM могут превзойти традиционные методы искусственного интеллекта, достигая отличных результатов даже при обучении на небольшой части набора данных кликбейтов. Благодаря предварительно обученным знаниям и способности фиксировать сложные языковые шаблоны модель cohere.ai открывает новые возможности для точной классификации текста.

Вот ссылка на github на полный код.

Источники

  1. «Обучение пользовательских моделей». Cohere AI, docs.cohere.com/docs/training-custom-models. По состоянию на 11 августа 2023 г.
  2. Ириондо, Роберто. «Точная настройка с Cohere: часть 4 — раскрытие возможностей пользовательских моделей для создания искусственного интеллекта следующего уровня». Medium, 18 февраля 2023 г., txt.generativeailab.org/fine-tuning-with-cohere-part-4-unlocking-the-power-of-custom-models-for-next-level- ай-поколение-5dc201ceafb5. По состоянию на 11 августа 2023 г.
  3. Жуков, Вячеслав. «Проблема классификации текста с очень малыми наборами данных: тонкая настройка по сравнению с ChatGPT». Medium, 7 июля 2023 г., веб-сайт по направлению datascience.com/text-classification-challenge-with-extra-small-datasets-fine-tuning-versus-chatgpt-6348fecea357. По состоянию на 11 августа 2023 г.
  4. «Создание пользовательских генеративных моделей». Cohere AI, docs.cohere.com/docs/creating-custom-models. По состоянию на 11 августа 2023 г.