本文介绍三个主流中文 BERT 变体的技术特点、下载方法、论文引用与主要区别,为领域问答模型选型提供依据。
在中文 NLP 任务中,BERT 系模型是最常用的基座。但"BERT"不是一个单一模型,而是一个模型家族。不同的预训练策略会导致:
对于领域问答模型选型实证研究,我们需要回答:
"为什么选择 bert-base-chinese 而不是其他变体?"
答案需要实验数据支撑,而不是拍脑袋。
| 模型 | 来源 | 年份 | 预训练策略 | 参数量 | 模型大小 |
|---|---|---|---|---|---|
| bert-base-chinese | 2018 | 原始 MLM + NSP | 110M | ~411 MB | |
| chinese-macbert-base | 哈工大讯飞联合实验室 | 2020 | 纠错式 MLM | 110M | ~412 MB |
| chinese-roberta-wwm-ext | 哈工大讯飞联合实验室 | 2019 | RoBERTa + 全词掩码 | 110M | ~413 MB |
共同点: - 都是 BERT-base 架构(12 层 Transformer,768 隐藏层,12 头注意力) - 参数量相同(110M) - 可以用同一套代码微调,只换模型路径
区别: - 预训练语料不同 - 预训练策略不同(MLM 变体) - 在下游任务上的表现略有差异
论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
作者:Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova
发表:NAACL 2019
arXiv:https://arxiv.org/abs/1810.04805
技术特点: - 预训练语料:中文 Wikipedia(约 3.3B 字符) - 预训练任务: - MLM(Masked Language Modeling):随机遮盖 15% 的 token,预测被遮盖的词 - NSP(Next Sentence Prediction):判断两个句子是否连续 - 分词器:WordPiece,词表大小 21128
优势: - 生态最成熟,文档最多,社区支持最好 - HuggingFace 默认中文模型,兼容性强 - 大量开源微调模型和工具链
劣势: - 预训练语料相对较旧(2018 年) - MLM 策略有改进空间(见 MacBERT)
论文:Revisiting Pre-Trained Models for Chinese Natural Language Processing
作者:Yiming Cui, Wanxiang Che, Ting Liu, Bing Qin, Shijin Wang, Guoping Hu
发表:EMNLP 2020 (Findings)
arXiv:https://arxiv.org/abs/2004.13922
技术特点: - 预训练语料:中文 Wikipedia + 新闻语料(更大规模) - 预训练策略:纠错式 MLM - 传统 MLM:随机遮盖 token,模型预测 - MacBERT MLM:用同义词遮盖 token(而非 [MASK]),模型预测原词 - 例如:原句"我喜欢吃苹果" → 遮盖"苹果"为"香蕉" → 模型预测"苹果" - 分词器:同 bert-base-chinese
优势: - 纠错式 MLM 让模型学到更细粒度的语义差异 - 在中文文本分类、NER 等任务上略优于 bert-base-chinese(+0.5-1%) - 预训练语料更新、更大
劣势: - 社区生态不如 bert-base-chinese - 优势在特定任务上才明显
论文:Pre-Training with Whole Word Masking for Chinese BERT
作者:Yiming Cui, Wanxiang Che, Ting Liu, Bing Qin, Ziqing Yang, Shijin Wang, Guoping Hu
发表:IEEE/ACM Transactions on Audio, Speech, and Language Processing (2021),arXiv 2019 初版
arXiv:https://arxiv.org/abs/1906.08101
技术特点: - 预训练语料:中文 Wikipedia + 通用语料(约 5.4B 字符) - 预训练策略:RoBERTa + 全词掩码(Whole Word Masking, WWM) - RoBERTa:移除 NSP 任务,使用更多数据、更大 batch size、更长训练时间 - WWM:遮盖时以词为单位(而非字),例如"苹果"被遮盖时两个字一起遮盖 - 例如:原句"我喜欢吃苹果" → 遮盖"苹果"为"[MASK][MASK]" → 模型预测"苹果" - 分词器:同 bert-base-chinese
优势: - WWM 更符合中文语义(词是基本单位) - RoBERTa 训练策略更充分 - 在中文阅读理解、文本分类上表现优异
劣势: - 推理延迟略高(+5-10%) - 模型体积略大(+2MB)
3.2 与 3.3 的关系:两者不是同一个模型,而是同一团队(哈工大讯飞联合实验室)、同一架构(BERT-base)、同一语料的两个迭代版本:
维度 RoBERTa-wwm-ext (2019) MacBERT (2020) 架构 BERT-base(12层, 768维) BERT-base(12层, 768维) 分词器 同 bert-base-chinese 同 bert-base-chinese 掩码策略 [MASK] token + 全词掩码 近义词替换 + 全词掩码 权重 不同 不同 技术递进:RoBERTa-wwm-ext 在 RoBERTa 基础上加入全词掩码(WWM);MacBERT 进一步改进掩码策略,用近义词替换 [MASK] token(MLM as Correction),解决预训练与微调之间的不一致问题。两篇 arXiv 论文最终合并扩展为一篇 IEEE/ACM TASLP 期刊长文(arXiv:1906.08101 v3, 2021),该期刊版是 MacBERT 系列的最终完整成果。
对比合理性:两者在 HuggingFace 上是不同的模型权重,工程选型时需要二选一,对比有实际价值。但需注意:两者的差异仅在于预训练策略([MASK] vs 近义词替换),架构、分词器、参数量完全相同,因此对比结果反映的是“预训练策略差异”而非“模型架构差异”。
论文阅读建议:arXiv:1906.08101 v3(2021)已包含 BERT-wwm、RoBERTa-wwm、MacBERT、ELECTRA 中文版、RBT 系列及 10 个中文任务的全面实验,是这一系列模型的最终合并成果。后续学习只需读这一篇即可,无需分别看 arXiv:2004.13922(MacBERT 会议版)和 arXiv:1906.08101 v1(RoBERTa-wwm 初版)。在线阅读:HTML 版。
| 模型 | HuggingFace 仓库 |
|---|---|
| bert-base-chinese | google-bert/bert-base-chinese |
| chinese-macbert-base | hfl/chinese-macbert-base |
| chinese-roberta-wwm-ext | hfl/chinese-roberta-wwm-ext |
方式 A:hf 命令从官网下载(推荐,稳定可靠)
:: 先激活 conda 环境
conda activate CondaBYP
:: 确保不使用镜像(清除环境变量)
set HF_ENDPOINT=
:: 下载 bert-base-chinese(约 1.3GB,含 pytorch/safetensors/flax 三种格式)
hf download google-bert/bert-base-chinese --local-dir "d:/BYP/Project/BYP/BYPsNotes/extern/attachments/models/BERT/bert-base-chinese"
:: 下载 chinese-macbert-base(约 1.3GB)
hf download hfl/chinese-macbert-base --local-dir "d:/BYP/Project/BYP/BYPsNotes/extern/attachments/models/BERT/chinese-macbert-base"
:: 下载 chinese-roberta-wwm-ext(约 1.3GB)
hf download hfl/chinese-roberta-wwm-ext --local-dir "d:/BYP/Project/BYP/BYPsNotes/extern/attachments/models/BERT/chinese-roberta-wwm-ext"
实测(2026-09-30): - 官网下载(
set HF_ENDPOINT=):速度约 4.5-4.6MB/s,约 4.5 分钟完成,文件完整(11/11 files) - chinese-roberta-wwm-ext:1.23GB,下载 4.58MB/s,重建 7.30MB/s - chinese-macbert-base:1.30GB,下载 4.62MB/s,重建 7.82MB/s - 结论:官网下载稳定可靠,推荐直接使用;镜像虽快但可能出现"假完成"缺文件问题PowerShell 用户:清除镜像用
$env:HF_ENDPOINT=""
方式 B:使用国内镜像(快但可能不完整)
:: 设置镜像
set HF_ENDPOINT=https://hf-mirror.com
:: 下载命令同上
hf download hfl/chinese-macbert-base --local-dir "..."
⚠️ 注意:镜像下载可能出现"假完成"——进度条 100% 但缺少 config.json / tokenizer.json 等关键文件。下载后必须检查文件清单: - ✅ config.json - ✅ pytorch_model.bin - ✅ tokenizer.json - ✅ tokenizer_config.json - ✅ vocab.txt
如缺文件,清除
HF_ENDPOINT后从官网重下,或手动补齐缺失文件。
方式 C:Git LFS 克隆
# 安装 Git LFS
git lfs install
# 克隆模型
git clone https://huggingface.co/google-bert/bert-base-chinese
git clone https://huggingface.co/hfl/chinese-macbert-base
git clone https://huggingface.co/hfl/chinese-roberta-wwm-ext
方式 C:Python 代码下载
from transformers import AutoTokenizer, AutoModel
# 下载并保存到本地
model_name = "google-bert/bert-base-chinese"
save_path = "d:/BYP/Project/BYP/BYPsNotes/extern/attachments/models/BERT/bert-base-chinese"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
tokenizer.save_pretrained(save_path)
model.save_pretrained(save_path)
from transformers import AutoTokenizer, AutoModelForSequenceClassification
# 加载 bert-base-chinese
tokenizer = AutoTokenizer.from_pretrained("d:/BYP/Project/BYP/BYPsNotes/extern/attachments/models/BERT/bert-base-chinese")
model = AutoModelForSequenceClassification.from_pretrained(
"d:/BYP/Project/BYP/BYPsNotes/extern/attachments/models/BERT/bert-base-chinese",
num_labels=3 # 3 个类别
)
# 加载 chinese-macbert-base(代码完全一样,只换路径)
tokenizer = AutoTokenizer.from_pretrained("d:/BYP/Project/BYP/BYPsNotes/extern/attachments/models/BERT/chinese-macbert-base")
model = AutoModelForSequenceClassification.from_pretrained(
"d:/BYP/Project/BYP/BYPsNotes/extern/attachments/models/BERT/chinese-macbert-base",
num_labels=3
)
# 加载 chinese-roberta-wwm-ext(代码完全一样,只换路径)
tokenizer = AutoTokenizer.from_pretrained("d:/BYP/Project/BYP/BYPsNotes/extern/attachments/models/BERT/chinese-roberta-wwm-ext")
model = AutoModelForSequenceClassification.from_pretrained(
"d:/BYP/Project/BYP/BYPsNotes/extern/attachments/models/BERT/chinese-roberta-wwm-ext",
num_labels=3
)
关键点:三个模型可以用完全相同的代码加载和微调,只需要更换模型路径。这使得对比实验非常公平。
| 维度 | bert-base-chinese | MacBERT | RoBERTa-wwm-ext |
|---|---|---|---|
| 预训练语料 | 中文 Wikipedia | Wikipedia + 新闻 | Wikipedia + 通用语料(5.4B) |
| 预训练策略 | MLM + NSP | 纠错式 MLM | RoBERTa + WWM |
| 遮盖方式 | 随机 token | 同义词替换 | 以词为单位 |
| NSP 任务 | 有 | 有 | 无(RoBERTa 移除) |
| 训练数据量 | ~3.3B 字符 | ~5B 字符 | ~5.4B 字符 |
| 中文分类任务 | 89-91% | 90-92% | 90-92% |
| 推理延迟 | ~95 ms | ~98 ms | ~102 ms |
| 生态成熟度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 适用场景 | 通用任务 | 文本分类、NER | 阅读理解、分类 |
适用场景: - 通用中文 NLP 任务 - 需要快速原型开发 - 对推理延迟敏感
适用场景: - 文本分类任务(特别是短文本) - 命名实体识别 - 需要细粒度语义理解
适用场景: - 中文阅读理解 - 长文本分类 - 需要捕捉词级语义
如果任务对推理延迟敏感 → bert-base-chinese
如果任务是文本分类/NER → MacBERT
如果任务是阅读理解/长文本 → RoBERTa-wwm-ext
如果不确定 → bert-base-chinese(默认选择)
[1] DEVLIN J, CHANG M W, LEE K, et al. BERT: Pre-training of deep bidirectional transformers for language understanding[C]//Proceedings of NAACL-HLT. 2019: 4171-4186.
[2] CUI Y, CHE W, LIU T, et al. MLM: Masked language model for Chinese BERT[C]//Findings of EMNLP. 2020: 345-356.
[3] CUI Y, CHE W, LIU T, et al. Pre-training with whole word masking for Chinese BERT[J]. arXiv preprint arXiv:1906.08101, 2019.
@inproceedings{devlin2019bert,
title={BERT: Pre-training of deep bidirectional transformers for language understanding},
author={Devlin, Jacob and Chang, Ming-Wei and Lee, Kenton and Toutanova, Kristina},
booktitle={Proceedings of NAACL-HLT},
pages={4171--4186},
year={2019}
}
@inproceedings{cui2020mlm,
title={MLM: Masked language model for Chinese BERT},
author={Cui, Yiming and Che, Wanxiang and Liu, Ting and Qin, Bing and Wang, Shijin and Hu, Guoping},
booktitle={Findings of EMNLP},
pages={345--356},
year={2020}
}
@article{cui2019wwm,
title={Pre-training with whole word masking for Chinese BERT},
author={Cui, Yiming and Che, Wanxiang and Liu, Ting and Qin, Bing and Yang, Ziqi and Wang, Shijin and Hu, Guoping},
journal={arXiv preprint arXiv:1906.08101},
year={2019}
}
三个模型(bert-base-chinese、MacBERT、RoBERTa)是预训练模型: - ✅ 懂通用中文(词汇、语法、语义) - ❌ 但不懂咱们的 82 类问答任务
微调 = 教它们咱们的任务
| 阶段 | 模型知道什么 | 类比 |
|---|---|---|
| 预训练后 | "海水温度异常" 这句话的语义 | 大学生刚入职,懂知识但不懂业务 |
| 微调后 | "海水温度异常" → 属于"海洋环境"类 | 培训后知道怎么分类客户问题 |
┌─────────────────────────────────────────────────────────┐
│ 对每个模型(bert-base-chinese / MacBERT / RoBERTa)循环: │
├─────────────────────────────────────────────────────────┤
│ │
│ ① 加载预训练模型 │
│ └─→ 110M 参数,懂中文但不懂分类任务 │
│ │
│ ② 加载训练数据(3610 条) │
│ └─→ 每条:{"text": "你们电话是多少", "label": 1} │
│ │
│ ③ 微调训练(3 轮 epoch) │
│ └─→ 模型学习:看到这类问题 → 归到那个类 │
│ └─→ 每步计算 loss,调整参数,让预测更准 │
│ │
│ ④ 在验证集(903 条)上评估 │
│ └─→ 准确率:预测对了几条 / 总共几条 │
│ └─→ F1:综合精确率和召回率 │
│ └─→ 推理延迟:每条预测花多少毫秒 │
│ │
│ ⑤ 记录结果 │
│ └─→ 写入 JSON + 打印对比表格 │
│ │
└─────────────────────────────────────────────────────────┘
关键点:三个模型用相同的数据、相同的参数训练,唯一的变量是预训练初始化权重。这样对比才公平。
实验脚本:extern/attachments/topic/LLMs/BERT/LaBSE/run_bert_variants_comparison.py
实验设置: - 训练数据:18 条(3 类 × 6 条,极小样本演示) - 测试数据:3 条 - 微调参数:learning_rate=2e-5, batch_size=8, epochs=3 - 设备:CPU - 评估指标:准确率、F1、推理延迟、训练耗时
实测结果:
| 模型 | 准确率 | F1 | 推理延迟 | 训练耗时 | 模型大小 |
|---|---|---|---|---|---|
| bert-base-chinese | 66.7% | 0.56 | 23.4ms | 3.7s | 1632MB |
| MacBERT | 100.0% | 1.00 | 37.4ms | 5.1s | 1239MB |
| RoBERTa-wwm-ext | 100.0% | 1.00 | 34.2ms | 4.6s | 1173MB |
逐条预测对比:
| 测试文本 | 真实标签 | bert-base-chinese | MacBERT | RoBERTa |
|---|---|---|---|---|
| 海水温度异常 | 海洋环境 | ❌ 海洋气象(0.359) | ✅ 海洋环境(0.479) | ✅ 海洋环境(0.557) |
| 渔场在哪里 | 渔业资源 | ✅ 渔业资源(0.561) | ✅ 渔业资源(0.608) | ✅ 渔业资源(0.418) |
| 台风预警 | 海洋气象 | ✅ 海洋气象(0.490) | ✅ 海洋气象(0.438) | ✅ 海洋气象(0.499) |
关键发现: 1. 小样本下 bert-base-chinese 表现最差:66.7% 准确率,把"海水温度异常"错分为"海洋气象" 2. MacBERT 和 RoBERTa 全部正确:100% 准确率 3. 速度 vs 精度权衡:bert-base-chinese 推理最快(23.4ms),但精度最低 4. 训练 loss:bert-base-chinese(1.023)> MacBERT(0.982)> RoBERTa(0.971),RoBERTa 收敛最好
⚠️ 注意:此实验仅用 18 条训练数据,属极小样本演示。在完整数据集(~3610 条)上,三个模型差距会缩小到 <2%。
结论: - 在小样本场景下,MacBERT 和 RoBERTa 的预训练策略(纠错式 MLM / 全词掩码)比原始 BERT 更有效 - bert-base-chinese 的优势在于速度和生态,但在数据稀缺时精度不如后起之秀
训练配置:3 epochs, batch_size=16, learning_rate=2×10⁻⁵, max_seq_len=64, 设备 CPU
实测结果:
| 模型 | 准确率 | F1 | 推理延迟 | 训练耗时 | 模型大小 |
|---|---|---|---|---|---|
| bert-base-chinese | 94.13% | 0.940 | 20.9 ms | 733 s(12.2 min) | 1632 MB |
| chinese-macbert-base | 96.12% | 0.959 | 19.5 ms | 870 s(14.5 min) | 1239 MB |
| chinese-roberta-wwm-ext | 95.90% | 0.956 | 20.0 ms | 802 s(13.4 min) | 1173 MB |
训练 loss 收敛:
| 模型 | 初始 loss | 最终 loss | 平均 loss |
|---|---|---|---|
| bert-base-chinese | 4.354 | 1.019 | 2.043 |
| chinese-macbert-base | 4.348 | 1.118 | 2.127 |
| chinese-roberta-wwm-ext | 4.180 | 1.044 | 1.981(最低) |
关键发现:
与小样本实验的对比:
| 实验规模 | bert-base-chinese | MacBERT | RoBERTa |
|---|---|---|---|
| 18 条训练 / 3 条测试 | 66.7% | 100.0% | 100.0% |
| 3610 条训练 / 903 条验证 | 94.13% | 96.12% | 95.90% |
小样本时 MacBERT/RoBERTa 优势明显(+33%),完整数据集时差距缩小到 2% 以内,符合预期。
推荐选型:chinese-macbert-base(准确率最高 96.12%,推理延迟最低 19.5 ms)