GithubHelp home page GithubHelp logo

ymcui / chinese-bert-wwm Goto Github PK

View Code? Open in Web Editor NEW
9.3K 9.3K 1.4K 15.85 MB

Pre-Training with Whole Word Masking for Chinese BERT(中文BERT-wwm系列模型)

Home Page: https://ieeexplore.ieee.org/document/9599397

License: Apache License 2.0

Python 100.00%
bert bert-wwm bert-wwm-ext chinese-bert nlp pytorch rbt roberta roberta-wwm tensorflow

chinese-bert-wwm's Introduction

中文说明 | English



GitHub

在自然语言处理领域中,预训练语言模型(Pre-trained Language Models)已成为非常重要的基础技术。为了进一步促进中文信息处理的研究发展,我们发布了基于全词掩码(Whole Word Masking)技术的中文预训练模型BERT-wwm,以及与此技术密切相关的模型:BERT-wwm-ext,RoBERTa-wwm-ext,RoBERTa-wwm-ext-large, RBT3, RBTL3等。

本项目基于谷歌官方BERT:https://github.com/google-research/bert


中文LERT | 中英文PERT | 中文MacBERT | 中文ELECTRA | 中文XLNet | 中文BERT | 知识蒸馏工具TextBrewer | 模型裁剪工具TextPruner

查看更多哈工大讯飞联合实验室(HFL)发布的资源:https://github.com/ymcui/HFL-Anthology

新闻

2023/3/28 开源了中文LLaMA&Alpaca大模型,可快速在PC上部署体验,查看:https://github.com/ymcui/Chinese-LLaMA-Alpaca

2023/3/9 我们提出了一种图文多模态预训练模型VLE,查看:https://github.com/iflytek/VLE

2022/11/15 我们提出了中文小型预训练模型MiniRBT。查看:https://github.com/iflytek/MiniRBT

2022/10/29 我们提出了一种融合语言学信息的预训练模型LERT。查看:https://github.com/ymcui/LERT

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 由哈工大SCIR多位学者撰写的《自然语言处理:基于预训练模型的方法》已出版,欢迎大家选购。

2021/1/27 所有模型已支持TensorFlow 2,请通过transformers库进行调用或下载。https://huggingface.co/hfl

2020/9/15 我们的论文"Revisiting Pre-Trained Models for Chinese Natural Language Processing"Findings of EMNLP录用为长文。

2020/8/27 哈工大讯飞联合实验室在通用自然语言理解评测GLUE中荣登榜首,查看GLUE榜单新闻

2020/3/23 本目录发布的模型已接入飞桨PaddleHub,查看快速加载

2020/3/11 为了更好地了解需求,邀请您填写调查问卷,以便为大家提供更好的资源。

2020/2/26 哈工大讯飞联合实验室发布知识蒸馏工具TextBrewer

2020/1/20 祝大家鼠年大吉,本次发布了RBT3、RBTL3(3层RoBERTa-wwm-ext-base/large),查看小参数量模型

2019/12/19 本目录发布的模型已接入Huggingface-Transformers,查看快速加载

2019/10/14 发布萝卜塔RoBERTa-wwm-ext-large模型,查看中文模型下载

2019/9/10 发布萝卜塔RoBERTa-wwm-ext模型,查看中文模型下载

2019/7/30 提供了在更大通用语料(5.4B词数)上训练的中文BERT-wwm-ext模型,查看中文模型下载

2019/6/20 初始版本,模型已可通过谷歌下载,国内云盘也已上传完毕,查看中文模型下载

内容导引

章节 描述
简介 介绍BERT-wwm基本原理
中文模型下载 提供了BERT-wwm的下载地址
快速加载 介绍了如何使用🤗TransformersPaddleHub快速加载模型
模型对比 提供了本目录中模型的参数对比
中文基线系统效果 列举了部分中文基线系统效果
小参数量模型 列举了小参数量模型(3层Transformer)的效果
使用建议 提供了若干使用中文预训练模型的建议
英文模型下载 谷歌官方的英文BERT-wwm下载地址
FAQ 常见问题答疑
引用 本目录的技术报告

简介

Whole Word Masking (wwm),暂翻译为全词Mask整词Mask,是谷歌在2019年5月31日发布的一项BERT的升级版本,主要更改了原预训练阶段的训练样本生成策略。 简单来说,原有基于WordPiece的分词方式会把一个完整的词切分成若干个子词,在生成训练样本时,这些被分开的子词会随机被mask。 在全词Mask中,如果一个完整的词的部分WordPiece子词被mask,则同属该词的其他部分也会被mask,即全词Mask

需要注意的是,这里的mask指的是广义的mask(替换成[MASK];保持原词汇;随机替换成另外一个词),并非只局限于单词替换成[MASK]标签的情况。 更详细的说明及样例请参考:#4

