BERT (Bidirectional Encoder Representations from Transformers) — это одна из ключевых моделей обработки естественного языка (NLP), построенная на архитектуре трансформера.
Эксперт: Мария Жарова
Data Scientist на Wildberries
Архитектура модели BERT и принцип ее работы
Модель BERT основана на трансформере — нейросетевой архитектуре, которая использует механизм внимания для анализа и понимания текста.
Как работает внимание?
Механизм внимания в контексте NLP позволяет модели сосредоточиться при обработке на наиболее значимых частях текста, чтобы лучше понять его смысл.
Механизм внимания использует три компонента:
-
Запросы (Queries, Q) — эмбеддинги текущего слова, которые определяют, на что нужно обратить внимание. Запросы сопоставляются с ключами для выбора подходящих вариантов.
Аналогия: книга, которую человек ищет в библиотеке (например, определенного жанра или автора).
-
Ключи (Keys, K) — эмбеддинги всех слов в тексте, которые описывают их свойства, чтобы сопоставить с запросами.
Аналогия: характеристики книги (название, жанр, автор). Они помогают понять, насколько книга соответствует запросу.
-
Значения (Values, V) — эмбеддинги, которые содержат информацию о словах, важных для текущего запроса. Когда ключи совпадают с запросами, значения используются для формирования контекста и ответа.
Аналогия: содержание издания, которое человек получает после выбора подходящей книги по запросу.
Эмбеддинг (или векторное представление) — это результат преобразования данных (слов) в числовой вектор, который описывает их в многомерном пространстве.
Этот вектор отражает смысл слова и его связь с другими словами. Например, слова «клубника» и «малина» будут иметь схожие векторные представления, потому что часто встречаются в схожих контекстах.
Как модель вычисляет внимание
Модель измеряет, насколько запросы (Queries) схожи с ключами (Keys), через скалярное произведение. Результаты нормализуются (softmax), чтобы определить вес каждого слова.
В трансформерах используется многоголовое внимание (multi-head attention), где внимание рассчитывается несколько раз (параллельно) с разными параметрами.
То есть вместо того чтобы один раз определить, какие слова важны для текущего предложения, модель делает это несколько раз параллельно, с разных сторон (точек зрения). Каждая из этих точек зрения называется головой. Одна голова может искать грамматические связи, другая — семантические и т. д.
Например, в предложении «Кошка гонится за мышью»:
— одна голова выделяет слова, связанные с действием: фокус на «гонится»;
— другая голова смотрит на объекты: фокус на «кошка» и «мышью»;
— третья голова анализирует весь контекст, понимает связь всей фразы.
Двунаправленность архитектуры BERT
В классических рекуррентных архитектурах, таких как RNN или LSTM, а также обычных трансформерах с маскированием слов «справа» понимание контекста ограничивалось направлением обработки текста (слева направо или справа налево). BERT же умеет учитывать слова, которые находятся до и после текущего слова, чтобы лучше понять его смысл в контексте.
Мария Жарова, Data Scientist в Wildberries:
В основе BERT лежит многослойная двунаправленная трансформерная архитектура. В отличие от старших братьев, читающих текст только в одном направлении, BERT буквально смотрит на каждое слово с двух сторон сразу, что делает модель более «осведомленной» и улучшает понимание связи между словами.
Обучение BERT
Обучение BERT проходит в два этапа:
-
предсказание маскированных слов;
-
определение следующего предложения.
Мария Жарова, Data Scientist в Wildberries:
Модель BERT тренируется на задачах Masked Language Modeling и Next Sentence Prediction, что помогает ей угадывать скрытые слова и понимать связи между предложениями.
Маскированные слова (Masked Language Modeling, MLM)
Это слова, которые намеренно скрываются от модели на этапе обучения, чтобы она научилась восстанавливать их. Вот как это работает:
-
На вход модель получает текст, где некоторые слова заменены специальным токеном [MASK]. Например: «Я [MASK] книгу о машинном обучении».
-
Модель пытается угадать, какое слово скрыто за маской, опираясь на контекст. Для этого BERT использует свои двунаправленные связи, анализируя, что стоит до и после маски.
Например, модель может определить, что правильное слово — «прочитал», так как это наиболее вероятный вариант в данном контексте.
Как это работает
Чтобы модель не была слишком зависима от одной логики маскирования, используется специальная стратегия.
Во время обучения BERT маскирует только 15% всех слов в тексте, чтобы остальные 85% слов оставались видимыми и помогали сохранять контекст.
Пример: «Сегодня солнечно, но завтра может пойти дождь, поэтому я возьму зонт».
Из предложения случайным образом берется 15% слов, в данном случае это два слова — например, «солнечно» и «завтра».
Далее происходит следующее:
-
С вероятностью 80% выбранные слова заменяются на [MASK].
-
С вероятностью 10% они остаются без изменений.
-
С вероятностью 10% они заменяются на случайные слова из словаря.
Представим, что к слову «солнечно» применили [MASK], к «завтра» — замену на «кот». Получилось: «Сегодня [MASK], но кот может пойти дождь, поэтому я возьму зонт».
Это сделано для того, чтобы модель не слишком привязывалась к конкретному токену [MASK] и научилась работать в более разнообразных ситуациях.
Предсказание порядка двух предложений (Next Sentence Prediction, NSP)
Еще одна задача, на которой BERT обучается, — это предсказание порядка двух предложений.
Модели передается пара предложений, а она должна определить, действительно ли второе следует за первым или это случайная фраза.
Пример:
-
Предложения связаны.
«Я пошел в магазин» — «Там я купил хлеб».
Эти два предложения логически связаны, так как второе продолжает мысль первого.
-
Предложения не связаны.
«Я пошел в магазин» — «Собака бежит по улице».
Эти предложения не имеют логической связи. Второе предложение не продолжает мысли первого и не соответствует контексту.
Как это работает
Во время обучения BERT используются пары предложений. Для каждой пары предложений модель получает две метки:
-
«Истинная пара»: второе предложение логически продолжает первое.
-
«Ложная пара»: второе предложение случайно выбрано и не имеет смысла как продолжение.
Мария Жарова, Data Scientist в Wildberries:
На этапе обучения BERT предсказывает маскированные слова и определяет, в каком порядке идут предложения. Такой подход позволяет модели глубже понимать, как слова связаны между собой.
Пример реализации на Python
Возьмем предложения из прошлого примера.
-
Не забудьте установить библиотеку transformers:
!pip install transformers
-
Затем нужно импортировать модели BertTokenizer и BertForNextSentencePrediction из библиотеки transformers, а также torch:
from transformers import BertTokenizer, BertForNextSentencePrediction import torch
-
Загружаем предобученный токенизатор и модель для задачи NSP:
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertForNextSentencePrediction.from_pretrained('bert-base-uncased')
-
Кладем связанные предложения «Я пошел в магазин» и «Там я купил хлеб» в переменные, токенизируем их:
# Связанные предложения sentence_A = "Я пошел в магазин." sentence_B = "Там я купил хлеб." # Токенизация предложений encoding = tokenizer.encode_plus(sentence_A, sentence_B, return_tensors='pt')
-
Прогоняем токенизированные данные через модель:
outputs = model(**encoding)
-
Получаем логиты и предсказания. Логиты — это непосредственные результаты работы модели:
# Извлекаем логиты logits = outputs.logits # Получаем предсказание (индекс с максимальной вероятностью) prediction = torch.argmax(logits)
-
Выводим результаты:
if prediction.item() == 0: print("Предложения не связаны") else: print("Предложения связаны")
Получим, что предложения связаны.
Настройка гиперпараметров
Гиперпараметры — это параметры, которые задаются до начала обучения модели и управляют его процессом.
В отличие от параметров модели, которые обучаются на данных (например, веса нейронных сетей), гиперпараметры остаются фиксированными во время обучения.
Основные гиперпараметры в BERT
-
Скорость обучения (learning rate). То, насколько обновляются параметры модели на каждом шаге обучения.
-
Батч (batch size). Количество примеров, обрабатываемых моделью за один шаг.
-
Количество эпох (epochs). Число полных проходов через весь обучающий набор данных.
-
Максимальная длина входной последовательности. Максимальное количество токенов в одном примере текста.
-
Количество голов внимания (attention heads). Точки, которые параллельно вычисляют различные аспекты внимания, чтобы модель могла захватывать более разнообразные зависимости между словами.
-
Количество слоев (layers). Число однообразных трансформерных блоков, которые модель будет применять для обработки текста.
-
Размер скрытого состояния (hidden size). Величина вектора, который влияет на представление токенов внутри модели и определяет количество нейронов в скрытом слое каждой ее части.
Области применения BERT
Модели BERT используют для классификации текста, поиска именованных сущностей, анализа тональности текста и пользовательских намерений.
Мария Жарова, Data Scientist в Wildberries:
Ядро архитектуры для каждой модели остается одним и тем же — двунаправленным ядром трансформера; меняются только первые и последние слои под конкретные данные и задачи.
Классификация текста
Задача классификации текста заключается в отнесении текста к одной или нескольким категориям.
Примеры:
-
Определение тематики текста (например, новости, спорт, технологии).
-
Классификация писем как «спам» или «не спам».
-
Выявление признаков текста, таких как наличие оскорбительных высказываний.
Анализ тональности
В этом случае задача — определить эмоциональную окраску текста: положительная, отрицательная или нейтральная.
Примеры:
-
анализ отзывов на товары или услуги;
-
оценка мнений в социальных сетях;
-
оценка тональности публикаций в СМИ.
Распознавание именованных сущностей (Named-Entity Recognition, NER)
Задача заключается в выделении ключевых сущностей в тексте, таких как:
-
имена людей, компаний, организаций;
-
даты, числа, адреса;
-
географические объекты (города, страны).
Анализ пользовательских намерений
Эта задача схожа с анализом тональности, но включает в себя понимание того, что именно пользователь пытается выразить.
Пример:
-
ожидания от продукта;
-
пожелания или недовольства в отзывах.
Разновидности моделей BERT
Для различных задач были созданы улучшенные и специализированные версии BERT.
Мария Жарова, Data Scientist в Wildberries:
Существуют RoBERTa (более тщательно обученная модель), DistilBERT (облегченная версия), BERT-base, BERT-large и другие. Выбор модели зависит от ресурсов и точности задачи: для ограниченных ресурсов подходит DistilBERT, для высокой точности идеальна RoBERTa.
BERT-base, BERT-large
BERT-base и BERT-large — это стандартные варианты BERT, отличающиеся размером и мощностью.
BERT-base |
BERT-large |
|
Количество слоев (layers) |
12 |
24 |
Количество голов внимания (attention heads) |
12 |
16 |
Размер скрытого состояния (hidden size) |
768 |
1024 |
Размер модели |
Средний |
Большой |
Использование |
Для большинства стандартных задач NLP, таких как классификация текста, извлечение сущностей (NER) и т. д. |
Для более сложных задач, где требуется больше вычислительных мощностей и точности |
RoBERTa
RoBERTa — это улучшенная версия BERT, разработанная Facebook AI Research. RoBERTa была создана на основе BERT, но с некоторыми изменениями в процессе обучения.
-
RoBERTa использует больше данных для обучения, чем стандартный BERT.
-
Она обучается только на задаче маскирования токенов Masked Language Modeling (MLM), задача Next Sentence Prediction (NSP) отбрасывается.
-
RoBERTa дольше обучается, с более точной настройкой гиперпараметров.
Используется в тех же областях, что и BERT, но с лучшей производительностью.
DistilBERT
DistilBERT — это легкая версия BERT, которая была создана с целью уменьшить размер модели, ускорить инференс и сохранить при этом высокую производительность.
-
DistilBERT использует технику distillation, которая позволяет создавать компактную модель, которая по производительности близка к исходной модели BERT, но с меньшими вычислительными затратами.
-
Количество слоев у DistilBERT уменьшено (6 слоев вместо 12 у BERT-base).
Библиотека Hugging Face
Эта библиотека на Python предоставляет инструменты для работы с моделями NLP. В ней есть предобученные модели BERT, токенизаторы и пайплайны для различных задач.
Токенизаторы
Например, BertTokenizer.
Превращают текст в формат, понятный модели. Они разбивают его на токены (слова или части слов) и преобразуют их в числовые значения, которые модель может обработать.
Пайплайны для предобработки текста
Предоставляют готовые функции для выполнения типичных задач NLP, таких как классификация текста и анализ тональности, с минимальным кодом.
Метрики оценки качества BERT
Мария Жарова, Data Scientist в Wildberries:
Выбор метрик качества для оценки работы модели зависит только от типа задачи, которую решаете, и архитектура BERT здесь особенного влияния не оказывает. Например, Accuracy и F1-score подойдут для классификации, а для генерации текста нужны более специфические метрики (типа BLEU).
Accuracy и F1-score для задач классификации
Accuracy измеряет долю правильно классифицированных примеров.
Метрика F1-score учитывает точность (precision) и полноту (recall) предсказаний.
Где:
Precision (Точность) — доля правильных положительных предсказаний среди всех предсказанных положительных значений;
Recall (Полнота) — доля правильных положительных предсказаний среди всех реальных положительных значений.
BLEU для генерации текста
BLEU оценивает качество машинного перевода и других задач генерации текста. Она сравнивает, насколько сгенерированный текст совпадает с эталонным (референсным) на уровне n-грамм.
Где:
BP (Brevity Penalty) — штраф за сокращение длины сгенерированного текста относительно референсного.
Pn — точность n-грамм (например, 1-грамм, 2-грамм и так далее).
Wn — веса для разных n-грамм.
Рекомендации для изучения теории и практики работы с BERT
-
Изучайте трансформеры. Начните с понимания механизма внимания (attention) и самовнимания (self-attention). Это основа работы BERT.
-
Работайте с Hugging Face. Попробуйте предобученные модели BERT на реальных задачах (классификации, анализа тональности и т. д.). Это поможет быстрее понять, как применять модель на практике.
-
Гиперпараметры. Экспериментируйте с гиперпараметрами (скорость обучения, размер батча, количество слоев и т. д.). Начинайте с общепринятых значений, затем подстраивайте под свою задачу.
-
Выбор модели. Разные версии BERT (DistilBERT, RoBERTa) подходят для разных задач. Используйте легкие модели для скорости и большие — для точности.
-
Дообучение. Учитесь дообучать модели на специфических данных для повышения точности.
Мария Жарова, Data Scientist в Wildberries:
Сама архитектура трансформеров, а в особенности модификации, используемые в BERT, поначалу могут показаться сложными для понимания: на осознание теоретической части нужно время. Но теория может сильно помочь при работе с моделью на практике. Например, полезно понимать, за что отвечают те или иные гиперпараметры, каким образом можно дообучать и переиспользовать модель, какие варианты BERT подойдут под разные задачи и ресурсы.
Получить фундаментальные знания по математике, программированию, работе с данными и отточить навыки на реальных задачах от бизнеса можно на магистратуре «Науки о данных» Skillfactorу и МФТИ.
ссылка на оригинал статьи https://habr.com/ru/articles/862130/
Добавить комментарий