Узнайте, как реализовать и обучить модели преобразования классификации текста, такие как BERT, DistilBERT и другие, с помощью всего нескольких строк кода
Классификация текстов, несомненно, является наиболее распространенным применением НЛП. И, как и в большинстве приложений НЛП, в последние годы преобладают модели трансформаторов. В этой статье мы обсудим, как реализовать и обучить модели трансформатора классификации текста с помощью всего нескольких строк кода с использованием пакета Python, который я являюсь ведущим разработчиком, под названием Happy Transformer. Happy Transformer построен на основе библиотеки трансформаторов Hugging Face и позволяет программистам реализовывать и обучать модели Transformer с помощью всего нескольких строк кода.
Предварительно обученные модели
Есть сотни предварительно обученных моделей классификации текста, которые вы можете выбрать в Сети распространения моделей Hugging Face. Итак, я предлагаю, прежде чем вы будете тратить слишком много времени на обучение модели, - посмотрите, не настроил ли кто-нибудь модель для вашего конкретного приложения. Например, я уже подготовил контент о том, как реализовать предварительно обученные модели Transformer для анализа настроений и обнаружения языка ненависти. В этом уроке мы реализуем модель под названием finbert, которая была создана компанией под названием Prosus. Эта модель определяет тональность финансовых данных.
Установка
Happy Transformer доступен на PyPI, поэтому мы можем установить его с помощью 1 строчки кода.
pip install happytransformer
Создание
Давайте импортируем класс HappyTextClassification, который мы будем использовать для загрузки модели.
from happytransformer import HappyTextClassification
Отсюда мы можем создать экземпляр объекта для модели с помощью класса HappyTextClassification. Первый аргумент позиции указывает тип модели и вводится заглавными буквами. Например, BERT, ROBERTA и ALBERT - все допустимые названия моделей. Второй аргумент позиции указывает название модели, которое можно найти на веб-странице модели. Последний параметр - это num_labels, который указывает количество классов в модели. В этом случае модель имеет три метки: положительный, нейтральный и отрицательный.
Важно: не забудьте установить num_labels при создании экземпляра модели. В противном случае может возникнуть ошибка.
happy_tc = HappyTextClassification("BERT", "ProsusAI/finbert", num_labels=3)
использование
Мы можем «начать классификацию текста всего с одной строчки кода с помощью метода classify_text».
result = happy_tc.classify_text("Tesla's stock just increased by 20%")
Напечатаем результат, чтобы мы могли его немного лучше понять.
print(result)
Вывод: TextClassificationResult (label = ’positive’, score = 0,929110586643219)
Как видите, выходными данными является класс данных с двумя переменными: «метка» и «оценка». Метка - это строка, указывающая, к какому классу были отнесены входные данные. Переменная «score» определяет вероятность, которую модель присвоила ответу в виде числа с плавающей запятой. Мы не можем изолировать эти две переменные.
print(result.label)
print(result.score)
Результат:
положительный
0.929110586643219
Вот еще один пример, показывающий выход для отрицательного входа.
result = happy_tc.classify_text("The price of gold just dropped by 5%")
print(result.label)
print(result.score)
Вывод:
минус
0.8852565288543701
Тренинг - Анализ настроений НЛП
А теперь поговорим о тренировках. Мы обучим модель определять тональность текста, относящуюся к НЛП. Мы будем использовать только два примера для обучения, которых, конечно, недостаточно для надежного обучения модели. Но это просто для демонстрации.
Мы должны создать файл CSV с двумя столбцами: текст и метка. Текстовый столбец содержит текст, который мы хотим классифицировать. Столбец метки содержит тип метки в виде целого числа, которое больше или равно 0. Ниже приведена таблица с примером обучающего CSV.
Вот код для создания CSV-файла выше:
import csv
cases= [("Wow I love using BERT for text classification", 0), ("I hate NLP", 1)]
with open("train.csv", 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["text", "label"])
for case in cases:
writer.writerow([case[0], case[1]])
Во-первых, мы установим простую версию DistilBERT, чтобы использовать ее в качестве отправной точки. Вы можете использовать и другие модели, такие как BERT, ALBERT, RoBERTa и другие. Посетите Сеть распространения моделей Hugging Face для получения дополнительных моделей.
happy_tc = HappyTextClassification(model_type="DISTILBERT", model_name="distilbert-base-uncased", num_labels=2)
Затем мы можем просто вызвать метод train, используя наш новый экземпляр класса.
happy_tc.train("train.csv")
Вот и все! Мы только что обучили модель. Теперь мы можем возобновить его использование, как в предыдущем разделе. Так, например, теперь вы можете вызвать «happy_tc.classify_text ()», как и раньше, и будет использоваться только что настроенная модель.
Пользовательские параметры
Мы можем легко изменить параметры обучения, такие как количество эпох, скорость обучения и многое другое, используя класс под названием «TCTrainArgs». Давайте импортируем TCTrainArgs.
from happytransformer import TCTrainArgs
Теперь мы можем создать объект, используя класс TCTrainArgs, который будет содержать обучающие аргументы. Список параметров вы можете изменить здесь. Увеличим количество эпох обучения по умолчанию с 3 до 5.
args = TCTrainArgs(num_train_epochs=5)
Давайте вызовем метод train happy_tc, как и раньше, но на этот раз передадим наш объект args в параметр args метода.
happy_tc.train("train.csv", args=args)
Итак, мы только что изменили параметры обучения!
Оценка
Объекты HappyTextGeneration имеют встроенный метод, который позволяет быстро оценить вашу модель. Сначала отформатируйте данные так, как описано для обучения, а затем вызовите метод «.eval ()». Для простоты воспользуемся обучающим файлом для оценки.
result = happy_tc.eval("train.csv")
print(result)
Результат: EvalResult (потеря = 0,2848379611968994)
Затем мы можем изолировать переменную потерь следующим образом:
print(result.loss)
Выход: 0,2848379611968994
Я предлагаю вам использовать часть ваших общих данных для обучения и другую часть для оценки. Затем оцените свою модель до и после обучения. Если потери уменьшаются, значит, ваша модель усвоила. Вы также можете создать третий раздел своих данных для проведения экспериментов, чтобы найти оптимальные параметры обучения, но об этом мы поговорим в другой раз.
Заключение
Вот и все! Вы только что узнали, как реализовать и обучить модели Transformer классификации текста. Поразительно, сколько всего можно сделать с помощью всего нескольких строк с помощью Happy Transformer.
Связанная статья
Вот статья по теме, которую я недавно опубликовал в журнале Towards Data Science. В нем рассказывается, как использовать модель классификации текста с нулевым выстрелом для маркировки данных обучения. Таким образом, вы можете настроить небольшую контролируемую модель без каких-либо помеченных данных.
Код из этой статьи:
Https://colab.research.google.com/drive/1Jq3o8whsgEL994noS14qyv98jt5We-pU?usp=sharing
Первоначально опубликовано на https://www.vennify.ai 14 июня 2021 г.