bert
Transformer 双向编码器,通过掩码语言模型和下一句预测任务预训练,刷新 11 项 NLP 基准纪录
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Transformer 双向编码器,通过掩码语言模型和下一句预测任务预训练,刷新 11 项 NLP 基准纪录
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2018 年 10 月,Google 研究院发布了一篇论文,标题平淡无奇——《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》。但这篇论文带来的变革,用"地震"来形容毫不为过。在它之前,NLP 领域已经在注意力机制和 Transformer 架构上积累多年,但模型始终难以真正理解双向上下文——它们更像是"偏科的阅读者",只能从左到右或从右到左单向理解文本。
BERT 的出现,直接打破了这一瓶颈。

图1:Google Research 官方头像
在 BERT 诞生之前,NLP 模型的工作方式更像是在做"完形填空"时只能看到一半的上下文。GPT 采用的是从左到右的单向语言模型,ELMo 虽然用了双向 LSTM,但两个方向的特征是简单拼接而非深度融合。这些方法都无法真正捕捉句子的完整语义。
Google 的 Jacob Devlin、Ming-Wei Chang、Kenton Lee 和 Kristina Toutanova 四位研究者决定解决这个问题。他们的方案简单而优雅:用"掩码语言模型"(Masked Language Model, MLM)让模型在训练时同时看到左右上下文,就像一个人在做阅读理解时眼睛同时扫视整句话。
2018 年 11 月,BERT 在 GLUE(General Language Understanding Evaluation)基准上创下了 80.5% 的准确率纪录,将此前最佳成绩(72.8%)远远甩在身后。这一 7.7 个百分点的飞跃,在 NLP 领域堪称"炸裂"。
BERT 的核心是基于"多头自注意力机制"(Multi-Head Self-Attention)的 Transformer 编码器。与传统 RNN 不同,Transformer 可以并行处理整个句子中的所有词元,大幅提升训练效率。同时,自注意力机制允许每个词元直接关注序列中的其他所有词元,从而捕获任意距离的依赖关系。
BERT 使用了 12 或 24 层 Transformer 编码器堆叠(分别对应 BERT-Base 和 BERT-Large),每层包含多头注意力层和前馈神经网络层,中间通过残差连接和层归一化稳定训练。这种"深层双向"结构是 BERT 区别于此前模型的本质差异。
BERT 的预训练包含两个核心任务:
1. 掩码语言模型(MLM):在输入序列中随机遮盖 15% 的词元(约 80% 替换为 [MASK],10% 替换为随机词,10% 保持不变),训练模型预测被遮盖的词元。这个设计迫使模型必须利用完整的双向上下文信息。
2. 下一句预测(NSP):训练模型判断句子 B 是否紧跟在句子 A 之后。这帮助 BERT 理解句子间的逻辑关系,对问答、自然语言推理等任务至关重要。
这两个任务的联合训练,使 BERT 习得了极为丰富的语言表示。
预训练完成后,BERT 可以在下游任务上仅添加一个输出层进行微调(Fine-tuning)。不需要为每个任务设计复杂的专属架构,研究者只需调整输入输出格式,即可在问答、情感分类、文本相似度等数十种任务上迅速达到 SOTA 水平。这种"预训练 + 微调"的范式,后来成为整个 NLP 领域的标准流程。
本仓库(google-research/bert)是 Google 官方开源的 BERT TensorFlow 实现,提供了完整的预训练和微调代码:
| 文件 | 作用 |
|---|---|
modeling.py | BERT 模型核心实现,包含 Transformer 编码器、注意力机制和 MLM/NSP 任务头 |
tokenization.py | WordPiece 分词器实现,将文本转换为子词单元 |
run_pretraining.py | 从头开始预训练 BERT 的脚本 |
run_classifier.py | 在下游分类任务上微调 BERT 的脚本 |
run_squad.py | 在 SQuAD 问答数据集上微调 BERT |
optimization.py | Adam 权重衰减优化器实现 |
从代码结构看,这是一个典型的研究代码库:
适合场景:
不适合场景:
硬件门槛:
BERT 的发布被业界公认为 NLP 发展的分水岭。在此之前,NLP 模型需要针对每个具体任务设计复杂的架构:问答系统用 BiDAF,情感分类用 CNN/LSTM,命名实体识别用 CRF……每种方法都是独立的"孤岛"。
BERT 之后,整个领域被统一到"预训练-微调"范式下。研究者不再需要从零设计模型,只需选择合适的预训练模型、在自己的数据上微调即可。这种范式大幅降低了 NLP 研究的门槛,同时推动了工业界的快速落地。
BERT 引发了连锁反应:
据 Google Scholar 统计,BERT 原论文引用量已超过 10 万次,是 AI 历史上被引用最多的论文之一。
BERT 也不是完美的:
这些局限性催生了后续的轻量化方向——DistilBERT、ALBERT、TinyBERT 等工作都在尝试用知识蒸馏、参数共享等方法降低 BERT 的资源门槛。
BERT 的意义远不止于一个"效果好"的模型。它提出的一系列核心思想——双向 Transformer 编码器、掩码语言模型、预训练-微调范式——深刻重塑了整个 NLP 领域的研究路线图。即便后来 GPT-3、ChatGPT 等生成式模型带来了新的范式转移,BERT 所奠定的预训练语言表示方法,依然是现代 NLP 的基石技术。
对于想要深入理解 NLP 或开展相关研究的开发者而言,google-research/bert 仓库是必读的原典——它不仅是代码,更是理解现代语言模型的一扇窗口。