roberta_zh
roberta_zh 是一个针对中文优化的预训练语言模型,基于RoBERTa架构实现。它通过改进BERT的训练方法和数据处理方式,在多个自然语言处理任务上取得了更优的效果。这个模型特别适合需要处理中文文本的开发者和研究人员使用,能够帮助解决文本分类、情感分析、阅读理解等常见的NLP问题。
对于想要提升中文自然语言处理效果的用户来说,roberta_zh 提供了不同规模的预训练模型选择,包括6层体验版、12层和24层的完整版,支持TensorFlow和PyTorch两种主流框架直接加载使用。模型在30G大规模中文语料上进行训练,覆盖新闻、问答和百科等多种文本类型,确保了其广泛的适用性。
值得一提的是,roberta_zh 在多项基准测试中表现出色,例如在CCF互联网新闻情感分析任务中达到了81.25%的F1值,超越了BERT和XLNet等经典模型。这种性能提升主要得益于其优化的训练策略和更大的训练数据量。无论是从事NLP研究的学者,还是开发实际应用的工程师,都可以从中获得显著的效果提升。
使用场景
一家电商公司正在开发智能客服系统,希望通过自然语言处理技术提升用户咨询的响应效率和准确性。
没有 roberta_zh 时
- 客服系统对用户提问的理解能力有限,经常出现答非所问的情况,导致客户满意度下降
- 自行训练的语言模型需要大量标注数据,而公司内部缺乏足够的语料资源,效果难以保证
- 处理复杂的中文表达时,如多义词、口语化表述,模型表现不稳定,错误率较高
- 开发团队在模型优化上耗费大量时间,却难以达到预期效果,项目进度严重滞后
- 系统对新出现的商品名称和专业术语识别能力差,需要频繁更新模型
使用 roberta_zh 后
- 借助预训练模型的强大语义理解能力,客服系统能够更准确地理解用户意图,回答正确率提升15%
- 直接使用预训练模型,大幅减少数据准备和训练时间,让团队可以专注于业务逻辑开发
- 在处理复杂中文表达时表现出色,特别是对口语化和多义词的理解,显著降低错误率
- 预训练模型的优异性能让团队能快速完成原型验证,将产品上线时间提前了3个月
- 模型对新领域术语的适应性更强,通过少量微调即可快速支持新产品线
roberta_zh 的强大预训练能力帮助电商公司快速构建起高效的智能客服系统,显著提升了用户体验和运营效率。
运行环境要求
- Linux
- macOS
- Windows
需要 NVIDIA GPU,显存需求视模型大小而定,推荐 16GB+,CUDA 版本未说明
最低 16GB,推荐 32GB+

