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у и МФТИ.