Home

Awesome

中文说明 | English

<p align="center"> <br> <img src="./pics/banner.png" width="500"/> <br> </p> <p align="center"> <a href="https://github.com/ymcui/Chinese-ELECTRA/blob/master/LICENSE"> <img alt="GitHub" src="https://img.shields.io/github/license/ymcui/Chinese-ELECTRA.svg?color=blue&style=flat-square"> </a> </p> 谷歌与斯坦福大学共同研发的最新预训练模型ELECTRA因其小巧的模型体积以及良好的模型性能受到了广泛关注。 为了进一步促进中文预训练模型技术的研究与发展,哈工大讯飞联合实验室基于官方ELECTRA训练代码以及大规模的中文数据训练出中文ELECTRA预训练模型供大家下载使用。 其中ELECTRA-small模型可与BERT-base甚至其他同等规模的模型相媲美,而参数量仅为BERT-base的1/10。

本项目基于谷歌&斯坦福大学官方的ELECTRA:https://github.com/google-research/electra


中文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

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

2020/12/13 基于大规模法律文书数据,我们训练了面向司法领域的中文ELECTRA系列模型,查看模型下载司法任务效果

<details> <summary>点击这里查看历史新闻</summary> 2020/10/22 ELECTRA-180g已发布,增加了CommonCrawl的高质量数据,查看[模型下载](#模型下载)。

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

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

2020/5/29 Chinese ELECTRA-large/small-ex已发布,请查看模型下载,目前只提供Google Drive下载地址,敬请谅解。

2020/4/7 PyTorch用户可通过🤗Transformers加载模型,查看快速加载

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

2020/3/25 Chinese ELECTRA-small/base已发布,请查看模型下载

</details>

内容导引

章节描述
简介介绍ELECTRA基本原理
模型下载中文ELECTRA预训练模型下载
快速加载介绍了如何使用🤗TransformersPaddleHub快速加载模型
基线系统效果中文基线系统效果:阅读理解、文本分类等
使用方法模型的详细使用方法
FAQ常见问题答疑
引用本目录的技术报告

简介

ELECTRA提出了一套新的预训练框架,其中包括两个部分:GeneratorDiscriminator

在预训练阶段结束之后,我们只使用Discriminator作为下游任务精调的基模型。

更详细的内容请查阅ELECTRA论文:ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators

模型下载

本目录中包含以下模型,目前仅提供TensorFlow版本权重。

大语料版(新版,180G数据)

模型简称Google下载百度网盘下载压缩包大小
ELECTRA-180g-large, ChineseTensorFlowTensorFlow(密码2v5r)1G
ELECTRA-180g-base, ChineseTensorFlowTensorFlow(密码3vg1)383M
ELECTRA-180g-small-ex, ChineseTensorFlowTensorFlow(密码93n8)92M
ELECTRA-180g-small, ChineseTensorFlowTensorFlow(密码k9iu)46M

基础版(原版,20G数据)

模型简称Google下载百度网盘下载压缩包大小
ELECTRA-large, ChineseTensorFlowTensorFlow(密码1e14)1G
ELECTRA-base, ChineseTensorFlowTensorFlow(密码f32j)383M
ELECTRA-small-ex, ChineseTensorFlowTensorFlow(密码gfb1)92M
ELECTRA-small, ChineseTensorFlowTensorFlow(密码1r4r)46M

司法领域版(new)

模型简称Google下载百度网盘下载压缩包大小
legal-ELECTRA-large, ChineseTensorFlowTensorFlow(密码q4gv)1G
legal-ELECTRA-base, ChineseTensorFlowTensorFlow(密码8gcv)383M
legal-ELECTRA-small, ChineseTensorFlowTensorFlow(密码kmrj)46M

PyTorch/TF2版本

如需PyTorch版本,请自行通过🤗Transformers提供的转换脚本convert_electra_original_tf_checkpoint_to_pytorch.py进行转换。如需配置文件可进入到本目录下的config文件夹中查找。

python transformers/src/transformers/convert_electra_original_tf_checkpoint_to_pytorch.py \
--tf_checkpoint_path ./path-to-large-model/ \
--config_file ./path-to-large-model/discriminator.json \
--pytorch_dump_path ./path-to-output/model.bin \
--discriminator_or_generator discriminator

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

方法:点击任意需要下载的model → 拉到最下方点击"List all files in model" → 在弹出的小框中下载bin和json文件。

使用须知

中国大陆境内建议使用百度网盘下载点,境外用户建议使用谷歌下载点。 以TensorFlow版ELECTRA-small, Chinese为例,下载完毕后对zip文件进行解压得到如下文件。

chinese_electra_small_L-12_H-256_A-4.zip
    |- electra_small.data-00000-of-00001    # 模型权重
    |- electra_small.meta                   # 模型meta信息
    |- electra_small.index                  # 模型index信息
    |- vocab.txt                            # 词表
    |- discriminator.json                   # 配置文件:discriminator(若没有可从本repo中的config目录获取)
    |- generator.json                       # 配置文件:generator(若没有可从本repo中的config目录获取)

训练细节

我们采用了大规模中文维基以及通用文本训练了ELECTRA模型,总token数达到5.4B,与RoBERTa-wwm-ext系列模型一致。词表方面沿用了谷歌原版BERT的WordPiece词表,包含21,128个token。其他细节和超参数如下(未提及的参数保持默认):

快速加载

使用Huggingface-Transformers

Huggingface-Transformers 2.8.0版本已正式支持ELECTRA模型,可通过如下命令调用。

tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModel.from_pretrained(MODEL_NAME) 

其中MODEL_NAME对应列表如下:

模型名组件MODEL_NAME
ELECTRA-180g-large, Chinesediscriminatorhfl/chinese-electra-180g-large-discriminator
ELECTRA-180g-large, Chinesegeneratorhfl/chinese-electra-180g-large-generator
ELECTRA-180g-base, Chinesediscriminatorhfl/chinese-electra-180g-base-discriminator
ELECTRA-180g-base, Chinesegeneratorhfl/chinese-electra-180g-base-generator
ELECTRA-180g-small-ex, Chinesediscriminatorhfl/chinese-electra-180g-small-ex-discriminator
ELECTRA-180g-small-ex, Chinesegeneratorhfl/chinese-electra-180g-small-ex-generator
ELECTRA-180g-small, Chinesediscriminatorhfl/chinese-electra-180g-small-discriminator
ELECTRA-180g-small, Chinesegeneratorhfl/chinese-electra-180g-small-generator
ELECTRA-large, Chinesediscriminatorhfl/chinese-electra-large-discriminator
ELECTRA-large, Chinesegeneratorhfl/chinese-electra-large-generator
ELECTRA-base, Chinesediscriminatorhfl/chinese-electra-base-discriminator
ELECTRA-base, Chinesegeneratorhfl/chinese-electra-base-generator
ELECTRA-small-ex, Chinesediscriminatorhfl/chinese-electra-small-ex-discriminator
ELECTRA-small-ex, Chinesegeneratorhfl/chinese-electra-small-ex-generator
ELECTRA-small, Chinesediscriminatorhfl/chinese-electra-small-discriminator
ELECTRA-small, Chinesegeneratorhfl/chinese-electra-small-generator

司法领域版本:

模型名组件MODEL_NAME
legal-ELECTRA-large, Chinesediscriminatorhfl/chinese-legal-electra-large-discriminator
legal-ELECTRA-large, Chinesegeneratorhfl/chinese-legal-electra-large-generator
legal-ELECTRA-base, Chinesediscriminatorhfl/chinese-legal-electra-base-discriminator
legal-ELECTRA-base, Chinesegeneratorhfl/chinese-legal-electra-base-generator
legal-ELECTRA-small, Chinesediscriminatorhfl/chinese-legal-electra-small-discriminator
legal-ELECTRA-small, Chinesegeneratorhfl/chinese-legal-electra-small-generator

使用PaddleHub

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

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

其中MODULE_NAME对应列表如下:

模型名MODULE_NAME
ELECTRA-base, Chinesechinese-electra-base
ELECTRA-small, Chinesechinese-electra-small

基线系统效果

我们将ELECTRA-small/baseBERT-baseBERT-wwmBERT-wwm-extRoBERTa-wwm-extRBT3进行了效果对比,包括以下六个任务:

对于ELECTRA-small/base模型,我们使用原论文默认的3e-41e-4的学习率。 需要注意的是,我们没有针对任何任务进行参数精调,所以通过调整学习率等超参数可能获得进一步性能提升。 为了保证结果的可靠性,对于同一模型,我们使用不同随机种子训练10遍,汇报模型性能的最大值和平均值(括号内为平均值)。

简体中文阅读理解:CMRC 2018

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

模型开发集测试集挑战集参数量
BERT-base65.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-wwm66.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-ext67.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-ext67.4 (66.5) / 87.2 (86.5)72.6 (71.4) / 89.4 (88.8)26.2 (24.6) / 51.0 (49.1)102M
RBT357.0 / 79.062.2 / 81.814.7 / 36.238M
ELECTRA-small63.4 (62.9) / 80.8 (80.2)67.8 (67.4) / 83.4 (83.0)16.3 (15.4) / 37.2 (35.8)12M
ELECTRA-180g-small63.8 / 82.768.5 / 85.215.1 / 35.812M
ELECTRA-small-ex66.4 / 82.271.3 / 85.318.1 / 38.325M
ELECTRA-180g-small-ex68.1 / 85.171.8 / 87.220.6 / 41.725M
ELECTRA-base68.4 (68.0) / 84.8 (84.6)73.1 (72.7) / 87.1 (86.9)22.6 (21.7) / 45.0 (43.8)102M
ELECTRA-180g-base69.3 / 87.073.1 / 88.624.0 / 48.6102M
ELECTRA-large69.1 / 85.273.9 / 87.123.0 / 44.2324M
ELECTRA-180g-large68.5 / 86.273.5 / 88.521.8 / 42.9324M

繁体中文阅读理解:DRCD

DRCD数据集由中国台湾台达研究院发布,其形式与SQuAD相同,是基于繁体中文的抽取式阅读理解数据集。 评价指标为:EM / F1

模型开发集测试集参数量
BERT-base83.1 (82.7) / 89.9 (89.6)82.2 (81.6) / 89.2 (88.8)102M
BERT-wwm84.3 (83.4) / 90.5 (90.2)82.8 (81.8) / 89.7 (89.0)102M
BERT-wwm-ext85.0 (84.5) / 91.2 (90.9)83.6 (83.0) / 90.4 (89.9)102M
RoBERTa-wwm-ext86.6 (85.9) / 92.5 (92.2)85.6 (85.2) / 92.0 (91.7)102M
RBT376.3 / 84.975.0 / 83.938M
ELECTRA-small79.8 (79.4) / 86.7 (86.4)79.0 (78.5) / 85.8 (85.6)12M
ELECTRA-180g-small83.5 / 89.282.9 / 88.712M
ELECTRA-small-ex84.0 / 89.583.3 / 89.125M
ELECTRA-180g-small-ex87.3 / 92.386.5 / 91.325M
ELECTRA-base87.5 (87.0) / 92.5 (92.3)86.9 (86.6) / 91.8 (91.7)102M
ELECTRA-180g-base89.6 / 94.288.9 / 93.7102M
ELECTRA-large88.8 / 93.388.8 / 93.6324M
ELECTRA-180g-large90.1 / 94.890.5 / 94.7324M

自然语言推断:XNLI

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

模型开发集测试集参数量
BERT-base77.8 (77.4)77.8 (77.5)102M
BERT-wwm79.0 (78.4)78.2 (78.0)102M
BERT-wwm-ext79.4 (78.6)78.7 (78.3)102M
RoBERTa-wwm-ext80.0 (79.2)78.8 (78.3)102M
RBT372.272.338M
ELECTRA-small73.3 (72.5)73.1 (72.6)12M
ELECTRA-180g-small74.674.612M
ELECTRA-small-ex75.475.825M
ELECTRA-180g-small-ex76.576.625M
ELECTRA-base77.9 (77.0)78.4 (77.8)102M
ELECTRA-180g-base79.679.5102M
ELECTRA-large81.581.0324M
ELECTRA-180g-large81.280.4324M

情感分析:ChnSentiCorp

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

模型开发集测试集参数量
BERT-base94.7 (94.3)95.0 (94.7)102M
BERT-wwm95.1 (94.5)95.4 (95.0)102M
BERT-wwm-ext95.4 (94.6)95.3 (94.7)102M
RoBERTa-wwm-ext95.0 (94.6)95.6 (94.8)102M
RBT392.892.838M
ELECTRA-small92.8 (92.5)94.3 (93.5)12M
ELECTRA-180g-small94.193.612M
ELECTRA-small-ex92.693.625M
ELECTRA-180g-small-ex92.893.425M
ELECTRA-base93.8 (93.0)94.5 (93.5)102M
ELECTRA-180g-base94.394.8102M
ELECTRA-large95.295.3324M
ELECTRA-180g-large94.895.2324M

句对分类:LCQMC

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

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

模型开发集测试集参数量
BERT89.4 (88.4)86.9 (86.4)102M
BERT-wwm89.4 (89.2)87.0 (86.8)102M
BERT-wwm-ext89.6 (89.2)87.1 (86.6)102M
RoBERTa-wwm-ext89.0 (88.7)86.4 (86.1)102M
RBT385.385.138M
ELECTRA-small86.7 (86.3)85.9 (85.6)12M
ELECTRA-180g-small86.685.812M
ELECTRA-small-ex87.586.025M
ELECTRA-180g-small-ex87.686.325M
ELECTRA-base90.2 (89.8)87.6 (87.3)102M
ELECTRA-180g-base90.287.1102M
ELECTRA-large90.787.3324M
ELECTRA-180g-large90.387.3324M

句对分类:BQ Corpus

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

模型开发集测试集参数量
BERT86.0 (85.5)84.8 (84.6)102M
BERT-wwm86.1 (85.6)85.2 (84.9)102M
BERT-wwm-ext86.4 (85.5)85.3 (84.8)102M
RoBERTa-wwm-ext86.0 (85.4)85.0 (84.6)102M
RBT384.183.338M
ELECTRA-small83.5 (83.0)82.0 (81.7)12M
ELECTRA-180g-small83.382.112M
ELECTRA-small-ex84.082.625M
ELECTRA-180g-small-ex84.683.425M
ELECTRA-base84.8 (84.7)84.5 (84.0)102M
ELECTRA-180g-base85.884.5102M
ELECTRA-large86.785.1324M
ELECTRA-180g-large86.485.4324M

司法任务效果

我们使用CAIL 2018司法评测的罪名预测数据对司法ELECTRA进行了测试。small/base/large学习率分别为:5e-4/3e-4/1e-4。 评价指标为:Accuracy

模型开发集测试集参数量
ELECTRA-small78.8476.3512M
legal-ELECTRA-small79.6077.0312M
ELECTRA-base80.9478.41102M
legal-ELECTRA-base81.7179.17102M
ELECTRA-large81.5378.97324M
legal-ELECTRA-large82.6079.89324M

使用方法

用户可以基于已发布的上述中文ELECTRA预训练模型进行下游任务精调。 在这里我们只介绍最基本的用法,更详细的用法请参考ELECTRA官方介绍

本例中,我们使用ELECTRA-small模型在CMRC 2018任务上进行精调,相关步骤如下。假设,

第一步:下载预训练模型并解压

模型下载章节中,下载ELECTRA-small模型,并解压至${data-dir}/models/${model-name}。 该目录下应包含electra_model.*vocab.txtcheckpoint,共计5个文件。

第二步:准备任务数据

下载CMRC 2018训练集和开发集,并重命名为train.jsondev.json。 将两个文件放到${data-dir}/finetuning_data/${task-name}

第三步:运行训练命令

python run_finetuning.py \
    --data-dir ${data-dir} \
    --model-name ${model-name} \
    --hparams params_cmrc2018.json

其中data-dirmodel-name在上面已经介绍。hparams是一个JSON词典,在本例中的params_cmrc2018.json包含了精调相关超参数,例如:

{
    "task_names": ["cmrc2018"],
    "max_seq_length": 512,
    "vocab_size": 21128,
    "model_size": "small",
    "do_train": true,
    "do_eval": true,
    "write_test_outputs": true,
    "num_train_epochs": 2,
    "learning_rate": 3e-4,
    "train_batch_size": 32,
    "eval_batch_size": 32,
}

在上述JSON文件中,我们只列举了最重要的一些参数,完整参数列表请查阅configure_finetuning.py

运行完毕后,

  1. 对于阅读理解任务,生成的预测JSON数据cmrc2018_dev_preds.json保存在${data-dir}/results/${task-name}_qa/。可以调用外部评测脚本来得到最终评测结果,例如:python cmrc2018_drcd_evaluate.py dev.json cmrc2018_dev_preds.json
  2. 对于分类任务,相关accuracy信息会直接打印在屏幕,例如:xnli: accuracy: 72.5 - loss: 0.67

FAQ

Q: 在下游任务精调的时候ELECTRA模型的学习率怎么设置?
A: 我们建议使用原论文使用的学习率作为初始基线(small是3e-4,base是1e-4)然后适当增减学习率进行调试。 需要注意的是,相比BERT、RoBERTa一类的模型来说ELECTRA的学习率要相对大一些。

Q: 有没有PyTorch版权重?
A: 有,模型下载

Q: 预训练用的数据能共享一下吗?
A: 很遗憾,不可以。

Q: 未来计划?
A: 敬请关注。

引用

如果本目录中的内容对你的研究工作有所帮助,欢迎在论文中引用下述论文。

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

关注我们

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

qrcode.png

问题反馈

Before you submit an issue: