深度学习系列(8):BERT 详解
在上一期中,我们介绍了 Transformer 的基本结构及其在自然语言处理(NLP)中的应用。本期博客将深入介绍基于 Transformer 的BERT(Bidirectional Encoder Representations from Transformers),它在 NLP 任务中取得了革命性的突破。
1. BERT 的核心思想
BERT 由 Google 在 2018 年提出,它的主要创新点包括:
- 双向(Bidirectional)建模:相比于传统的单向语言模型(如 GPT),BERT 同时关注输入文本的前后文信息,使得词的表示更具语义理解能力。
- 预训练 + 微调(Pre-training & Fine-tuning):BERT 通过大规模无监督预训练,然后针对具体任务进行微调,显著提升了 NLP 任务的效果。
BERT 适用于:
- 句子分类(情感分析)
- 机器阅读理解(QA 任务)
- 命名实体识别(NER)
- 机器翻译
2. BERT 的预训练任务
1. Masked Language Model(MLM)
BERT 在训练时会随机遮盖(Mask)输入文本中的部分单词,并让模型根据上下文预测被遮盖的词。例如:
输入: "深度学习是一种 [MASK] 学习方法。"
目标: 预测 "[MASK]" 为 "机器"
2. Next Sentence Prediction(NSP)
BERT 还使用下一句预测任务,让模型判断两句话是否是相邻的。例如:
句子 A: "我今天去公园散步。"
句子 B: "天气很好,适合户外活动。"
目标: 判断 B 是否是 A 的下一句话(是 / 否)
3. BERT 的 PyTorch 实现
加载预训练模型
我们可以使用 transformers 库快速加载预训练的 BERT 模型:
from transformers import BertTokenizer, BertModel
# 加载 BERT 预训练模型和分词器
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertModel.from_pretrained("bert-base-uncased")
# 处理文本
text = "Deep learning is a subset of machine learning."
tokens = tokenizer(text, return_tensors="pt")
# 前向传播
outputs = model(**tokens)
print(outputs.last_hidden_state.shape)
BERT 进行文本分类
import torch
from transformers import BertForSequenceClassification
# 加载 BERT 分类模型
model = BertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
# 假设输入文本
inputs = tokenizer("This movie is great!", return_tensors="pt")
outputs = model(**inputs)
# 预测类别
logits = outputs.logits
predicted_class = torch.argmax(logits).item()
print("Predicted class:", predicted_class)
4. BERT 的应用
1. 情感分析
BERT 可以用于判断文本的情感倾向,如积极 / 消极情绪。
2. 机器阅读理解
BERT 在 SQuAD 任务上取得了优秀的效果,可以用于问答系统。
3. 代码自动补全
BERT 也被用于代码理解,如 CodeBERT。
5. 结论
BERT 通过双向 Transformer 结构和大规模预训练,极大地提升了 NLP 任务的效果。下一期,我们将介绍 GPT 及其在文本生成任务中的应用,敬请期待!
下一期预告:GPT 详解

被折叠的 条评论
为什么被折叠?



