BERT(Bidirectional Encoder Representations from Transformers)是谷歌于2018年提出的基于Transformer架构的预训练语言模型。它通过双向上下文理解和大规模无监督预训练,显著提升了自然语言处理(NLP)任务的性能,成为NLP领域的里程碑式模型。
为什么需要BERT?
传统模型(如RNN、LSTM)对文本的理解是单向的(从左到右或从右到左),无法同时利用上下文信息。例如,句子
"银行利率上涨" 和 "河边银行"
中的"银行",传统模型难以通过双向上下文区分词义。
突破性创新
BERT首次实现双向上下文建模,通过预训练(Pre-training)学习通用的语言表示,再通过微调(Fine-tuning)适配下游任务(如分类、问答)。这种"预训练+微调"模式成为现代NLP的基础范式。
基础结构:Transformer编码器
BERT基于Transformer的编码器(Encoder)堆叠而成,核心是自注意力机制(Self-Attention),可并行计算并捕捉任意两个词之间的关系。例如:句子:"猫追老鼠,因为它饿了"
自注意力机制能关联"它"与"猫",而非"老鼠"。
基础版本:
输入表示:
[CLS]
(分类标记)、文本段、[SEP]
(分隔符)组成。BERT通过两个无监督任务学习语言表示: 1. 掩码语言模型(MLM,
Masked Language Model)
-
随机遮盖输入中15%的Token(如替换为[MASK]
),模型预测被遮盖的Token。
- 允许模型同时利用双向上下文。 2. 下一句预测(NSP, Next Sentence
Prediction)
- 输入两个句子A和B,模型判断B是否为A的下一句。 -
帮助模型理解句子间关系。
[CLS]
标记的输出作为特征。文本分类
问答系统
从文章中提取答案(如SQuAD数据集任务)
示例:
问题:"阿尔伯特·爱因斯坦出生在哪里?"
文章片段:"...爱因斯坦出生于德国乌尔姆..." → 答案:"乌尔姆"
命名实体识别(NER)
识别文本中的人名、地点、组织等实体
示例:
输入:"马云是阿里巴巴创始人" → 输出:["马云"(人名), "阿里巴巴"(组织)]
搜索与推荐
BERT通过双向Transformer和预训练任务革新了NLP任务的表现,成为后续模型(如GPT、T5)的重要基础。尽管存在计算成本高、生成长文本能力有限等不足,其核心思想仍深刻影响了NLP领域的发展方向。随着轻量化、领域适配等改进,BERT及其变体在工业界和学术界持续发挥重要作用。
对15%进行Mask操作[像完形填空]
8(mask)-1(random)-1(remain)
用于问答;开头可以放CLS用于文本分类。
在预训练基础上,加全连接、softmax等微调
from transformers import BerTokenlizer, BertModel
学习建议
transformers
库实践文本分类