Ответ
BERT (Bidirectional Encoder Representations from Transformers) — это архитектура трансформера, предобученная на больших текстовых корпусах для создания контекстуализированных эмбеддингов слов.
Ключевые архитектурные особенности:
- Двунаправленный контекст: В отличие от односторонних моделей вроде GPT, BERT анализирует контекст слева и справа от каждого токена одновременно благодаря механизму Masked Self-Attention.
- Стек энкодеров: Состоит из идентичных слоев-энкодеров (обычно 12 в
bert-base, 24 вbert-large). Каждый слой включает:- Multi-Head Self-Attention для вычисления взвешенных зависимостей между всеми токенами в последовательности.
- Полносвязную feed-forward сеть (обычно с активацией GELU).
- Layer Normalization и остаточные связи (Residual Connections) вокруг каждой подструктуры.
- Специальные токены: Использует
[CLS](для классификации) и[SEP](для разделения предложений).
Этапы предобучения:
- MLM (Masked Language Modeling): Случайно маскируется 15% входных токенов, модель обучается их предсказывать. Это позволяет изучать глубокие контекстуальные представления.
- NSP (Next Sentence Prediction): Модель обучается определять, является ли второе предложение логическим продолжением первого. Это помогает понимать отношения между предложениями.
Пример получения эмбеддингов с помощью Hugging Face Transformers:
from transformers import BertTokenizer, BertModel
import torch
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
inputs = tokenizer("Hello, BERT!", return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
# outputs.last_hidden_state содержит контекстуальные эмбеддинги для каждого токена
# outputs.pooler_output — это обработанный эмбеддинг токена [CLS]
embeddings = outputs.last_hidden_state
На практике предобученную BERT дообучают (fine-tune) на конкретных downstream-задачах: классификации текста, NER, question answering.