快速开始
RoBERTa for Chinese, TensorFlow & PyTorch
中文预训练RoBERTa模型
RoBERTa是BERT(一种基于Transformer的双向编码器表示,由谷歌在2018年发布)的改进版,通过改进训练任务和数据生成方式、训练更久、使用更大批次、使用更多数据等获得了业界领先的效果;可以用Bert直接加载。
本项目用TensorFlow实现了在大规模中文上RoBERTa的预训练,同时也会提供PyTorch的预训练模型和加载方式。
*** 2019-10-12:添加【阅读理解】不同模型上测试效果对比 ***
*** 2019-09-08: 添加国内下载地址、PyTorch版本、与多个模型bert-wwm、xlnet等模型效果初步对比 ***
albert, 中文版本 的预训练模型也已可用。
中文预训练RoBERTa模型-下载
*** 6层RoBERTa体验版 *** RoBERTa-zh-Layer6: Google Drive 或 百度网盘,TensorFlow版本,Bert 直接加载, 大小为200M
** 推荐 RoBERTa-zh-Large 通过验证**
RoBERTa-zh-Large: Google Drive 或 百度网盘 ,TensorFlow版本,Bert 直接加载
RoBERTa-zh-Large: Google Drive 或 百度网盘 ,PyTorch版本,Bert的PyTorch版直接加载
RoBERTa 24/12层版训练数据:30G原始文本,近3亿个句子,100亿个中文字(token),产生了2.5亿个训练数据(instance);
覆盖新闻、社区问答、多个百科数据等;
本项目与中文预训练24层XLNet模型 XLNet_zh项目,使用相同的训练数据。
RoBERTa_zh_L12: Google Drive 或 百度网盘 TensorFlow版本,Bert 直接加载
RoBERTa_zh_L12: Google Drive 或百度网盘 PyTorch版本,Bert的PyTorch版直接加载
Roberta_l24_zh_base TensorFlow版本,Bert 直接加载
24层base版训练数据:10G文本,包含新闻、社区问答、多个百科数据等。
什么是RoBERTa:
一种用于自然语言处理 (NLP) 系统预训练的强大优化方法,改进了来自Transformer的双向编码器表示(BERT),即谷歌在2018年发布的自监督方法。
RoBERTa在广泛使用的NLP基准——通用语言理解评估(GLUE)上取得了业界领先的结果。该模型在MNLI、QNLI、RTE、STS-B和RACE任务上表现优异,并在GLUE基准上实现了显著的性能提升。凭借88.5分的成绩,RoBERTa登上了GLUE排行榜的首位,与之前的领先者XLNet-Large持平。
(引自Facebook博客)
发布计划 Release Plan:
1、24层RoBERTa模型(roberta_l24_zh),使用30G文件训练, 9月8日
2、12层RoBERTa模型(roberta_l12_zh),使用30G文件训练, 9月8日
3、6层RoBERTa模型(roberta_l6_zh), 使用30G文件训练, 9月8日
4、PyTorch版本的模型(roberta_l6_zh_pytorch) 9月8日
5、30G中文语料,预训练格式,可直接训练(bert,xlent,gpt2) 待定
6、测试集测试和效果对比 9月14日
效果测试与对比 Performance
互联网新闻情感分析:CCF-Sentiment-Analysis
| 模型 | 线上F1 |
|---|---|
| BERT | 80.3 |
| Bert-wwm-ext | 80.5 |
| XLNet | 79.6 |
| Roberta-mid | 80.5 |
| Roberta-large (max_seq_length=512, split_num=1) | 81.25 |
注:数据来源于guoday的开源项目;数据集和任务介绍见:CCF互联网新闻情感分析
自然语言推断:XNLI
| 模型 | 开发集 | 测试集 |
|---|---|---|
| BERT | 77.8 (77.4) | 77.8 (77.5) |
| ERNIE | 79.7 (79.4) | 78.6 (78.2) |
| BERT-wwm | 79.0 (78.4) | 78.2 (78.0) |
| BERT-wwm-ext | 79.4 (78.6) | 78.7 (78.3) |
| XLNet | 79.2 | 78.7 |
| RoBERTa-zh-base | 79.8 | 78.8 |
| RoBERTa-zh-Large | 80.2 (80.0) | 79.9 (79.5) |
注:RoBERTa_l24_zh,只跑了两次,Performance可能还会提升;
BERT-wwm-ext来自于这里;XLNet来自于这里; RoBERTa-zh-base,指12层RoBERTa中文模型
问题匹配语任务:LCQMC(Sentence Pair Matching)
| 模型 | 开发集(Dev) | 测试集(Test) |
|---|---|---|
| BERT | 89.4(88.4) | 86.9(86.4) |
| ERNIE | 89.8 (89.6) | 87.2 (87.0) |
| BERT-wwm | 89.4 (89.2) | 87.0 (86.8) |
| BERT-wwm-ext | - | - |
| RoBERTa-zh-base | 88.7 | 87.0 |
| RoBERTa-zh-Large | 89.9(89.6) | 87.2(86.7) |
| RoBERTa-zh-Large(20w_steps) | 89.7 | 87.0 |
注:RoBERTa_l24_zh,只跑了两次,Performance可能还会提升。保持训练轮次和论文一致:
阅读理解测试
目前阅读理解类问题bert和roberta最优参数均为epoch2, batch=32, lr=3e-5, warmup=0.1
cmrc2018(阅读理解)
| 模型 | DEV |
|---|---|
| sibert_base | F1:87.521(88.628) EM:67.381(69.152) |
| sialbert_middle | F1:87.6956(87.878) EM:67.897(68.624) |
| 哈工大讯飞 roberta_wwm_ext_base | F1:87.521(88.628) EM:67.381(69.152) |
| brightmart roberta_middle | F1:86.841(87.242) EM:67.195(68.313) |
| brightmart roberta_large | F1:88.608(89.431) EM:69.935(72.538) |
DRCD(阅读理解)
| 模型 | DEV |
|---|---|
| siBert_base | F1:93.343(93.524) EM:87.968(88.28) |
| siALBert_middle | F1:93.865(93.975) EM:88.723(88.961) |
| 哈工大讯飞 roberta_wwm_ext_base | F1:94.257(94.48) EM:89.291(89.642) |
| brightmart roberta_large | F1:94.933(95.057) EM:90.113(90.238) |
CJRC(带有yes,no,unkown的阅读理解)
| 模型 | DEV |
|---|---|
| siBert_base | F1:80.714(81.14) EM:64.44(65.04) |
| siALBert_middle | F1:80.9838(81.299) EM:63.796(64.202) |
| 哈工大讯飞 roberta_wwm_ext_base | F1:81.510(81.684) EM:64.924(65.574) |
| brightmart roberta_large | F1:80.16(80.475) EM:65.249(66.133) |
阅读理解测试对比数据来源bert_cn_finetune
? 处地方,将会很快更新到具体的值
RoBERTa中文版 Chinese Version
本项目所指的中文预训练RoBERTa模型只指按照RoBERTa论文主要精神训练的模型。包括:
1、数据生成方式和任务改进:取消下一个句子预测,并且数据连续从一个文档中获得(见:Model Input Format and Next Sentence Prediction,DOC-SENTENCES)
2、更大更多样性的数据:使用30G中文训练,包含3亿个句子,100亿个字(即token)。由新闻、社区讨论、多个百科,包罗万象,覆盖数十万个主题,
所以数据具有多样性(为了更有多样性,可以可以加入网络书籍、小说、故事类文学、微博等)。
3、训练更久:总共训练了近20万,总共见过近16亿个训练数据(instance); 在Cloud TPU v3-256 上训练了24小时,相当于在TPU v3-8(128G显存)上需要训练一个月。
4、更大批次:使用了超大(8k)的批次batch size。
5、调整优化器等超参数。
除以上外,本项目中文版,使用了全词mask(whole word mask)。在全词Mask中,如果一个完整的词的部分WordPiece子词被mask,则同属该词的其他部分也会被mask,即全词Mask。
本项目中并没有直接实现dynamic mask。通过复制一个训练样本得到多份数据,每份数据使用不同mask,并加大复制的份数,可间接得到dynamic mask效果。
使用说明 Instructions for Use
当前本项目是使用sequence length为256训练的,所以可能对长度在这个范围内的效果不错;如果你的任务的输入比较长(如序列长度为512),或许效果有影响。
有同学结合滑动窗口的形式,将序列做拆分,还是得到了比较好的效果,见#issue-16
中文全词遮蔽 Whole Word Mask
| 说明 | 样例 |
|---|---|
| 原始文本 | 使用语言模型来预测下一个词的probability。 |
| 分词文本 | 使用 语言 模型 来 预测 下 一个 词 的 probability 。 |
| 原始Mask输入 | 使 用 语 言 [MASK] 型 来 [MASK] 测 下 一 个 词 的 pro [MASK] ##lity 。 |
| 全词Mask输入 | 使 用 语 言 [MASK] [MASK] 来 [MASK] [MASK] 下 一 个 词 的 [MASK] [MASK] [MASK] 。 |
模型加载(以Sentence Pair Matching即句子对任务,LCQMC为例)
下载LCQMC数据集,包含训练、验证和测试集,训练集包含24万口语化描述的中文句子对,标签为1或0。1为句子语义相似,0为语义不相似。
tensorFlow版本:
1、复制本项目: git clone https://github.com/brightmart/roberta_zh
2、进到项目(roberta_zh)中。
假设你将RoBERTa预训练模型下载并解压到该改项目的roberta_zh_large目录,即roberta_zh/roberta_zh_large
运行命令:
export BERT_BASE_DIR=./roberta_zh_large
export MY_DATA_DIR=./data/lcqmc
python run_classifier.py \
--task_name=lcqmc_pair \
--do_train=true \
--do_eval=true \
--data_dir=$MY_DATA_DIR \
--vocab_file=$BERT_BASE_DIR/vocab.txt \
--bert_config_file=$BERT_BASE_DIR/bert_config_large.json \
--init_checkpoint=$BERT_BASE_DIR/roberta_zh_large_model.ckpt \
--max_seq_length=128 \
--train_batch_size=64 \
--learning_rate=2e-5 \
--num_train_epochs=3 \
--output_dir=./checkpoint_lcqmc
注:task_name为lcqmc_pair。这里已经在run_classifier.py中的添加一个processor,并加到processors中,用于指定做lcqmc任务,并加载训练和验证数据。
PyTorch加载方式,先参考issue 9;将很快提供更具体方式。
预训练 Pre-training
1) 预训练的数据 data of pre-training
你可以使用你的任务相关领域的数据来训练,也可以从通用的语料中筛选出一部分与你领域相关的数据做训练。
通用语料数据见nlp_chinese_corpus:包含多个拥有数千万句子的语料的数据集。
2) 生成预训练数据 generate data for pre-training
包括使用参照DOC-SENTENCES的形式,连续从一个文档中获得数据;以及做全词遮蔽(whole word mask)
shell脚本:批量将多个txt文本转化为tfrecord的数据。
如将第1到10个txt转化为tfrecords文件:
nohup bash create_pretrain_data.sh 1 10 &
注:在我们的实验中使用15%的比例做全词遮蔽,模型学习难度大、收敛困难,所以我们用了10%的比例;
3)运行预训练命令 pre-training
去掉next sentence prediction任务
export BERT_BASE_DIR=<path_of_robert_or_bert_model>
nohup python3 run_pretraining.py --input_file=./tf_records_all/tf*.tfrecord \
--output_dir=my_new_model_path --do_train=True --do_eval=True --bert_config_file=$BERT_BASE_DIR/bert_config.json \
--train_batch_size=8192 --max_seq_length=256 --max_predictions_per_seq=23 \
--num_train_steps=200000 --num_warmup_steps=10000 --learning_rate=1e-4 \
--save_checkpoints_steps=3000 --init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt &
注:如果你重头开始训练,可以不指定init_checkpoint;
如果你从现有的模型基础上训练,指定一下BERT_BASE_DIR的路径,并确保bert_config_file和init_checkpoint两个参数的值能对应到相应的文件上;
领域上的预训练,可以不用训练特别久。
学习曲线 Learning Curve
对显存的要求 Trade off between batch Size and sequence length
| 系统 | 序列长度 | 最大批处理大小 |
|---|---|---|
RoBERTa-Base |
64 | 64 |
| ... | 128 | 32 |
| ... | 256 | 16 |
| ... | 320 | 14 |
| ... | 384 | 12 |
| ... | 512 | 6 |
RoBERTa-Large |
64 | 12 |
| ... | 128 | 6 |
| ... | 256 | 2 |
| ... | 320 | 1 |
| ... | 384 | 0 |
| ... | 512 | 0 |
技术交流与问题讨论QQ群: 836811304
如果有任何问题,可以提出issue,或者发送邮件至:brightmart@hotmail.com;
您也可以发送pull request来报告您在任务上的性能,或添加如何为PyTorch加载模型的方法等。
如果您有关于生成最佳性能的中文预训练模型的想法,请也告知我。
请报告在您的任务上的准确率情况及与其他模型的比较。
项目贡献者,还包括:
Research supported with Cloud TPUs from Google's TensorFlow Research Cloud (TFRC)
参考文献 Reference
1、RoBERTa: A Robustly Optimized BERT Pretraining Approach
2、Pre-Training with Whole Word Masking for Chinese BERT
3、BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
常见问题
相似工具推荐
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 真正成长为懂上
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
PaddleOCR
PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。
OpenHands
OpenHands 是一个专注于 AI 驱动开发的开源平台,旨在让智能体(Agent)像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点,通过自动化流程显著提升开发速度。 无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员,还是需要快速原型验证的技术团队,都能从中受益。OpenHands 提供了灵活多样的使用方式:既可以通过命令行(CLI)或本地图形界面在个人电脑上轻松上手,体验类似 Devin 的流畅交互;也能利用其强大的 Python SDK 自定义智能体逻辑,甚至在云端大规模部署上千个智能体并行工作。 其核心技术亮点在于模块化的软件智能体 SDK,这不仅构成了平台的引擎,还支持高度可组合的开发模式。此外,OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩,证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能,支持与 Slack、Jira 等工具集成,并提供细粒度的权限管理,适合从个人开发者到大型企业的各类用户场景。