同理,由于谷歌官方发布的BERT-base, Chinese中,中文是以为粒度进行切分,没有考虑到传统NLP中的中文分词(CWS)。 我们将全词Mask的方法应用在了中文中,使用了中文维基百科(包括简体和繁体)进行训练,并且使用了哈工大LTP作为分词工具,即对组成同一个的汉字全部进行Mask。

下述文本展示了全词Mask的生成样例。 注意:为了方便理解,下述例子中只考虑替换成[MASK]标签的情况。

说明 样例
原始文本 使用语言模型来预测下一个词的probability。
分词文本 使用 语言 模型 来 预测 下 一个 词 的 probability 。
原始Mask输入 使 用 语 言 [MASK] 型 来 [MASK] 测 下 一 个 词 的 pro [MASK] ##lity 。
全词Mask输入 使 用 语 言 [MASK] [MASK] 来 [MASK] [MASK] 下 一 个 词 的 [MASK] [MASK] [MASK] 。

中文模型下载

本目录中主要包含base模型,故我们不在模型简称中标注base字样。对于其他大小的模型会标注对应的标记(例如large)。

  • BERT-large模型:24-layer, 1024-hidden, 16-heads, 330M parameters
  • BERT-base模型:12-layer, 768-hidden, 12-heads, 110M parameters

注意:开源版本不包含MLM任务的权重;如需做MLM任务,请使用额外数据进行二次预训练(和其他下游任务一样)。

模型简称 语料 Google下载 百度网盘下载
RBT6, Chinese EXT数据[1] - TensorFlow(密码hniy)
RBT4, Chinese EXT数据[1] - TensorFlow(密码sjpt)
RBTL3, Chinese EXT数据[1] TensorFlow
PyTorch
TensorFlow(密码s6cu)
RBT3, Chinese EXT数据[1] TensorFlow
PyTorch
TensorFlow(密码5a57)
RoBERTa-wwm-ext-large, Chinese EXT数据[1] TensorFlow
PyTorch
TensorFlow(密码dqqe)
RoBERTa-wwm-ext, Chinese EXT数据[1] TensorFlow
PyTorch
TensorFlow(密码vybq)
BERT-wwm-ext, Chinese EXT数据[1] TensorFlow
PyTorch
TensorFlow(密码wgnt)
BERT-wwm, Chinese 中文维基 TensorFlow
PyTorch
TensorFlow(密码qfh8)
BERT-base, ChineseGoogle 中文维基 Google Cloud -
BERT-base, Multilingual CasedGoogle 多语种维基 Google Cloud -
BERT-base, Multilingual UncasedGoogle 多语种维基 Google Cloud -

[1] EXT数据包括:中文维基百科,其他百科、新闻、问答等数据,总词数达5.4B。

PyTorch版本

如需PyTorch版本,

1)请自行通过🤗Transformers提供的转换脚本进行转换。

2)或者通过huggingface官网直接下载PyTorch版权重:https://huggingface.co/hfl

下载方法:点击任意需要下载的模型 → 选择"Files and versions"选项卡 → 下载对应的模型文件。

使用说明

**大陆境内建议使用百度网盘下载点,境外用户建议使用谷歌下载点,base模型文件大小约400M。 以TensorFlow版BERT-wwm, Chinese为例,下载完毕后对zip文件进行解压得到:

chinese_wwm_L-12_H-768_A-12.zip
    |- bert_model.ckpt      # 模型权重
    |- bert_model.meta      # 模型meta信息
    |- bert_model.index     # 模型index信息
    |- bert_config.json     # 模型参数
    |- vocab.txt            # 词表

其中bert_config.jsonvocab.txt与谷歌原版BERT-base, Chinese完全一致。 PyTorch版本则包含pytorch_model.bin, bert_config.json, vocab.txt文件。

快速加载

使用Huggingface-Transformers

依托于🤗transformers库,可轻松调用以上模型。

tokenizer = BertTokenizer.from_pretrained("MODEL_NAME")
model = BertModel.from_pretrained("MODEL_NAME")

注意:本目录中的所有模型均使用BertTokenizer以及BertModel加载,请勿使用RobertaTokenizer/RobertaModel!

其中MODEL_NAME对应列表如下:

模型名 MODEL_NAME
RoBERTa-wwm-ext-large hfl/chinese-roberta-wwm-ext-large
RoBERTa-wwm-ext hfl/chinese-roberta-wwm-ext
BERT-wwm-ext hfl/chinese-bert-wwm-ext
BERT-wwm hfl/chinese-bert-wwm
RBT3 hfl/rbt3
RBTL3 hfl/rbtl3

使用PaddleHub

