MacBERT
MacBERT 是一款专为中文自然语言处理优化的预训练模型,旨在解决传统 BERT 模型在“预训练”与“下游应用”阶段存在的不一致问题。在标准的掩码语言模型中,特殊的 [MASK] 标记仅在训练时出现,导致模型在实际使用时面对未见过的标记而表现受限。MacBERT 创新性地引入了“纠错型掩码”机制,不再使用 [MASK] 标记,而是利用语义相似词进行替换,让模型在预训练阶段就能学习如何根据上下文修正错误词汇。此外,它还结合了全词掩码和 N-gram 掩码技术,进一步提升了理解能力。
由于 MacBERT 的整体架构与原始 BERT 完全兼容,开发者无需修改现有代码即可无缝切换,轻松获得显著的性能提升。它特别适合从事中文文本分类、阅读理解、情感分析等任务的研究人员和算法工程师使用。无论是希望复现前沿学术成果的高校团队,还是致力于优化产品体验的企业开发组,都能通过 MacBERT 获得更精准的中文语义理解能力。目前,该模型已提供 Base 和 Large 两种规格,并支持通过 Hugging Face 等平台快速加载,是中文 NLP 领域值得尝试的高效基线模型。
使用场景
某电商公司的算法团队正在构建一个中文商品评论情感分析系统,旨在从海量用户反馈中精准识别产品优缺点。
没有 MacBERT 时
- 预训练与推理不一致:传统 BERT 在训练时使用
[MASK]标记,但实际评论数据中从未出现该标记,导致模型在上线后对真实文本的泛化能力下降。 - 生硬掩码破坏语义:将关键词直接替换为
[MASK]切断了上下文逻辑,模型难以学习到词语间的细微语义关联,尤其在处理“不错”、“一般”等模糊情感词时表现不佳。 - 长尾词汇识别率低:对于电商标特有的新词或拼写变体,标准 MLM 任务缺乏纠错机制,模型容易将其误判为噪声,导致情感分类准确率卡在瓶颈期。
- 调优成本高昂:为了弥补架构缺陷,团队不得不花费大量时间进行数据增强和复杂的后处理规则编写,仍难以显著提升效果。
使用 MacBERT 后
- 消除分布差异:MacBERT 引入“纠错型掩码”机制,用相似词(如将“好”替换为“棒”)替代
[MASK],使预训练任务与真实评论场景高度一致,大幅提升了模型落地表现。 - 语义理解更连贯:通过同义词替换保留句子完整性,模型能更好地捕捉上下文逻辑,对“虽然贵但质量好”这类转折句的情感判断更加精准。
- 具备天然纠错能力:利用 N-gram 掩码和相似词替换策略,MacBERT 能有效应对用户评论中的错别字和非规范表达,显著提升了长尾词汇的识别鲁棒性。
- 无缝迁移提效:由于框架与 BERT 完全兼容,团队无需修改现有代码即可无缝切换,仅用半天时间完成模型替换,情感分析 F1 值即刻提升 3.5%。
MacBERT 通过模拟人类纠错的阅读方式,从根本上解决了中文 NLP 中预训练与下游任务不匹配的痛点,让情感分析更懂“人话”。
运行环境要求
- 未说明
未说明
未说明

