1. 基础:BERT (Bidirectional Encoder Representations from Transformers)
BERT 是一个基础模型,后续很多模型都是在它的基础上进行改进或针对特定场景进行训练的。它的核心思想是:
-
双向性 (Bidirectional):在处理一个句子时,它会同时考虑一个词的左边和右边的上下文,这比之前只能单向(从左到右)看的模型(如 GPT-1)理解得更深刻。
-
Transformer 架构:完全基于 Self-Attention 机制,能捕捉句子中长距离的依赖关系。
-
预训练 + 微调 (Pre-training + Fine-tuning):先用海量的无标签文本(比如维基百科)进行预训练,让模型学习通用的语言知识。然后,针对你的具体任务(如情感分类、问答),用你自己的有标签数据进行微调。
2. 按尺寸划分:bert-base vs bert-large
这是 BERT 最常见的两种尺寸,它们的核心架构完全相同,区别仅在于模型的"大小"或"深度"。
|---------------|------------------------|-----------------------------|
| 特性 | bert-base | bert-large |
| 层数 (L) | 12 层 Transformer Block | 24 层 Transformer Block |
| 隐藏层维度 (H) | 768 | 1024 |
| 注意力头数 (A) | 12 个 | 16 个 |
| 总参数量 | 约 1.1 亿 | 约 3.4 亿 |
| 性能 | 效果不错,训练/推理速度较快 | 通常效果更好,但需要更多计算资源(显存、时间) |
| 适用场景 | 资源有限或对速度要求高的场景 | 追求最高性能,且计算资源充足的场景 |
简单来说:bert-large 更大、更深、参数更多,因此通常能学到更复杂的语言模式,效果也更好,但代价是计算开销更大。
3. 按语料和处理方式划分:-cased vs -uncased
这个后缀指的是在预训练时如何处理英文文本的大小写。
-
bert-base-uncased (不区分大小写)
-
处理方式:在预处理(Tokenization)阶段,所有文本都会被转换成小写。例如,"Apple" 和 "apple" 会被视为同一个词。
-
优点:简化了词汇表,模型不需要区分大小写带来的细微差别。在大多数情况下,大小写信息不那么重要(如情感分析),这种模型表现很好。
-
缺点:丢失了大小写所携带的语义信息。例如,"Apple" (公司) 和 "apple" (水果) 的区别就消失了。
-
-
bert-base-cased (区分大小写)
-
处理方式:保留原始文本的大小写。
-
优点 :能够捕捉到大小写带来的语义差异。在命名实体识别 (NER) 、词性标注 (PoS Tagging) 等任务中至关重要,因为大写通常表示专有名词。
-
缺点:词汇表更大,模型需要学习更多信息。
-
如何选择:如果你的任务中,大小写很重要(比如识别人名、地名),就用 cased 版本。如果大小写不重要,用 uncased 版本通常效果就足够好,甚至有时会更好。
4. 按语言划分:bert-base-chinese
这是专门为中文设计的 BERT 模型。它和英文 BERT 的主要区别在于两点:
-
训练语料 (Training Corpus) :它使用的是海量的中文语料(如中文维基百科)进行预训练,所以它"说"的是中文,理解的是中文的语法和词汇。
-
分词方式 (Tokenization):
-
英文 BERT 使用 WordPiece 分词,它会把词分成更小的子词(subwords),例如 "playing" -> "play", "##ing"。
-
中文没有像英文那样用空格分隔的天然词边界,所以 bert-base-chinese 采用的是单字分词 (Character-level Tokenization)。即每个汉字被视为一个独立的 Token。例如,"我爱北京天安门" 会被分成 ["我", "爱", "北", "京", "天", "安", "门"]。
-
这样做的好处是避免了中文分词错误的问题,覆盖率也高(常用汉字就几千个),非常适合中文处理。
-
简单来说 :处理中文文本时,必须使用 bert-base-chinese 或其他中文预训练模型,用英文 BERT 来处理中文是行不通的。
5. 改进版模型:RoBERTa (A Robustly Optimized BERT Pretraining Approach)
RoBERTa 不是一个新的模型架构,而是对 BERT 的训练方法进行了一系列优化和改进后得到的模型。你可以把它看作是"训练得更好"的 BERT。它和 BERT 的区别在于:
|----------------|----------------------------------------------------------------|----------------------------------------------------------------------------|
| 特性 | 原始 BERT | RoBERTa 的改进 |
| 训练数据 | 16GB 文本 (BooksCorpus + 英文维基) | 160GB 文本 (增加了 CC-News 等更多数据) |
| Masking 策略 | 静态遮盖 (Static Masking):数据预处理时,每个句子只被随机遮盖一次,后续训练不再改变。 | 动态遮盖 (Dynamic Masking):每次向模型输入一个序列时,都重新生成一个新的遮盖模式。模型能见到更多样的遮盖组合,学习更充分。 |
| NSP 任务 | 包含下一句预测 (Next Sentence Prediction) 任务,判断句子 B 是否是句子 A 的下一句。 | 移除了 NSP 任务。RoBERTa 的作者发现这个任务不仅没什么用,甚至可能损害模型性能。它只使用 MLM 任务。 |
| 训练批次大小 | 批次大小 (Batch Size) 较小 (256) | 使用非常大的批次大小 (8k),训练更稳定,效果更好。 |
| Tokenizer | 使用基于字符的 BPE (Byte-Pair Encoding) | 使用基于字节 (Byte) 的 BPE,词汇表更大,能更好地处理未见过的词。 |
总结 :RoBERTa 通过使用更多的数据、更大的批次、更长的训练时间 ,并优化了训练任务和方式 ,在几乎所有任务上的表现都全面超越了 BERT。在计算资源允许的情况下,使用 RoBERTa 通常是比 BERT 更好的选择。
总结表格
|------------------|----------------------|-----------------------------------|
| 模型 | 核心特点 | 主要应用场景 |
| BERT-Base | 平衡性能与效率的基础模型 | 通用英文 NLP 任务,资源受限场景 |
| BERT-Large | 更大、更强的 BERT 版本 | 追求最高性能的英文 NLP 任务 |
| BERT-Chinese | 使用中文语料和单字分词 | 所有中文 NLP 任务 |
| RoBERTa | BERT 的优化训练版,性能更强 | 大多数情况下是 BERT 的更优替代品,尤其是在通用语言理解任务上 |