Большие предварительно обученные языковые модели на основе преобразователей (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% во всех классах.
Помните, что мы можем «играть» с гиперпараметрами, чтобы получить лучшие результаты для нашей конкретной задачи.
Ссылки:
- https://arxiv.org/abs/2111.01243
- https://www.kaggle.com/datasets/praveengovi/emotions-dataset-for-nlp
- https://huggingface.co/docs/transformers/v4.20.1/en/model_doc/bert#transformers.TFBertModel
Спасибо за чтение 😄