DeepLearning模型-NLP-BERT
条评论BERT (Bidirectional Encoder Representations from Transformers) 是由 Google 团队在 2018 年提出的预训练语言模型底座。它是第一个基于 Transformer 架构的深层双向 Encoder。它的出现改变了自然语言处理(NLP)领域的范式,在发布时横扫了多项自然语言处理任务,在流行的 GLUE 基准上超过了当时所有的最强模型。
目前,基于 BERT 衍生的纯 Encoder 模型依然在 NLP 行业(尤其是文本分类、实体识别等自然语言理解任务 NLU)中占据着主导地位。
论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
1. 研究背景与动机 (Motivation)
在 BERT 提出之前,NLP 领域的预训练表示模型主要经历了以下几个阶段:
- **静态词向量 (Word2Vec / GloVe)**:词的表示是固定的,无法克服“一词多义”问题(例如“bank”在银行和河岸中的表示完全相同)。
- **上下文相关的动态向量 (ELMo)**:通过双向 LSTM 拼接获取上下文信息,但特征提取能力受限于 RNN 的浅层序列结构。
- 单向 Transformer 模型 (OpenAI GPT):引入了强大的 Transformer 架构提取特征,但采用的是严格从左到右的自回归(Autoregressive)结构,使得每个词只能看到它前面的词。
BERT 作者团队的核心洞察:
对于许多高级别语言理解任务(如阅读理解、自然语言推断),双向上下文捕捉能力(Bidirectional Context)至关重要。GPT 的前向自回归机制极大地限制了其由于缺乏下文信息而导致在理解全局语义时的表现。因此,BERT 旨在通过在大规模无标注语料中进行深层的双向预训练,来解决这一核心痛点。
2. 核心架构设计 (Architecture & Inputs)
BERT 的底层架构就是一个多层双向 Transformer 编码器(Encoder)。在论文中,作者公布了两种规模的模型:
- BERT-Base: $L=12$(层数), $H=768$(隐藏层维度), $A=12$(自注意力头数), Total Parameters = 110M。此设计是为了和 OpenAI GPT 规模保持一致,用于公平比对验证其架构先进性。
- BERT-Large: $L=24$, $H=1024$, $A=16$, Total Parameters = 340M。
输入表示 (Input Representation)
为了能够弹性处理各种各样的下游任务,BERT 必须能够清晰地表示单条句子或一对话语(如 [问句, 答句])。BERT 的单个输入 Token 最终的词嵌入向量(Embedding)由 三部分隐式特征相加 而成:
1 | graph TD |
- Token Embeddings:使用 WordPiece 分词技术,有效降低了 OOV(Out-of-Vocabulary)问题,全词表大小为 30,000。
- Segment Embeddings:用来显式区分两个文本连缀语句(句子 A 的 Token 全匹配标志位 0,句子 B 的 Token 全匹配标志位 1)。
- Position Embeddings:由于 Transformer 的 Self-Attention 是无序对等计算的,必须通过引入学习到的绝对位置向量支持高达 512 长度的序列信息。
💡特权标识符(Special Tokens)规范:
[CLS]:序列前缀首个强制生成的特殊分词。在所有 Transformer 顶层计算完成后,对应的最后隐藏特征态将被用作聚合整个序列理解的高阶级表示,经常被直连各类句级别分类任务的分类头中。[SEP]:用于分隔串联的两个输入句子。
3. 两大预训练任务 (Pre-training Tasks)
BERT 之所以能够学习深度的双向表示而不仅仅是浅显的连接上下文,得益于其设计的两个开创性的无监督语境重构挑战任务。
任务一:Masked Language Model (MLM, 掩码语言模型)
为了训练深度双向表示,BERT 将输入文本序列中随机抽取出 15% 的 WordPiece Token ,并通过推断周边上下文来预测这部分被掩掉空缺原始词汇。这在理论上被称为深层次完形填空任务。
设计冲突:如果 15% 的词直接全变为了 [MASK],将会导致模型在预训练数据与实际微调(Fine-tuning)业务数据存在分布差异偏差(下游任务绝不存在随机被遮蔽 [MASK] 输入)。
解决方案(经典的 80-10-10 策略):
为了缓解偏差错位,在被算法选中需要遮盖的 15% Token 中,作出了如下分配:
- **80%**:替换为标准掩码保留预训练惩罚:
(my dog is hairy -> my dog is [MASK]) - **10%**:替换为随机其他错误词汇:
(my dog is hairy -> my dog is apple),这迫使模型在每个位置都要保持警觉重叠计算,不单纯依靠背诵上下文。 - **10%**:保持原样留存:
(my dog is hairy -> my dog is hairy),目的是引导激活模型偏向并信赖自察到的事实语境。
任务二:Next Sentence Prediction (NSP, 下一句预测)
许多重要的实际场景任务(如问答推断 Q&A 和自然语言推理 NLI)都建立在理解跨句段连贯性映射之间,常规的掩码语言根本无法有效捕捉这类结构。
在生成每一大段预训练样本组装连句 A 和连句 B 时:
- 50% 的语料样本中,B 抽取的是正规篇章下文真实的下句跟随(打上正样本标签
IsNext)。 - 50% 的语料样本中,B 抽取的是任意文章段落无关的随机句子篡改(打上负样本标签
NotNext)。
模型需依靠 [CLS] 位置顶端特征计算出来的状态判断逻辑真伪,强行驱动捕捉粗粒度的段落结构关系。
4. 微调应用策略 (Fine-tuning Strategy)
BERT 的微调阶段最为优雅的地方在于其“万能接入的统一架构”,预训练基础权重的架构拓扑与下游微调之间不需要结构调整。在实际落地的初始化阶段除了修改对应的少量输出分类头映射矩阵(Classification Head),直接端对端反向传播微调就能产生惊人的结果。
1 | graph LR |
针对各个层级的场景映射:
- 全局单/双序列分类:如 NLI(推断)、Sentiment Labeling(情感)。直接利用顶层的
[CLS]集群特征对接传统的前馈网络进行逻辑回归。 - 单个词元 Token 级别:如 NER(命名实体识别),保留完整的序列长度,直接对 Transformer 最外层级每个对应 Token 特征点按时间片应用分类头计算词元类别。
- **阅读理解问答 (SQuAD)**:模型需要预测目标答案的确切游标。这部分直接学习出两组特殊的可验证向量参数(Start Vector / End Vector)利用他们去单独和文段对应的各层表征计算余弦点积激活映射最终边界。
5. 实验结论与颠覆性影响
在发布的论文里,团队测试了 11 个核心 NLP 任务体系(涵盖 GLUE, SQuAD v1.1, SQuAD v2.0,以及 SWAG)。凭借这套架构,BERT 刷新了并建立了一套全部前所未有的顶尖 SOTA(State-Of-The-Art)。
BERT 带来的变革启示:
- 网络架构大一统:BERT 摧古拉朽般证明了利用大规模粗数据预训练所产生的隐蔽深层大一统架构,能够简单碾压完全替代过去各种细分垂直任务下小团队精心雕刻设计的特殊网络算法器(如 Bi-LSTM, TextCNN,R-Net 等)。
- 定调“预训练+微调”范式主宰 AI 全面开花:这标志着个人/小型学术研究机构范式的彻底终结。自此,大多数业务应用开发者不再需要费时从头训练大型系统级基座模型,真正的门槛转移为依赖并获取基础开源百亿参数基座(Foundation Models),利用相对轻量的算力储备对其垂直领域业务数据作精细化的下游 Fine-Tuning。
BERT 毫无争议可以说是 NLP 甚至是全体 DeepLearning 领域大模型时代到来的核心开天辟地之作,它宣告着我们彻底挥别浅层词嵌入范式,踏入了预训练宏大语境参数宇宙的新纪元。