快速开始
- Revisiting Pre-trained Models for Chinese Natural Language Processing
- Yiming Cui, Wanxiang Che, Ting Liu, Bing Qin, Shijin Wang, Guoping Hu
- Published in Findings of EMNLP 2020
中文MacBERT | 中文ELECTRA | 中文XLNet | 知识蒸馏工具TextBrewer | 模型裁剪工具TextPruner
更多HFL发布的资源:https://github.com/ymcui/HFL-Anthology
News
2023/3/28 开源了中文LLaMA&Alpaca大模型,可快速在PC上部署体验,查看:https://github.com/ymcui/Chinese-LLaMA-Alpaca
2022/3/30 发布了新的预训练模型PERT:https://github.com/ymcui/PERT
2021/12/17 发布了模型裁剪工具TextPruner:https://github.com/airaria/TextPruner
2021/10/24 发布了首个面向少数民族语言的预训练模型CINO:https://github.com/ymcui/Chinese-Minority-PLM
2021/7/21 "自然语言处理:基于预训练模型的方法" 一书正式出版。
2020/11/3 预训练好的中文MacBERT已发布,使用方法与BERT一致。
2020/9/15 论文"Revisiting Pre-Trained Models for Chinese Natural Language Processing" 被Findings of EMNLP 录用为长文。
目录
| 章节 | 描述 |
|---|---|
| 简介 | 简要介绍MacBERT |
| 下载 | 下载MacBERT |
| 快速加载 | 介绍如何使用 🤗Transformers 快速加载模型 |
| 基线效果 | 在中文NLP任务上的效果 |
| FAQ | 常见问题 |
| 引用 | 文章引用信息 |
简介
MacBERT 是BERT的改进版本,引入了纠错型掩码语言模型(MLM as correction,Mac)预训练任务,缓解了“预训练-下游任务”不一致的问题。
掩码语言模型(MLM)中,引入了[MASK]标记进行掩码,但[MASK]标记并不会出现在下游任务中。在MacBERT中,我们使用相似词来取代[MASK]标记。相似词通过Synonyms toolkit (Wang and Hu, 2017)工具获取,算法基于word2vec (Mikolov et al., 2013)相似度计算。同时我们也引入了Whole Word Masking(wwm)和N-gram masking技术。当要对N-gram进行掩码时,我们会对N-gram里的每个词分别查找相似词。当没有相似词可替换时,我们将使用随机词进行替换。
以下是训练样本示例。
| 例子 | |
|---|---|
| 原始句子 | we use a language model to predict the probability of the next word. |
| MLM | we use a language [M] to [M] ##di ##ct the pro [M] ##bility of the next word . |
| Whole word masking | we use a language [M] to [M] [M] [M] the [M] [M] [M] of the next word . |
| N-gram masking | we use a [M] [M] to [M] [M] [M] the [M] [M] [M] [M] [M] next word . |
| MLM as correction | we use a text system to ca ##lc ##ulate the po ##si ##bility of the next word . |
MacBERT的主要框架与BERT完全一致,可在不修改现有代码的基础上进行无缝过渡。
更多细节请参考我们的论文:Revisiting Pre-trained Models for Chinese Natural Language Processing
下载
MacBERT-large, Chinese: 24-layer, 1024-hidden, 16-heads, 324M parametersMacBERT-base, Chinese:12-layer, 768-hidden, 12-heads, 102M parameters
| 模型 | 🤗HF | 百度盘 | 大小 |
|---|---|---|---|
MacBERT-large, Chinese |
HF link | TensorFlow(pw:zejf) | 1.2G |
MacBERT-base, Chinese |
HF link | TensorFlow(pw:61ga) | 383M |
快速加载
通过 🤗Transformers 可以快速加载MacBERT模型。
tokenizer = BertTokenizer.from_pretrained("MODEL_NAME")
model = BertModel.from_pretrained("MODEL_NAME")
注意:请使用BertTokenizer和BertModel来加载MacBERT模型!
对应的MODEL_NAME 如下所示:
| 原模型 | 模型调用名 |
|---|---|
| MacBERT-large | hfl/chinese-macbert-large |
| MacBERT-base | hfl/chinese-macbert-base |
基线效果
这里展示MacBERT在6个下游任务上的效果(更多结果请参考论文):
- CMRC 2018 (Cui et al., 2019):抽取式阅读理解(简体中文)
- DRCD (Shao et al., 2018):抽取式阅读理解(繁体中文)
- XNLI (Conneau et al., 2018):自然语言推断
- ChnSentiCorp:情感分类
- LCQMC (Liu et al., 2018):句对匹配
- BQ Corpus (Chen et al., 2018):句对匹配
为了保证结果的稳定性,我们同时给出独立运行10次的平均值(括号内)和最大值。
CMRC 2018
CMRC 2018数据集是哈工大讯飞联合实验室发布的中文机器阅读理解数据。 根据给定问题,系统需要从篇章中抽取出片段作为答案,形式与SQuAD相同。 评测指标为:EM / F1
| Model | Development | Test | Challenge | #Params |
|---|---|---|---|---|
| BERT-base | 65.5 (64.4) / 84.5 (84.0) | 70.0 (68.7) / 87.0 (86.3) | 18.6 (17.0) / 43.3 (41.3) | 102M |
| BERT-wwm | 66.3 (65.0) / 85.6 (84.7) | 70.5 (69.1) / 87.4 (86.7) | 21.0 (19.3) / 47.0 (43.9) | 102M |
| BERT-wwm-ext | 67.1 (65.6) / 85.7 (85.0) | 71.4 (70.0) / 87.7 (87.0) | 24.0 (20.0) / 47.3 (44.6) | 102M |
| RoBERTa-wwm-ext | 67.4 (66.5) / 87.2 (86.5) | 72.6 (71.4) / 89.4 (88.8) | 26.2 (24.6) / 51.0 (49.1) | 102M |
| ELECTRA-base | 68.4 (68.0) / 84.8 (84.6) | 73.1 (72.7) / 87.1 (86.9) | 22.6 (21.7) / 45.0 (43.8) | 102M |
| MacBERT-base | 68.5 (67.3) / 87.9 (87.1) | 73.2 (72.4) / 89.5 (89.2) | 30.2 (26.4) / 54.0 (52.2) | 102M |
| ELECTRA-large | 69.1 (68.2) / 85.2 (84.5) | 73.9 (72.8) / 87.1 (86.6) | 23.0 (21.6) / 44.2 (43.2) | 324M |
| RoBERTa-wwm-ext-large | 68.5 (67.6) / 88.4 (87.9) | 74.2 (72.4) / 90.6 (90.0) | 31.5 (30.1) / 60.1 (57.5) | 324M |
| MacBERT-large | 70.7 (68.6) / 88.9 (88.2) | 74.8 (73.2) / 90.7 (90.1) | 31.9 (29.6) / 60.2 (57.6) | 324M |
DRCD
DRCD数据集由中国台湾台达研究院发布,其形式与SQuAD相同,是基于繁体中文的抽取式阅读理解数据集。 由于ERNIE中去除了繁体中文字符,故不建议在繁体中文数据上使用ERNIE(或转换成简体中文后再处理)。 评测指标为:EM / F1
| Model | Development | Test | #Params |
|---|---|---|---|
| BERT-base | 83.1 (82.7) / 89.9 (89.6) | 82.2 (81.6) / 89.2 (88.8) | 102M |
| BERT-wwm | 84.3 (83.4) / 90.5 (90.2) | 82.8 (81.8) / 89.7 (89.0) | 102M |
| BERT-wwm-ext | 85.0 (84.5) / 91.2 (90.9) | 83.6 (83.0) / 90.4 (89.9) | 102M |
| RoBERTa-wwm-ext | 86.6 (85.9) / 92.5 (92.2) | 85.6 (85.2) / 92.0 (91.7) | 102M |
| ELECTRA-base | 87.5 (87.0) / 92.5 (92.3) | 86.9 (86.6) / 91.8 (91.7) | 102M |
| MacBERT-base | 89.4 (89.2) / 94.3 (94.1) | 89.5 (88.7) / 93.8 (93.5) | 102M |
| ELECTRA-large | 88.8 (88.7) / 93.3 (93.2) | 88.8 (88.2) / 93.6 (93.2) | 324M |
| RoBERTa-wwm-ext-large | 89.6 (89.1) / 94.8 (94.4) | 89.6 (88.9) / 94.5 (94.1) | 324M |
| MacBERT-large | 91.2 (90.8) / 95.6 (95.3) | 91.7 (90.9) / 95.6 (95.3) | 324M |
XNLI
在自然语言推断任务中,我们采用了XNLI数据,需要将文本分成三个类别:entailment,neutral,contradictory。
评测指标为:Accuracy
| Model | Development | Test | #Params |
|---|---|---|---|
| BERT-base | 77.8 (77.4) | 77.8 (77.5) | 102M |
| BERT-wwm | 79.0 (78.4) | 78.2 (78.0) | 102M |
| BERT-wwm-ext | 79.4 (78.6) | 78.7 (78.3) | 102M |
| RoBERTa-wwm-ext | 80.0 (79.2) | 78.8 (78.3) | 102M |
| ELECTRA-base | 77.9 (77.0) | 78.4 (77.8) | 102M |
| MacBERT-base | 80.3 (79.7) | 79.3 (78.8) | 102M |
| ELECTRA-large | 81.5 (80.8) | 81.0 (80.9) | 324M |
| RoBERTa-wwm-ext-large | 82.1 (81.3) | 81.2 (80.6) | 324M |
| MacBERT-large | 82.4 (81.8) | 81.3 (80.6) | 324M |
ChnSentiCorp
在情感分析任务中,二分类的情感分类数据集ChnSentiCorp。 评测指标为:Accuracy
| Model | Development | Test | #Params |
|---|---|---|---|
| BERT-base | 94.7 (94.3) | 95.0 (94.7) | 102M |
| BERT-wwm | 95.1 (94.5) | 95.4 (95.0) | 102M |
| BERT-wwm-ext | 95.4 (94.6) | 95.3 (94.7) | 102M |
| RoBERTa-wwm-ext | 95.0 (94.6) | 95.6 (94.8) | 102M |
| ELECTRA-base | 93.8 (93.0) | 94.5 (93.5) | 102M |
| MacBERT-base | 95.2 (94.8) | 95.6 (94.9) | 102M |
| ELECTRA-large | 95.2 (94.6) | 95.3 (94.8) | 324M |
| RoBERTa-wwm-ext-large | 95.8 (94.9) | 95.8 (94.9) | 324M |
| MacBERT-large | 95.7 (95.0) | 95.9 (95.1) | 324M |
LCQMC
LCQMC由哈工大深圳研究生院智能计算研究中心发布。 评测指标为:Accuracy
| Model | Development | Test | #Params |
|---|---|---|---|
| BERT | 89.4 (88.4) | 86.9 (86.4) | 102M |
| BERT-wwm | 89.4 (89.2) | 87.0 (86.8) | 102M |
| BERT-wwm-ext | 89.6 (89.2) | 87.1 (86.6) | 102M |
| RoBERTa-wwm-ext | 89.0 (88.7) | 86.4 (86.1) | 102M |
| ELECTRA-base | 90.2 (89.8) | 87.6 (87.3) | 102M |
| MacBERT-base | 89.5 (89.3) | 87.0 (86.5) | 102M |
| ELECTRA-large | 90.7 (90.4) | 87.3 (87.2) | 324M |
| RoBERTa-wwm-ext-large | 90.4 (90.0) | 87.0 (86.8) | 324M |
| MacBERT-large | 90.6 (90.3) | 87.6 (87.1) | 324M |
BQ Corpus
BQ Corpus由哈工大深圳研究生院智能计算研究中心发布,是面向银行领域的数据集。 评测指标为:Accuracy
| Model | Development | Test | #Params |
|---|---|---|---|
| BERT | 86.0 (85.5) | 84.8 (84.6) | 102M |
| BERT-wwm | 86.1 (85.6) | 85.2 (84.9) | 102M |
| BERT-wwm-ext | 86.4 (85.5) | 85.3 (84.8) | 102M |
| RoBERTa-wwm-ext | 86.0 (85.4) | 85.0 (84.6) | 102M |
| ELECTRA-base | 84.8 (84.7) | 84.5 (84.0) | 102M |
| MacBERT-base | 86.0 (85.5) | 85.2 (84.9) | 102M |
| ELECTRA-large | 86.7 (86.2) | 85.1 (84.8) | 324M |
| RoBERTa-wwm-ext-large | 86.3 (85.7) | 85.8 (84.9) | 324M |
| MacBERT-large | 86.2 (85.7) | 85.6 (85.0) | 324M |
FAQ
Q1: 有英文版的MacBERT吗?
A1: 目前没有。
Q2: 如何使用MacBERT?
A2: 和使用BERT一样,只需要简单替换模型文件和config就能使用了。当然,你也可以通过加载我们的模型(即初始化transformers部分)来进一步训练其他预训练模型。
Q3: 能提供MacBERT的训练代码吗?
A3: 暂无开源计划。
Q4: 能开源预训练的语料吗?
A4: 我们无法开源训练语料,因为没有相应重发布的权利。GitHub上有一些开源中文语料资源,可以多加关注利用。
Q5: 有计划在更大的语料上训练MacBERT并开源吗?
A5: 我们暂时没有计划。
引用
如果本项目中的资源对您的研究有帮助,请引用以下论文。
@inproceedings{cui-etal-2020-revisiting,
title = "Revisiting Pre-Trained Models for {C}hinese Natural Language Processing",
author = "Cui, Yiming and
Che, Wanxiang and
Liu, Ting and
Qin, Bing and
Wang, Shijin and
Hu, Guoping",
booktitle = "Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: Findings",
month = nov,
year = "2020",
address = "Online",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/2020.findings-emnlp.58",
pages = "657--668",
}
或者:
@journal{cui-etal-2021-pretrain,
title={Pre-Training with Whole Word Masking for Chinese BERT},
author={Cui, Yiming and Che, Wanxiang and Liu, Ting and Qin, Bing and Yang, Ziqing},
journal={IEEE Transactions on Audio, Speech and Language Processing},
year={2021},
url={https://ieeexplore.ieee.org/document/9599397},
doi={10.1109/TASLP.2021.3124365},
}
致谢
感谢Google TPU Research Cloud (TFRC)提供计算资源支持。
问题反馈
如有问题,请在GitHub Issue中提交。
- 在提交问题之前,请先查看FAQ能否解决问题,同时建议查阅以往的issue是否能解决你的问题。
- 重复以及与本项目无关的issue会被[stable-bot](stale · GitHub Marketplace)处理,敬请谅解。
- 我们会尽可能的解答你的问题,但无法保证你的问题一定会被解答。
- 礼貌地提出问题,构建和谐的讨论社区。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备