Skip to content

BERT

BERT(Bidirectional Encoder Representations from Transformers)是 Google 2018 年提出的预训练模型,首次在 11 项 NLP 任务上刷新纪录

flowchart LR
subgraph GPT 单向
A1[词1] --> A2[词2] --> A3[词3]
end
subgraph BERT 双向
B1[词1] <--> B2[词2] <--> B3[词3]
end
特性GPTBERT
方向单向(左→右)双向
预训练预测下一个词预测被遮住的词
架构Decoder onlyEncoder only
擅长文本生成文本理解
参数量117M-175B110M / 340M

Masked Language Model——随机遮住 15% 的词,让模型预测。被遮住的词中:

  • 80% 替换为 [MASK]
  • 10% 替换为随机词
  • 10% 保持不变
from transformers import AutoModelForMaskedLM, AutoTokenizer
model = AutoModelForMaskedLM.from_pretrained("bert-base-uncased")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
text = "Paris is the [MASK] of France."
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
mask_idx = (inputs["input_ids"] == tokenizer.mask_token_id).nonzero()[0, 1]
predicted = outputs.logits[0, mask_idx].argmax()
print(f"预测: {tokenizer.decode(predicted)}") # capital
[CLS] 句子A [SEP] 句子B [SEP]
  • [CLS]:分类 token,其输出用于句子级分类
  • [SEP]:分隔符,同时标记句子边界
  • Token Embedding + Segment Embedding + Position Embedding
from transformers import AutoModelForSequenceClassification, Trainer, TrainingArguments
model = AutoModelForSequenceClassification.from_pretrained(
"bert-base-uncased", num_labels=2
)
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=16,
learning_rate=2e-5,
)
trainer = Trainer(model=model, args=training_args, train_dataset=train_dataset)
trainer.train()
  • 只能做理解,不能做生成
  • 输入长度固定 512 tokens
  • 被 GPT 系列在生成任务上全面超越
  • 但其”预训练+微调”范式影响深远