BERT(Bidirectional Encoder Representations from Transformers)是一种由 Google 在 2018 年提出的自然语言处理(NLP)模型,它在当时彻底改变了语言模型的设计思路。名字里的几个关键词已经透露了它的特点:双向(Bidirectional)、编码器(Encoder)、Transformers(一种神经网络结构)。简单来说,BERT 是一个能“读懂”语言的强大工具,尤其擅长理解上下文。
BERT 是什么?
BERT 是一个基于 Transformer 结构的预训练模型,它的核心创新在于双向性:它能同时看一个词的左边和右边的上下文,来理解这个词的意思。这跟之前的模型(比如 Word2Vec 或单向的 RNN)不一样,那些模型要么只看词本身,要么只能从左到右(或右到左)单向理解。
举个例子:
- 句子:“他把书放在银行。”
- 如果是单向模型,看到“银行”时可能只根据前文猜它是“river bank”(河岸),但 BERT 会同时看前后文,知道这里可能是“bank”(银行机构)。
为什么需要 BERT?
传统 NLP 方法(如 Word2Vec)只能基于局部上下文理解文本,无法处理复杂语境。例如:
- "苹果很好吃"(Apple 是水果)
- "苹果发布了新手机"(Apple 是公司)
BERT 的核心特点是“全局语境理解”,它会同时看前后文,从而更准确地理解单词或句子的含义。
BERT 怎么工作?
BERT 的工作分为两个阶段:预训练和微调。
1. 预训练(Pre-training)
BERT 在大量文本数据(比如维基百科、图书)上预先训练,学会语言的基本规律。训练时用两种任务:
- Masked Language Model (MLM):
- 随机遮住句子中的一些词(比如把 15% 的词替换成
[MASK]
),让模型预测被遮住的词。 - 例子:输入“今天的 [MASK] 很好”,BERT 得猜出
[MASK]
是“天气”。 - 这让 BERT 学会双向上下文。
- 随机遮住句子中的一些词(比如把 15% 的词替换成
- Next Sentence Prediction (NSP):
- 给 BERT 两个句子,让它判断第二个句子是不是第一个的合理续接。
- 例子:A: “今天的天气很好。” B: “所以我去公园散步。” → BERT 判断这是合理的。
- 这让 BERT 理解句子之间的关系。
通过这两个任务,BERT 学会了词的含义、句子的结构和语义联系。
2. 微调(Fine-tuning)
预训练完成后,BERT 可以针对具体任务(比如问答、分类)进行微调。你给它标注好的数据(比如“这个句子是积极还是消极?”),它就能快速适应该任务。
BERT 的训练方法
BERT 主要使用两种任务进行预训练:
(1)Masked Language Model(MLM,掩码语言模型)
- 训练时,BERT 会随机遮挡(MASK)输入中的部分单词,然后让模型预测被遮挡的词。
- 示例:
- 输入:"今天[MASK]很好。"
- BERT 预测:"今天 天气 很好。"
BERT 通过上下文信息来填充缺失单词,增强了语义理解能力!
(2)Next Sentence Prediction(NSP,下一句预测)
- 让 BERT 预测两句话是否有关联。
- 示例:
- 句子 A:"我今天去了公园。"
- 句子 B1:"那里风景很美。" ✅(相关)
- 句子 B2:"我喜欢吃苹果。" ❌(无关)
- BERT 需要学会判断 B 是否是 A 的合理续句。
这种能力对 QA、文本推理等任务非常重要!
BERT 的应用
(1)搜索引擎
Google 在 2019 年把 BERT 应用于搜索,提升了对复杂长查询的理解能力。
示例(搜索:"2019年巴西游客去美国需要签证吗?"):
- 传统搜索 可能关注 "巴西游客" 和 "美国",返回无关结果。
- BERT 搜索 能理解 "需要签证" 这个核心问题,提供更准确答案。
(2)问答系统(QA)
BERT 在 SQuAD 数据集上取得了超越人类的表现,可用于 智能客服、聊天 AI。
示例:
- 问题:"爱因斯坦出生在哪一年?"
- BERT 答案:"1879年。" ✅(从文章中精准定位答案)
(3)情感分析
BERT 可以用于微博、评论的情感分类(积极/消极/中立)。
示例:
- 输入:"这家餐厅的服务态度很差。"
- BERT 输出:"消极(-0.98)" ❌
(4)机器翻译 / 文本摘要
BERT 可用于翻译文章、自动生成摘要,提升 NLP 任务效果。
BERT 的结构
BERT 用的是 Transformer 的 Encoder 部分(Transformer 是一种基于注意力机制的网络)。它有多个层(比如 BERT-Base 有 12 层,BERT-Large 有 24 层),每层有多个“注意力头”,能同时关注句子中的不同部分。
输入时,BERT 会:
- 把句子拆成 token(比如“今天的天气很好” → “今 天 的 天 气 很 好”)。
- 给每个 token 加一个位置信息(告诉模型词的顺序)。
- 输出每个 token 的嵌入向量,这些向量是上下文相关的。
输出可以是:
- 每个 token 的向量(用于词级任务,比如命名实体识别)。
- 一个特殊 token
[CLS]
的向量(代表整句话,用于句子级任务,比如分类)。
BERT 的特点
- 双向性:不像 GPT(单向,从左到右),BERT 是双向的,能全面理解上下文。
- 预训练+微调:先学通用语言知识,再针对具体任务调整。
- 通用性:适用于问答、文本分类、翻译、摘要生成等几乎所有 NLP 任务。
举个例子
输入:“今天的天气很好。”
- BERT 拆成 token:
[CLS] 今 天 的 天 气 很 好 [SEP]
([CLS]
和[SEP]
是特殊标记)。 - 经过多层 Transformer 处理,每个 token 得到一个向量。
- 如果你要判断句子情绪,BERT 会输出
[CLS]
的向量,告诉你这是“积极”的。
再比如歧义:
- “他在银行存钱。” → “银行”是金融机构。
- “他在银行钓鱼。” → “银行”是河岸。
BERT 通过双向上下文,能区分这两种“银行”。
BERT 的局限
- 计算量大:需要强大硬件支持,尤其是大模型(BERT-Large)。
- 输入长度限制:通常最多 512 个 token,长文档得截断。
- 生成能力弱:BERT 是编码器模型,擅长理解,不擅长像 GPT 那样流畅生成文本。
总结
BERT 是一个“超级阅读理解专家”,通过双向 Transformer 结构和预训练,学会了深入理解语言。它就像一个聪明的助手,能帮你分析句子、回答问题、分类文本。跟你的例子“今天的天气很好”一样,BERT 不仅知道每个词的意思,还能明白整句话的语境和情绪!