Большие предварительно обученные языковые модели на основе преобразователей (PLM), такие как BERT и GPT, коренным образом изменили область обработки естественного языка (NLP). Существует сдвиг парадигмы, созданный PLM в области НЛП. Традиционные статистические подходы NLP (например, задачи классификации текста) часто разрабатывают созданные вручную функции и применяют модель машинного обучения, такую ​​как логистическая регрессия или машина опорных векторов, для изучения функции классификации на основе этих созданных вручную функций. С другой стороны, подход глубокого обучения изучает представление скрытых признаков через глубокую нейронную сеть в дополнение к функции классификации.

Этот сдвиг парадигмы включает в себя «тонкую настройку», что означает обучение одной большой модели общей фундаментальной задаче предварительного обучения, а затем ее адаптацию к множеству задач на втором этапе. Таким образом, мы можем использовать производительность языковой модели для адаптации к нашей конкретной проблеме.

В идеале мы можем добавить один дополнительный уровень после последнего уровня BERT и переобучить всю сеть всего за несколько эпох с небольшой скоростью обучения (от от 1e-5 до 5e-5) и оптимизатором adam. . В этом коротком рассказе мы попытаемся узнать, как точно настроить базовую модель BERT для наших данных. В демонстрационных целях мы будем использовать набор данных эмоций для НЛП, полученный от Kaggle. Давайте перейдем к коду.

Загрузка и предварительная обработка необработанных данных

Сначала нам нужно загрузить и предварительно обработать наши текстовые данные. Для этого мы загрузим данные, как указано в предыдущем абзаце, и выполним некоторые шаги предварительной обработки текста.

Мы будем использовать весь набор данных, состоящий из наборов для обучения, тестирования и проверки, и объединить их, чтобы сформировать полный набор данных. На этапах предварительной обработки мы удалим ссылки, символы, отличные от ASCII, адреса электронной почты, знаки препинания, подчеркивания и свертывание регистра. После этих шагов мы должны подсчитать максимальную длину данных после выполнения некоторых шагов предварительной обработки. Это число понадобится нам для тонкой настройки модели BERT, и в этом случае мы получили 65 слов как максимальное значение. Также нам нужно закодировать метку и сделать словарь для дальнейших нужд.

Загрузить модель и токенизатор

Следующими шагами будут обучение модели, загрузка данных и токенизация данных с помощью токенизатора BERT. Мы разделим данные в соотношении 70:30 и стратифицируем их, потому что мы работаем с несбалансированным набором данных. После этого мы применяем токенизатор BERT ко всему набору данных с указанной конфигурацией, как в коде. Мы используем максимальную длину, равную 70, так как мы получили 65 как максимальную длину нашего предложения. Обратите внимание, что мы не будем использовать token_type_id, а будем использовать только input_id и внимание_маску.

Примерка модели

После того, как мы выполнили все шаги предварительной обработки, мы готовы подогнать модель. Обратите внимание, что мы используем только input_id и attention_mask для перехода к модели BERT. Поскольку мы имеем дело с 6 классами, мы будем использовать 6 нейронов в выходном слое с его функцией активации softmax. А также мы будем использовать оптимизатор Adam с очень небольшой скоростью обучения, как это предлагается для тонкой настройки и только для 1 эпохи.

Оценка модели

Следующим шагом является оценка нашей отлаженной модели BERT с помощью тестовых данных. Результат довольно хороший, так как мы получили f1-score более 80% во всех классах.

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

Ссылки:

Спасибо за чтение 😄