依托PaddleHub,只需一行代码即可完成模型下载安装,十余行代码即可完成文本分类、序列标注、阅读理解等任务。

import paddlehub as hub
module = hub.Module(name=MODULE_NAME)

其中MODULE_NAME对应列表如下:

模型名 MODULE_NAME
RoBERTa-wwm-ext-large chinese-roberta-wwm-ext-large
RoBERTa-wwm-ext chinese-roberta-wwm-ext
BERT-wwm-ext chinese-bert-wwm-ext
BERT-wwm chinese-bert-wwm
RBT3 rbt3
RBTL3 rbtl3

模型对比

针对大家比较关心的一些模型细节进行汇总如下。

- BERTGoogle BERT-wwm BERT-wwm-ext RoBERTa-wwm-ext RoBERTa-wwm-ext-large
Masking WordPiece WWM[1] WWM WWM WWM
Type base base base base large
Data Source wiki wiki wiki+ext[2] wiki+ext wiki+ext
Training Tokens # 0.4B 0.4B 5.4B 5.4B 5.4B
Device TPU Pod v2 TPU v3 TPU v3 TPU v3 TPU Pod v3-32[3]
Training Steps ? 100KMAX128
+100KMAX512
1MMAX128
+400KMAX512
1MMAX512 2MMAX512
Batch Size ? 2,560 / 384 2,560 / 384 384 512
Optimizer AdamW LAMB LAMB AdamW AdamW
Vocabulary 21,128 ~BERT[4] ~BERT ~BERT ~BERT
Init Checkpoint Random Init ~BERT ~BERT ~BERT Random Init

[1] WWM = Whole Word Masking
[2] ext = extended data
[3] TPU Pod v3-32 (512G HBM)等价于4个TPU v3 (128G HBM)
[4] ~BERT表示继承谷歌原版中文BERT的属性

中文基线系统效果

为了对比基线效果,我们在以下几个中文数据集上进行了测试,包括句子级篇章级任务。 对于BERT-wwm-extRoBERTa-wwm-extRoBERTa-wwm-ext-large,我们没有进一步调整最佳学习率,而是直接使用了BERT-wwm的最佳学习率。

最佳学习率:

模型 BERT ERNIE BERT-wwm*
CMRC 2018 3e-5 8e-5 3e-5
DRCD 3e-5 8e-5 3e-5
CJRC 4e-5 8e-5 4e-5
XNLI 3e-5 5e-5 3e-5
ChnSentiCorp 2e-5 5e-5 2e-5
LCQMC 2e-5 3e-5 2e-5
BQ Corpus 3e-5 5e-5 3e-5
THUCNews 2e-5 5e-5 2e-5

*代表所有wwm系列模型 (BERT-wwm, BERT-wwm-ext, RoBERTa-wwm-ext, RoBERTa-wwm-ext-large)

下面仅列举部分结果,完整结果请查看我们的技术报告

注意:为了保证结果的可靠性,对于同一模型,我们运行10遍(不同随机种子),汇报模型性能的最大值和平均值(括号内为平均值)。不出意外,你运行的结果应该很大概率落在这个区间内。

评测指标中,括号内表示平均值,括号外表示最大值。

简体中文阅读理解:CMRC 2018

CMRC 2018数据集是哈工大讯飞联合实验室发布的中文机器阅读理解数据。 根据给定问题,系统需要从篇章中抽取出片段作为答案,形式与SQuAD相同。 评测指标为:EM / F1

模型 开发集 测试集 挑战集
BERT 65.5 (64.4) / 84.5 (84.0) 70.0 (68.7) / 87.0 (86.3) 18.6 (17.0) / 43.3 (41.3)
ERNIE 65.4 (64.3) / 84.7 (84.2) 69.4 (68.2) / 86.6 (86.1) 19.6 (17.0) / 44.3 (42.8)
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)
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)
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)
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)

繁体中文阅读理解:DRCD

DRCD数据集由****台达研究院发布,其形式与SQuAD相同,是基于繁体中文的抽取式阅读理解数据集。 由于ERNIE中去除了繁体中文字符,故不建议在繁体中文数据上使用ERNIE(或转换成简体中文后再处理)。 评测指标为:EM / F1

模型 开发集 测试集
BERT 83.1 (82.7) / 89.9 (89.6) 82.2 (81.6) / 89.2 (88.8)
ERNIE 73.2 (73.0) / 83.9 (83.8) 71.9 (71.4) / 82.5 (82.3)
BERT-wwm 84.3 (83.4) / 90.5 (90.2) 82.8 (81.8) / 89.7 (89.0)
BERT-wwm-ext 85.0 (84.5) / 91.2 (90.9) 83.6 (83.0) / 90.4 (89.9)
RoBERTa-wwm-ext 86.6 (85.9) / 92.5 (92.2) 85.6 (85.2) / 92.0 (91.7)
RoBERTa-wwm-ext-large 89.6 (89.1) / 94.8 (94.4) 89.6 (88.9) / 94.5 (94.1)

