BERT 虽然开创了 NLP 的新时代,但它本身也存在一些明显的痛点,比如训练成本高、显存占用大、以及部分预训练策略不够合理。
为了解决这些问题,学术界和工业界在 BERT 的基础上衍生出了一系列优秀的变体(BERT-family)。以下是几款最具代表性的模型及其解决的痛点:
- RoBERTa (A Robustly Optimized BERT)
* 解决的痛点:原始 BERT 的训练策略不够充分,且 NSP(下一句预测)任务被证明收益甚微。
* 核心改进:
* 取消 NSP 任务:研究发现 NSP 对下游任务帮助不大,反而增加了训练负担,RoBERTa 直接去掉了它。
* 动态掩码(Dynamic Masking):BERT 在预训练前只做一次掩码,所有 epoch 都用同一套掩码;RoBERTa 在每个 epoch 都会重新随机生成掩码。
* 海量数据与更大 Batch Size:使用了 160GB 的文本数据(BERT 是 16GB),并将 Batch Size 提升到了 8K。
* 效果:在几乎相同的架构下,性能全面超越了原版 BERT,成为了后来许多研究的默认基线(Baseline)。
- ALBERT (A Lite BERT)
* 解决的痛点:模型参数量太大,显存占用极高,难以在普通硬件上部署或训练。
* 核心改进:
* 词嵌入与隐藏层解耦:将词表嵌入维度(如 768)大幅缩小(如 128),而隐藏层保持较大。因为词表嵌入只占参数的一小部分,这大幅减少了参数量。
* 跨层参数共享(Cross-layer Parameter Sharing):所有 Transformer 层共享同一套参数。虽然层数没变,但参数量锐减。
* 用 SOP 替代 NSP:引入了"句子顺序预测(Sentence Order Prediction)",不仅判断两句话是否相邻,还判断顺序是否颠倒,增强了语篇连贯性理解。
* 效果:参数量大幅减少,训练速度更快,且在多项任务上性能持平甚至优于原版 BERT。
- DistilBERT (Distilled BERT)
* 解决的痛点:模型太大、推理太慢,不适合对延迟要求高的工业级线上服务。
* 核心改进:
* 知识蒸馏(Knowledge Distillation):使用原版 BERT 作为"教师模型(Teacher)",训练一个只有 6 层(BERT 是 12 层)的"学生模型(Student)"。学生模型不仅要拟合真实标签,还要模仿教师模型的输出概率分布。
* 效果:保留了 BERT 97% 的语言理解能力,但参数量减少了 40%,推理速度提升了 60%。是工业界落地的首选模型之一。
- XLNet
* 解决的痛点:BERT 的 MLM 机制存在"预训练与微调不一致"的问题(因为输入中带有 MASK 这种人工假词,而微调时没有)。同时,BERT 只能独立预测被掩盖的词,忽略了被掩盖词之间的依赖关系。
* 核心改进:
* 排列语言模型(Permutation Language Modeling):结合了自回归(GPT)和自编码(BERT)的优点。它不依赖 MASK 标记,而是通过随机打乱词的预测顺序来进行训练。
* 效果:在问答、文本分类等任务上超越了 BERT,彻底解决了预训练与微调不一致的问题。
- DeBERTa (Decoding-enhanced BERT with disentangled attention)
* 解决的痛点:BERT 的自注意力机制将"词的内容"和"词的位置"混合在一个向量里,导致模型对位置关系的捕捉不够精细。
* 核心改进:
* 解耦注意力机制(Disentangled Attention):将每个词拆分为"内容向量"和"位置向量",在计算注意力时分别计算"内容-内容"、"内容-位置"、"位置-内容"的交互。
* 效果:在 SuperGLUE 等极具挑战性的榜单上刷新了记录,是目前 Encoder 架构中的性能天花板之一。
💡 总结与选型建议:
* 如果追求极致性能:选 RoBERTa 或 DeBERTa。
* 如果算力/显存受限:选 ALBERT。
* 如果追求线上推理速度(工业界部署):选 DistilBERT。
(注:以上都是 Encoder-only 架构,适合做文本分类、抽取式问答等"理解型"任务。如果你需要做"生成型"任务,就需要看 GPT 系列或 T5 等 Encoder-Decoder 架构的演进路线了)