人工智能篇---BERT
BERT(Bidirectional Encoder Representations from Transformers)的诞生,是自然语言处理领域一座真正的分水岭。在它之前,模型如Word2Vec或GPT理解词语的方式,就像是在玩只能看到过去、无法预见未来的拼图。而BERT的双向编码机制,让它能够同时审视词语的左右上下文,从而捕捉到语言中微妙的全貌。自2018年由谷歌提出以来,它迅速成为无数NLP任务的基石,深刻影响了从搜索引擎到智能客服的方方面面。下面,我们将从架构的视角,一步步拆解这个强大的模型。
1. 核心思想:深度双向的上下文理解
BERT的设计哲学可以概括为 “完形填空”式的学习。
在它之前,许多模型(如早期的GPT)是单向的,只能从左到右或从右到左阅读文本,这意味着一个词的理解只能依赖它前面的词。而BERT通过其核心的预训练任务——掩码语言模型(Masked Language Model, MLM),实现了真正的双向理解。
这个任务很简单:在训练时,随机遮蔽(mask)输入句子中15%的词,然后让模型根据没有被遮蔽的、左右两侧的所有上下文,来预测被遮蔽的词是什么。这迫使模型必须融合整个句子的信息来做出判断。为了确保预训练和后续微调任务的一致性,这15%的被选中词并非全部用特殊的 [MASK] 标记替换,而是采用了以下策略:
-
80% 的概率,替换为
[MASK]标记。 -
10% 的概率,替换为一个随机的其他词。
-
10% 的概率,保持不变。
除了MLM,原始的BERT还引入了下一句预测(Next Sentence Prediction, NSP)任务,用于理解两个句子之间的关系。模型需要判断给定的句子B是否是句子A的下一句。不过,后续研究(如RoBERTa)发现NSP并非总是必要,有时移除它反而能提升性能。
2. 模型架构:Transformer编码器的堆叠
BERT的骨架是 Transformer的编码器(Encoder) 部分。它抛弃了传统的循环或卷积神经网络,完全依赖自注意力机制来捕捉词语间的依赖关系。
Google官方发布了两个主要版本,以适应不同的计算资源和性能需求:
-
BERT-Base:由 12层 Transformer编码器堆叠而成,隐藏层维度为 768, 12个 注意力头,总参数量约 1.1亿。
-
BERT-Large:一个更深更宽的版本,由 24层 Transformer编码器堆叠,隐藏层维度为 1024, 16个 注意力头,总参数量高达 3.4亿。
每一层Transformer编码器内部都包含两个核心子层:多头自注意力机制(Multi-Head Self-Attention) 让模型关注序列中不同位置的信息,而前馈神经网络(Feed-Forward Network)则对注意力机制的输出进行非线性变换。每个子层周围都使用了残差连接(Residual Connection)和层归一化(Layer Normalization),以确保深层网络训练的稳定性。
3. 数据流动:精细的输入与输出表征
要让BERT理解文本,首先需要将文本转换成它能够处理的数字形式。BERT的输入表示是一个精巧的和,由三种嵌入向量逐元素相加而成。
-
词嵌入(Token Embeddings):将每个词或子词(sub-word)映射到一个固定维度的向量。BERT使用 WordPiece 分词算法,它能有效地将单词拆分成更常见的子词单元,从而优雅地处理未登录词(OOV)问题。例如,"playing" 可能被拆分成 "play" 和 "##ing"。
-
段嵌入(Segment Embeddings):用于区分输入中的不同句子。当输入是句子对(如问答中的问题和段落)时,属于第一个句子的token的段嵌入为0,第二个句子的为1。如果是单句输入,则所有token的段嵌入都为0。
-
位置嵌入(Position Embeddings):由于自注意力机制本身无法感知词语的顺序,需要显式地加入位置信息。与原始Transformer使用固定的三角函数不同,BERT采用可学习的位置嵌入,让模型在训练中自己调整每个位置的表征。
此外,输入序列的开头和句子之间还会插入特殊的标记:
-
[CLS]:始终位于序列最开头。它对应的最终输出向量可以被视为整个序列的聚合表示,特别适合用于分类任务。 -
[SEP]:用于分隔不同的句子。
经过BERT的多层编码器处理后,每个输入token都会对应一个输出向量(维度与隐藏层维度相同,如768或1024)。这些输出向量蕴含了丰富的、上下文相关的语义信息,是连接下游任务的桥梁。
4. 应用范式:预训练 + 微调
BERT的成功不仅在于其强大的架构,更在于它确立了一种高效的NLP问题解决范式:先在海量通用语料(如维基百科+BooksCorpus)上进行预训练,学习通用的语言知识;再针对特定任务,用少量标注数据进行微调(Fine-tuning)。
微调的过程非常灵活,通常只需在BERT之上添加一个简单的任务层,然后用任务数据对整个模型进行端到端的、小学习率的训练。这种“一点就通”的能力,使得它能够轻松适配各类任务:
-
句子级别任务:如情感分析、文本分类。将
[CLS]标记的最终输出向量,输入到一个新加的线性分类层中进行预测。 -
Token级别任务:如命名实体识别(NER)、词性标注。将每个token对应的输出向量,分别输入到一个分类层中进行独立预测。
-
问答任务:如 SQuAD(斯坦福问答数据集)。将问题和包含答案的段落拼接后输入BERT,然后训练两个新的向量来分别预测答案片段的起始位置和结束位置。
-
句对任务:如自然语言推理(NLI)。将两个句子通过
[SEP]连接后输入,使用[CLS]的输出进行分类,判断两句话的关系(如蕴涵、矛盾、中立)。
5. BERT知识全景总结框图
为了帮助你更直观地构建BERT的知识体系,以下是一张基于上述内容的思维导图,梳理了从核心思想到实际应用的关键脉络。

总而言之,BERT通过其双向的视野和精巧的“预训练-微调”设计,赋予了机器更深层次的语言理解能力。它不仅在当时刷新了11项NLP任务的纪录,更深刻地影响了后续几乎所有大型语言模型的发展路径。直到今天,理解BERT依然是探索更复杂、更强大AI模型的坚实起点。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)