司法阅读理解:CJRC

CJRC数据集是哈工大讯飞联合实验室发布的面向司法领域的中文机器阅读理解数据。 需要注意的是实验中使用的数据并非官方发布的最终数据,结果仅供参考。 评测指标为:EM / F1

模型 开发集 测试集
BERT 54.6 (54.0) / 75.4 (74.5) 55.1 (54.1) / 75.2 (74.3)
ERNIE 54.3 (53.9) / 75.3 (74.6) 55.0 (53.9) / 75.0 (73.9)
BERT-wwm 54.7 (54.0) / 75.2 (74.8) 55.1 (54.1) / 75.4 (74.4)
BERT-wwm-ext 55.6 (54.8) / 76.0 (75.3) 55.6 (54.9) / 75.8 (75.0)
RoBERTa-wwm-ext 58.7 (57.6) / 79.1 (78.3) 59.0 (57.8) / 79.0 (78.0)
RoBERTa-wwm-ext-large 62.1 (61.1) / 82.4 (81.6) 62.4 (61.4) / 82.2 (81.0)

自然语言推断:XNLI

在自然语言推断任务中,我们采用了XNLI数据,需要将文本分成三个类别:entailmentneutralcontradictory。 评测指标为:Accuracy

模型 开发集 测试集
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)
RoBERTa-wwm-ext 80.0 (79.2) 78.8 (78.3)
RoBERTa-wwm-ext-large 82.1 (81.3) 81.2 (80.6)

情感分析:ChnSentiCorp

在情感分析任务中,二分类的情感分类数据集ChnSentiCorp。 评测指标为:Accuracy

模型 开发集 测试集
BERT 94.7 (94.3) 95.0 (94.7)
ERNIE 95.4 (94.8) 95.4 (95.3)
BERT-wwm 95.1 (94.5) 95.4 (95.0)
BERT-wwm-ext 95.4 (94.6) 95.3 (94.7)
RoBERTa-wwm-ext 95.0 (94.6) 95.6 (94.8)
RoBERTa-wwm-ext-large 95.8 (94.9) 95.8 (94.9)

句对分类:LCQMC, BQ Corpus

以下两个数据集均需要将一个句对进行分类,判断两个句子的语义是否相同(二分类任务)。

LCQMC

LCQMC由哈工大深圳研究生院智能计算研究中心发布。 评测指标为:Accuracy

模型 开发集 测试集
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 89.6 (89.2) 87.1 (86.6)
RoBERTa-wwm-ext 89.0 (88.7) 86.4 (86.1)
RoBERTa-wwm-ext-large 90.4 (90.0) 87.0 (86.8)

BQ Corpus

BQ Corpus由哈工大深圳研究生院智能计算研究中心发布,是面向银行领域的数据集。 评测指标为:Accuracy

模型 开发集 测试集
BERT 86.0 (85.5) 84.8 (84.6)
ERNIE 86.3 (85.5) 85.0 (84.6)
BERT-wwm 86.1 (85.6) 85.2 (84.9)
BERT-wwm-ext 86.4 (85.5) 85.3 (84.8)
RoBERTa-wwm-ext 86.0 (85.4) 85.0 (84.6)
RoBERTa-wwm-ext-large 86.3 (85.7) 85.8 (84.9)

篇章级文本分类:THUCNews

篇章级文本分类任务我们选用了由清华大学自然语言处理实验室发布的新闻数据集THUCNews。 我们采用的是其中一个子集,需要将新闻分成10个类别中的一个。 评测指标为:Accuracy

模型 开发集 测试集
BERT 97.7 (97.4) 97.8 (97.6)
ERNIE 97.6 (97.3) 97.5 (97.3)
BERT-wwm 98.0 (97.6) 97.8 (97.6)
BERT-wwm-ext 97.7 (97.5) 97.7 (97.5)
RoBERTa-wwm-ext 98.3 (97.9) 97.7 (97.5)
RoBERTa-wwm-ext-large 98.3 (97.7) 97.8 (97.6)

小参数量模型

以下是在若干NLP任务上的实验效果,表中只提供测试集结果对比。

模型 CMRC 2018 DRCD XNLI CSC LCQMC BQ 平均 参数量
RoBERTa-wwm-ext-large 74.2 / 90.6 89.6 / 94.5 81.2 95.8 87.0 85.8 87.335 325M
RoBERTa-wwm-ext 72.6 / 89.4 85.6 / 92.0 78.8 95.6 86.4 85.0 85.675 102M
RBTL3 63.3 / 83.4 77.2 / 85.6 74.0 94.2 85.1 83.6 80.800 61M (59.8%)
RBT3 62.2 / 81.8 75.0 / 83.9 72.3 92.8 85.1 83.3 79.550 38M (37.3%)

效果相对值比较:

模型 CMRC 2018 DRCD XNLI CSC LCQMC BQ 平均 分类平均
RoBERTa-wwm-ext-large 102.2% / 101.3% 104.7% / 102.7% 103.0% 100.2% 100.7% 100.9% 101.9% 101.2%
RoBERTa-wwm-ext 100% / 100% 100% / 100% 100% 100% 100% 100% 100% 100%
RBTL3 87.2% / 93.3% 90.2% / 93.0% 93.9% 98.5% 98.5% 98.4% 94.3% 97.35%
RBT3 85.7% / 91.5% 87.6% / 91.2% 91.8% 97.1% 98.5% 98.0% 92.9% 96.35%
  • 参数量是以XNLI分类任务为基准进行计算
  • 括号内参数量百分比以原始base模型(即RoBERTa-wwm-ext)为基准
  • RBT3:由RoBERTa-wwm-ext 3层进行初始化,继续训练了1M步
  • RBTL3:由RoBERTa-wwm-ext-large 3层进行初始化,继续训练了1M步
  • RBT的名字是RoBERTa三个音节首字母组成,L代表large模型
  • 直接使用RoBERTa-wwm-ext-large前三层进行初始化并进行下游任务的训练将显著降低效果,例如在CMRC 2018上测试集仅能达到42.9/65.3,而RBTL3能达到63.3/83.4

欢迎使用效果更优的中文小型预训练模型MiniRBT:https://github.com/iflytek/MiniRBT

使用建议

  • 初始学习率是非常重要的一个参数(不论是BERT还是其他模型),需要根据目标任务进行调整。
  • ERNIE的最佳学习率和BERT/BERT-wwm相差较大,所以使用ERNIE时请务必调整学习率(基于以上实验结果,ERNIE需要的初始学习率较高)。
  • 由于BERT/BERT-wwm使用了维基百科数据进行训练,故它们对正式文本建模较好;而ERNIE使用了额外的百度贴吧、知道等网络数据,它对非正式文本(例如微博等)建模有优势。
  • 在长文本建模任务上,例如阅读理解、文档分类,BERTBERT-wwm的效果较好。
  • 如果目标任务的数据和预训练模型的领域相差较大,请在自己的数据集上进一步做预训练。
  • 如果要处理繁体中文数据,请使用BERT或者BERT-wwm。因为我们发现ERNIE的词表中几乎没有繁体中文。

英文模型下载

为了方便大家下载,顺便带上谷歌官方发布的英文BERT-large (wwm)模型:

FAQ

Q: 这个模型怎么用?
A: 谷歌发布的中文BERT怎么用,这个就怎么用。 文本不需要经过分词,wwm只影响预训练过程,不影响下游任务的输入。

Q: 请问有预训练代码提供吗?
A: 很遗憾,我不能提供相关代码,实现可以参考 #10#13

Q: 某某数据集在哪里下载?
A: 请查看data目录,任务目录下的README.md标明了数据来源。对于有版权的内容,请自行搜索或与原作者联系获取数据。

Q: 会有计划发布更大模型吗?比如BERT-large-wwm版本?
A: 如果我们从实验中得到更好效果,会考虑发布更大的版本。

Q: 你骗人!无法复现结果😂
A: 在下游任务中,我们采用了最简单的模型。比如分类任务,我们直接使用的是run_classifier.py(谷歌提供)。 如果无法达到平均值,说明实验本身存在bug,请仔细排查。 最高值存在很多随机因素,我们无法保证能够达到最高值。 另外一个公认的因素:降低batch size会显著降低实验效果,具体可参考BERT,XLNet目录的相关Issue。

Q: 我训出来比你更好的结果!
A: 恭喜你。

Q: 训练花了多长时间,在什么设备上训练的?
A: 训练是在谷歌TPU v3版本(128G HBM)完成的,训练BERT-wwm花费约1.5天,BERT-wwm-ext则需要数周时间(使用了更多数据需要迭代更充分)。 需要注意的是,预训练阶段我们使用的是LAMB OptimizerTensorFlow版本实现)。该优化器对大的batch有良好的支持。 在微调下游任务时,我们采用的是BERT默认的AdamWeightDecayOptimizer

Q: ERNIE是谁?
A: 本项目中的ERNIE模型特指百度公司提出的ERNIE,而非清华大学在ACL 2019上发表的ERNIE

Q: BERT-wwm的效果不是在所有任务都很好
A: 本项目的目的是为研究者提供多元化的预训练模型,自由选择BERT,ERNIE,或者是BERT-wwm。 我们仅提供实验数据,具体效果如何还是得在自己的任务中不断尝试才能得出结论。 多一个模型,多一种选择。

Q: 为什么有些数据集上没有试?
A: 很坦率的说: 1)没精力找更多的数据; 2)没有必要; 3)没有钞票;

Q: 简单评价一下这几个模型
A: 各有侧重,各有千秋。 中文自然语言处理的研究发展需要多方共同努力。

Q: 你预测下一个预训练模型叫什么?
A: 可能叫ZOE吧,ZOE: Zero-shOt Embeddings from language model

Q: 更多关于RoBERTa-wwm-ext模型的细节?
A: 我们集成了RoBERTa和BERT-wwm的优点,对两者进行了一个自然的结合。 和之前本目录中的模型之间的区别如下:
1)预训练阶段采用wwm策略进行mask(但没有使用dynamic masking)
2)简单取消Next Sentence Prediction(NSP)loss
3)不再采用先max_len=128然后再max_len=512的训练模式,直接训练max_len=512
4)训练步数适当延长

需要注意的是,该模型并非原版RoBERTa模型,只是按照类似RoBERTa训练方式训练出的BERT模型,即RoBERTa-like BERT。 故在下游任务使用、模型转换时请按BERT的方式处理,而非RoBERTa。

引用

如果本项目中的资源或技术对你的研究工作有所帮助,欢迎在论文中引用下述论文。

@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},
 }
@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",
}

致谢

第一作者部分受到谷歌TPU Research Cloud计划资助。

免责声明

本项目并非谷歌官方发布的Chinese BERT-wwm模型。同时,本项目不是哈工大或科大讯飞的官方产品。 技术报告中所呈现的实验结果仅表明在特定数据集和超参组合下的表现,并不能代表各个模型的本质。 实验结果可能因随机数种子,计算设备而发生改变。 该项目中的内容仅供技术研究参考,不作为任何结论性依据。使用者可以在许可证范围内任意使用该模型,但我们不对因使用该项目内容造成的直接或间接损失负责。

关注我们

欢迎关注哈工大讯飞联合实验室官方微信公众号,了解最新的技术动态。

qrcode.png

问题反馈

如有问题,请在GitHub Issue中提交。

chinese-bert-wwm's People

Contributors

kinghuin avatar ymcui avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chinese-bert-wwm's Issues

请问一下,我用bert-as-service去启动整个模型有一些问题

bert-as-service启动整个模型做词嵌入,原来的bert模型是直接输入一句话,然后产生一串词向量。但是没有经过分词,就直接输入的一句话。现在用这个wwm模型,我是否需要进行改变一下?改用分词后的结果(list或者空格连接的str)输入模型,获得词向量?
主要原因是采用原来的bert预训练模型,在加上决策树等分类方法,发现文本分类的精度有0.8以上。用了wwm只有0.2了。。。不知道哪里有问题。

模型转换失效,请求提供pytorch版本

可能由于操作原因,我使用pytorch-transformers进行模型转化,然而tf checkpoints转为pytorch模型后,发生模型无效果,基本等同于随机的现象,希望能够提供转换好的版本,麻烦您啦
转换命令为:
sudo python3 convert.py --tf_checkpoint_path ./bert_model.ckpt.index --bert_config_file bert_config.json --pytorch_dump_path ./pytorch_bert.bin
其中convert.py的代码为:
https://github.com/huggingface/pytorch-transformers/blob/master/pytorch_transformers/convert_tf_checkpoint_to_pytorch.py

关于词典的问题

这个模型真是太棒了!请问一个小小的问题,
按照示例:
[Original Sentence]
使用语言模型来预测下一个词的probability。
[Original Sentence with CWS]
使用 语言 模型 来 预测 下 一个 词 的 probability 。
[Original BERT Input]
使 用 语 言 [MASK] 型 来 [MASK] 测 下 一 个 词 的 pro [MASK] ##lity 。
[Whold Word Masking Input]
使 用 语 言 [MASK] [MASK] 来 [MASK] [MASK] 下 一 个 词 的 [MASK] [MASK] [MASK] 。

应该是按照分词的结果,组成词的前后字都会被mask,那就不应该存在 “##一” 这类中文词的替换问题,为啥词典里还有很多中文“##一 ”这类词呢?这些词存在的意义是什么呢?另外我也看了 #13 的回答,希望能得到回答,谢谢!

显存不够问题

请问一下,如果机器显存只有32G,或者更小,batch_size无法设置过高的情况下有没有折中的解决方法,谢谢

文本分类问题

请问在进行文本分类时,各文本的句子数目是不一样的,是如何提取的文本特征的呢?

