BERT (Bidirectional Encoder Representations from Transformers)
BERT — это двунаправленный Transformer-энкодер Google, предварительно обученный предсказывать замаскированные слова с обеих сторон. Как он работает, тонкая настройка и разновидности.
BERT (двунаправленные представления кодировщика на основе трансформеров) — это трансформерный энкодер, который читает предложение целиком и формирует представление каждого слова с учетом слов по обе стороны от него. Джейкоб Девлин, Мин-Вэй Чанг, Кентон Ли и Кристина Товаутова из Google AI Language представили BERT в октябре 2018 года в работе BERT: предварительное обучение двунаправленных глубоких трансформеров для понимания языка, получившей награду за лучшую большую статью на NAACL 2019. Одна предварительно обученная модель BERT, дообученная с помощью одного дополнительного выходного слоя, установила новые рекорды на одиннадцати задачах обработки естественного языка (NLP): результат на тесте GLUE вырос до 80,5% — абсолютный прирост на 7,7 процентного пункта, — а результат на тесте ответов на вопросы SQuAD v1.1 достиг F1 93,2.
Как предварительно обучают BERT#
BERT-Base состоит из 12 слоев энкодера со скрытыми состояниями размерности 768 и 12 головами внимания, всего около 110 миллионов параметров; у BERT-Large 24 слоя, размерность 1 024, 16 голов и 340 миллионов параметров. Входной текст разбивается с помощью токенизации WordPiece на словарь из 30 000 токенов: каждую последовательность открывает специальный токен [CLS], а [SEP] разделяет два сегмента пары предложений. Google предварительно обучила обе версии на BooksCorpus (800 миллионов слов) и англоязычной Википедии (2 500 миллионов слов), используя две самоконтролируемые задачи.
При маскированном языковом моделировании (MLM) выбираются 15% позиций токенов: 80% из них заменяются на [MASK], 10% — на случайный токен, а 10% остаются без изменений; модель предсказывает исходные токены. В механизме внимания к себе BERT нет причинной маски, поэтому для каждого предсказания используется контекст с обеих сторон, чего не может делать языковая модель, обрабатывающая текст слева направо. При предсказании следующего предложения (NSP) каждый сегмент в половине случаев объединяется с настоящим продолжением, а в остальных — со случайным предложением; классификатор, получающий выход [CLS], учится различать эти варианты.
В предварительно обученной контрольной точке сохраняется голова предсказания замаскированных слов, поэтому исходная модель может напрямую заполнить пропуск:
from transformers import pipeline
# BERT предсказывает замаскированное слово по словам с обеих сторон от него
fill = pipeline("fill-mask", model="bert-base-uncased")
for text in ["She went to the [MASK] to buy bread.", "She went to the [MASK] to see a doctor."]:
predictions = fill(text, top_k=3)
print(text, [(p["token_str"], round(p["score"], 2)) for p in predictions])Предложения различаются только после пропуска, и лучшее предсказание BERT меняется с «market» (0,82) на «hospital» (0,78). Модель, читающая текст слева направо, в обоих предложениях видит «She went to the» и не располагает ничем, что помогло бы их различить.
Дообучение и применение#
Дообучение добавляет небольшой слой для конкретной задачи и обучает все веса на размеченных примерах. Благодаря этому подходу трансферное обучение стало стандартом в NLP. Вектор [CLS] подается на классификаторы предложений, например для анализа тональности; векторы всех токенов используются в задачах разметки, например для распознавания именованных сущностей (NER), а оценки начала и конца фрагментов по токенам позволяют извлекать ответы.
В октябре 2019 года Google сообщила, что использует BERT для каждого десятого англоязычного поискового запроса в США. В качестве примера компания привела запрос «2019 brazil traveler to usa need a visa», в котором BERT распознала, что «to» указывает на поездку бразильца в США. К октябрю 2020 года BERT обрабатывала почти все запросы на английском языке. Энкодеры семейства BERT также создают эмбеддинги, лежащие в основе семантического поиска: Sentence-BERT дообучает BERT так, чтобы каждое предложение отображалось в один вектор для векторного поиска, ColBERT сохраняет по одному вектору на токен, а переранжировщики на основе кросс-энкодеров оценивают пары «запрос — фрагмент текста» в конвейерах генерации с дополнением извлеченными данными (RAG).
При детекции на основе визуально-языковых моделей Grounding DINO кодирует текстовые промпты с помощью энкодера BERT-base, прежде чем сопоставлять их с областями изображения. Это одна из размещенных моделей в инструменте умной разметки по классам в Ultralytics Platform: модель преобразует названия классов набора данных в редактируемые рамки для обучения детектора YOLO26. Идея маскированного предсказания перешла и на изображения: визуальный трансформер (ViT) позаимствовал у BERT токен [CLS] для классификации, а маскированные автоэнкодеры (MAE) предварительно обучают энкодеры изображений, скрывая 75% фрагментов изображения и восстанавливая их.
BERT, GPT и более поздние энкодеры#
Модели GPT построены на декодере трансформера с причинной маской, поэтому предсказывают каждый следующий токен на основе предыдущих и подходят для генерации текста. BERT формирует вектор для каждого входного токена, что подходит для классификации, извлечения информации и поиска; при этом у BERT нет встроенного способа генерировать текст слева направо. Большая языковая модель (LLM) с миллиардами параметров решает многие из тех же задач понимания с помощью промптов, но стоимость каждого запроса во много раз выше, чем у энкодера с 110 миллионами параметров.
В более поздних энкодерах усовершенствовали исходный подход. RoBERTa от Meta отказалась от NSP и дольше обучалась на больших пакетах примерно на 160 ГБ текста, показав, что BERT была значительно недообучена. DistilBERT от Hugging Face использовала дистилляцию знаний, чтобы сократить количество параметров на 40% и ускорить работу на 60%, сохранив 97% качества BERT в понимании языка. ModernBERT, выпущенная в декабре 2024 года компаниями Answer.AI и LightOn, обучалась на 2 триллионах токенов и имеет нативную длину контекста 8 192 токена — в 16 раз больше лимита BERT в 512 токенов.