Some question about training with LCQMC dataset

Hi,
Thank you for this wonderful work.
But when I use this pre-trained model to fine-tune on LCQMC dataset, the result is not satisfying, which is 83.5%, about 4% lower than average. Could you please provide more detailed training setting?
Now I set nums_epoch to 3, learning_rate to 2e-5, maxlen to 128, batch to 64, warm_up_steps to 10%, everything else is default. I have tried to increase batch_size and nums_epoch but it did not help.
I would appreciate if you give some suggestion.
Thanks!
Best,

DRCD數據集,在前處理時卡住

使用Bert-Chinese實現在DRCD數據集時,在前處理的部分卡住,如下圖
image

卡在40年這裡,就一動也不動了,不確定是甚麼問題造成..


附上我的scripts:

#### local path
DRCD_DIR=raw_data/
INIT_CKPT_DIR=BERT/bert_pretrain_model/chinese_L-12_H-768_A-12
MODEL_DIR=BERT/experiment/chinese_L-12_H-768_A-12

CUDA_VISIBLE_DEVICES=0,1 python BERT/bert/run_squad.py \
  --vocab_file=$INIT_CKPT_DIR/vocab.txt \
  --bert_config_file=$INIT_CKPT_DIR/bert_config.json \
  --init_checkpoint=$INIT_CKPT_DIR/bert_model.ckpt \
  --do_train=True \
  --train_file=$DRCD_DIR/DRCD_training.json \
  --do_predict=True \
  --predict_file=$DRCD_DIR/DRCD_dev.json \
  --train_batch_size=64 \
  --learning_rate=3e-5 \
  --num_train_epochs=2.0 \
  --max_seq_length=512 \
  --doc_stride=128 \
  --output_dir=$MODEL_DIR/model_ckpt \
  --use_tpu=False \
  --tpu_name=$TPU_NAME \
  --version_2_with_negative=False \
  --do_lower_case=True

关于优化器的选择

请问如果我的batchsize是2560(梯度累积实现),不用LAMB,而用原始的AdamWeightDecay优化器可以吗。

Chinese-BERT-wwm对于Masked LM 任务(完形填空,ERNIE中提到的那种),表现怎么样?有测试过么?

Chinese-BERT-wwm对于Masked LM 任务(完形填空,ERNIE中提到的那种),表现怎么样?有测试过么?
另外WWM采取了新的Mask策略,如果我想在此基础上增加一些专业领域词汇做pre-training,该怎么做?BERT原声模型中有相应的代码,但是因为两个模型mask策略不同,应该不能直接用原生BERT模型,能不能开源一下修改后的模型呢?

我想问下全词mask的一个小细节

在你们的工作中,比如mask词的时候,一个词为哈利波特,那么在你们的方法中,是不是只要这个词被mask,那一定是[mask][mask][mask][mask]的形式,还是偶尔会出现[mask]利[mask][mask]的形式,不知道你们是如何设置的(不考虑那个mask80%10%10%的那个随机概率),如果是前者,那么这种完全避免局部共现的设置会不会对结果有影响。

「THUCNews:篇章级文本分类」任务的评测结果

「THUCNews:篇章级文本分类」任务的训练和测试集是如何选取的?
因为Readme里只说了,“采用的是其中一个子集,需要将新闻分成10个类别中的一个。 ”
但是是哪个子集?
另外性能指标是F值吗?是宏平均还是微平均

关于模型的tokenizer

在pytorch版本中,载入bert-wwm,chinese的模型,调用 tokenizer.tokenize,得到的仍旧是以字为单位的分割,这个是否会导致使用的时候输入和模型不匹配,毕竟模型是wwm的

关于BPE tokenizer没有在项目里提及

您好,我有个疑问,就是roberta原文中采用的是BPE Tokenizer,然而好像SCIR中的roberta-wwm好像仍然采用的是bert的一系列(Bertconfig, BertTokenizer,就是hugginface pytorch_tranformer里面的类),所以模型的整体依旧是bert-wwm,只是训练的方式仿照roberta中训练的吗

关于阅读理解的问题

您好打扰您了。我看您的论文里面,对阅读理解数据集使用的长度是512。但是阅读理解任务很多答案的位置(answer_start)超过512,对于这些答案您是怎么处理的呢?

请问mask策略

请问你们的策略是只对词进行mask并预测,还是说是随机的(既有词也有单字)。

请问有fine tune代码提供吗

请问可以提供fine tune的代码吗?
我目前借鉴谷歌的代码但是NER task无法复现结果,想看看ft代码是否一致
谢谢

question of bert model size

Just wonder that how to get a smaller bert model like this one? Normal bert model is 1G, but this one is only 400M.

Thank you very much.

没能复现CMRC2018的结果

老师好!我用论文开源的参数在CMRC2018数据集上实验了一下,没能得到论文中的结果,想请教一下我的做法哪里存在问题,非常感谢!

以下是我的实践情况:

我是在CMRC2018数据集上用论文开源的bert参数做fine tuning的,使用的论文中推荐的学习率3e-5,batch size为7,模型网络结果与google开源的中文bert一致。优化器使用的是google开源的AdamWeightDecayOptimizer。warmup_steps是50。

从数据集构造fine tuning样本方式为:首先将问题和原文拼接,如果拼接后文本长度超过最大长度限制,则从文本后面截掉多出的文本。

实践中也是在论文中说明的2个epoch时达到最佳效果,但是在dev集上只达到了EM:54.9,F1:75.5。

关于模型input embedding

原模型样例:input:[CLS] 我 爱 中 国 [SEP]
Token embedding:E([CLS]) E(我) E(爱) E(中) E(国) E([SEP])
+
Segment embedding:E(A) E(A) E(A) E(A) E(A) E(A)
+
Position embedding:E(0) E(1) E(2) E(3) E(4) E(5)
那现在的模型是没变,还是为:
input:[CLS] 我 爱 ** [SEP]
Token embedding:E([CLS]) E(我) E(爱) E(**) E([SEP])
+
Segment embedding:E(A) E(A) E(A) E(A) E(A)
+
Position embedding:E(0) E(1) E(2) E(3) E(4)

same corpus

MSRA 和 人民日报的数据 好像是一样的?

ext预训练数据集大小

感谢提供预训练模型!
想问一下,除了词数外,请问有没有ext预训练数据集的大小统计,包括GB和句子数,以及ext的数据集是否会开源。
谢谢。

thucnews验证集的准确率很低

本人在colab中跑thucnews的数据集时发现验证集的准确率只有0.1,用的google官方的预训练模型,参数如下:

python run_classifier.py
--task_name=thucnews
--do_train=true
--do_eval=true
--data_dir=data/cnews
--vocab_file=chinese_L-12_H-768_A-12/vocab.txt
--bert_config_file=chinese_L-12_H-768_A-12/bert_config.json
--init_checkpoint=chinese_L-12_H-768_A-12/bert_model.ckpt
--max_seq_length=128
--train_batch_size=32
--learning_rate=2e-5
--num_train_epochs=3.0
--output_dir=/tmp/thucnews_output/

不知是否方便提供下你们测试thucnews任务的code或参数,学习下,谢谢

求预训练代码

感谢提供如此强大的bert
但由于我想要在特定数据集上先预训练再对任务fine-tune,所以需要预训练代码,怕自己写的和你们预训练的不一致,请问可否提供代码?

ner评估是用的那个值

seqeval的评估值有micro avg和 macro avg,报告里写的是那个值?
precision recall f1-score support

   MISC       0.00      0.00      0.00         1
    PER       1.00      1.00      1.00         1

micro avg 0.50 0.50 0.50 2
macro avg 0.50 0.50 0.50 2

基于分词预训练中文Bert

模型训练也是基于和Bert相同的vocab.txt是吧?
是每次mask的时候,会先判断前后是否能组成一个词,将能组成词的字全都mask是吧?
我对nlp不太了解哈,我想问下如果是基于词来训练一个模型的话,是不是词典也应该是由词组成的呀?我理解目前mask的方法是不是只是多了mask的数量,可能相关的字会有影响,但是最后如果想要输出词向量的话,是不是还是基于字的呀?

如何移除训练用的变量

当继续进行预训练后,模型保存的checkpoint有1.2G左右,其中包含大量反向传播用的node,而在微调的时候是用不到这些变量的,如何去除这些node,让模型大小保持在400M左右。我只搜到了freeze_graph工具,但这样模型就不能继续训练了。想问下你们是怎么做的?谢谢!🙏

MRC任务loss降不下去

您好,我最近在跑一个中文阅读理解的任务,使用1e-5到5e-5的学习率尝试谷歌的bert和你的bert-wwm后均正常收敛,但是bert-wwm-ext并没有收敛的趋势,增加2到10倍学习率仍无法收敛,请问是什么原因

关于模型选择的疑问

您好,想问一下,如果我使用的中文数据已经脱敏映射为数字,并且是按照单个字进行了切分,例如:我爱共产党 ---->我/爱/共/产/党---->232 323 45 990 43。在这样的场景下,我应该用基于英文的bert模型还是用基于中文的bert模型呢

RoBERTa-wwm-ext, 这个模型的问题。

这个模型是否也是在原Bert字模型的基础上进行增量mask词的方式训练得到的呢?关于这种方式的预训练代码后期能开放么?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.