All Projects → ymcui → Chinese Xlnet

ymcui / Chinese Xlnet

Licence: apache-2.0
Pre-Trained Chinese XLNet(中文XLNet预训练模型)

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Chinese Xlnet

Causal Text Papers
Curated research at the intersection of causal inference and natural language processing.
Stars: ✭ 72 (-94.06%)
Mutual labels:  natural-language-processing
Course Computational Literary Analysis
Course materials for Introduction to Computational Literary Analysis, taught at UC Berkeley in Summer 2018, 2019, and 2020, and at Columbia University in Fall 2020.
Stars: ✭ 74 (-93.9%)
Mutual labels:  natural-language-processing
Nested Ner Tacl2020 Transformers
Implementation of Nested Named Entity Recognition using BERT
Stars: ✭ 76 (-93.73%)
Mutual labels:  natural-language-processing
Mt Dnn
Multi-Task Deep Neural Networks for Natural Language Understanding
Stars: ✭ 72 (-94.06%)
Mutual labels:  natural-language-processing
Senta
Baidu's open-source Sentiment Analysis System.
Stars: ✭ 1,187 (-2.14%)
Mutual labels:  natural-language-processing
Nlp Tutorial
Natural Language Processing Tutorial for Deep Learning Researchers
Stars: ✭ 9,895 (+715.75%)
Mutual labels:  natural-language-processing
Usaddress
🇺🇸 a python library for parsing unstructured address strings into address components
Stars: ✭ 1,165 (-3.96%)
Mutual labels:  natural-language-processing
Abigsurvey
A collection of 500+ survey papers on Natural Language Processing (NLP) and Machine Learning (ML)
Stars: ✭ 1,203 (-0.82%)
Mutual labels:  natural-language-processing
Nlp Tutorial
A list of NLP(Natural Language Processing) tutorials
Stars: ✭ 1,188 (-2.06%)
Mutual labels:  natural-language-processing
Awesome Bert Japanese
📝 A list of pre-trained BERT models for Japanese with word/subword tokenization + vocabulary construction algorithm information
Stars: ✭ 76 (-93.73%)
Mutual labels:  natural-language-processing
Absa Pytorch
Aspect Based Sentiment Analysis, PyTorch Implementations. 基于方面的情感分析,使用PyTorch实现。
Stars: ✭ 1,181 (-2.64%)
Mutual labels:  natural-language-processing
Python nlp tutorial
This repository provides everything to get started with Python for Text Mining / Natural Language Processing (NLP)
Stars: ✭ 72 (-94.06%)
Mutual labels:  natural-language-processing
Hunspell
The most popular spellchecking library.
Stars: ✭ 1,196 (-1.4%)
Mutual labels:  natural-language-processing
Man
Multinomial Adversarial Networks for Multi-Domain Text Classification (NAACL 2018)
Stars: ✭ 72 (-94.06%)
Mutual labels:  natural-language-processing
Monkeylearn Ruby
Official Ruby client for the MonkeyLearn API. Build and consume machine learning models for language processing from your Ruby apps.
Stars: ✭ 76 (-93.73%)
Mutual labels:  natural-language-processing
Estnltk
Open source tools for Estonian natural language processing
Stars: ✭ 71 (-94.15%)
Mutual labels:  natural-language-processing
Stminsights
A Shiny Application for Inspecting Structural Topic Models
Stars: ✭ 74 (-93.9%)
Mutual labels:  natural-language-processing
Multimodal Toolkit
Multimodal model for text and tabular data with HuggingFace transformers as building block for text data
Stars: ✭ 78 (-93.57%)
Mutual labels:  natural-language-processing
Dialogue Understanding
This repository contains PyTorch implementation for the baseline models from the paper Utterance-level Dialogue Understanding: An Empirical Study
Stars: ✭ 77 (-93.65%)
Mutual labels:  natural-language-processing
Rutermextract
Term extraction for Russian language
Stars: ✭ 75 (-93.82%)
Mutual labels:  natural-language-processing

中文说明 | English



GitHub

本项目提供了面向中文的XLNet预训练模型,旨在丰富中文自然语言处理资源,提供多元化的中文预训练模型选择。 我们欢迎各位专家学者下载使用,并共同促进和发展中文资源建设。

本项目基于CMU/谷歌官方的XLNet:https://github.com/zihangdai/xlnet

其他相关资源:

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

新闻

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/11 为了更好地了解需求,邀请您填写调查问卷,以便为大家提供更好的资源。

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

历史新闻 2019/12/19 本目录发布的模型已接入[Huggingface-Transformers](https://github.com/huggingface/transformers),查看[快速加载](#快速加载)

2019/9/5 XLNet-base已可下载,查看模型下载

2019/8/19 提供了在大规模通用语料(5.4B词数)上训练的中文XLNet-mid模型,查看模型下载

内容导引

章节 描述
模型下载 提供了中文预训练XLNet下载地址
基线系统效果 列举了部分基线系统效果
预训练细节 预训练细节的相关描述
下游任务微调细节 下游任务微调细节的相关描述
FAQ 常见问题答疑
引用 本目录的技术报告

模型下载

  • XLNet-mid:24-layer, 768-hidden, 12-heads, 209M parameters
  • XLNet-base:12-layer, 768-hidden, 12-heads, 117M parameters
模型简称 语料 Google下载 讯飞云下载
XLNet-mid, Chinese 中文维基+
通用数据[1]
TensorFlow
PyTorch
TensorFlow(密码68En)
XLNet-base, Chinese 中文维基+
通用数据[1]
TensorFlow
PyTorch
TensorFlow(密码uCpe)

[1] 通用数据包括:百科、新闻、问答等数据,总词数达5.4B,与我们发布的BERT-wwm-ext训练语料相同。

PyTorch版本

如需PyTorch版本,

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

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

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

使用说明

中国大陆境内建议使用讯飞云下载点,境外用户建议使用谷歌下载点,XLNet-mid模型文件大小约800M。 以TensorFlow版XLNet-mid, Chinese为例,下载完毕后对zip文件进行解压得到:

chinese_xlnet_mid_L-24_H-768_A-12.zip
    |- xlnet_model.ckpt      # 模型权重
    |- xlnet_model.meta      # 模型meta信息
    |- xlnet_model.index     # 模型index信息
    |- xlnet_config.json     # 模型参数
    |- spiece.model          # 词表

快速加载

依托于Huggingface-Transformers 2.2.2,可轻松调用以上模型。

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

其中MODEL_NAME对应列表如下:

模型名 MODEL_NAME
XLNet-mid hfl/chinese-xlnet-mid
XLNet-base hfl/chinese-xlnet-base

基线系统效果

为了对比基线效果,我们在以下几个中文数据集上进行了测试。对比了中文BERT、BERT-wwm、BERT-wwm-ext以及XLNet-base、XLNet-mid。 其中中文BERT、BERT-wwm、BERT-wwm-ext结果取自中文BERT-wwm项目。 时间及精力有限,并未能覆盖更多类别的任务,请大家自行尝试。

注意:为了保证结果的可靠性,对于同一模型,我们运行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)
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)
XLNet-base 65.2 (63.0) / 86.9 (85.9) 67.0 (65.8) / 87.2 (86.8) 25.0 (22.7) / 51.3 (49.5)
XLNet-mid 66.8 (66.3) / 88.4 (88.1) 69.3 (68.5) / 89.2 (88.8) 29.1 (27.1) / 55.8 (54.9)

繁体中文阅读理解:DRCD

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

模型 开发集 测试集
BERT 83.1 (82.7) / 89.9 (89.6) 82.2 (81.6) / 89.2 (88.8)
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)
XLNet-base 83.8 (83.2) / 92.3 (92.0) 83.5 (82.8) / 92.2 (91.8)
XLNet-mid 85.3 (84.9) / 93.5 (93.3) 85.5 (84.8) / 93.6 (93.2)

情感分类:ChnSentiCorp

在情感分类任务中,我们使用的是ChnSentiCorp数据集。模型需要将文本分成积极, 消极两个类别。 评测指标为:Accuracy

模型 开发集 测试集
BERT 94.7 (94.3) 95.0 (94.7)
BERT-wwm 95.1 (94.5) 95.4 (95.0)
XLNet-base
XLNet-mid 95.8 (95.2) 95.4 (94.9)

预训练细节

以下以XLNet-mid模型为例,对预训练细节进行说明。

生成词表

按照XLNet官方教程步骤,首先需要使用Sentence Piece生成词表。 在本项目中,我们使用的词表大小为32000,其余参数采用官方示例中的默认配置。

spm_train \
	--input=wiki.zh.txt \
	--model_prefix=sp10m.cased.v3 \
	--vocab_size=32000 \
	--character_coverage=0.99995 \
	--model_type=unigram \
	--control_symbols=\<cls\>,\<sep\>,\<pad\>,\<mask\>,\<eod\> \
	--user_defined_symbols=\<eop\>,.,\(,\),\",-,–,£,€ \
	--shuffle_input_sentence \
	--input_sentence_size=10000000

生成tf_records

生成词表后,开始利用原始文本语料生成训练用的tf_records文件。 原始文本的构造方式与原教程相同:

  • 每行都是一个句子
  • 空行代表文档末尾

以下是生成数据时的命令(num_tasktask请根据实际切片数量进行设置):

SAVE_DIR=./output_b32
INPUT=./data/*.proc.txt

python data_utils.py \
	--bsz_per_host=32 \
	--num_core_per_host=8 \
	--seq_len=512 \
	--reuse_len=256 \
	--input_glob=${INPUT} \
	--save_dir=${SAVE_DIR} \
	--num_passes=20 \
	--bi_data=True \
	--sp_path=spiece.model \
	--mask_alpha=6 \
	--mask_beta=1 \
	--num_predict=85 \
	--uncased=False \
	--num_task=10 \
	--task=1

预训练

获得以上数据后,正式开始预训练XLNet。 之所以叫XLNet-mid是因为仅相比XLNet-base增加了层数(12层增加到24层),其余参数没有变动,主要因为计算设备受限。 使用的命令如下:

DATA=YOUR_GS_BUCKET_PATH_TO_TFRECORDS
MODEL_DIR=YOUR_OUTPUT_MODEL_PATH
TPU_NAME=v3-xlnet
TPU_ZONE=us-central1-b

python train.py \
	--record_info_dir=$DATA \
	--model_dir=$MODEL_DIR \
	--train_batch_size=32 \
	--seq_len=512 \
	--reuse_len=256 \
	--mem_len=384 \
	--perm_size=256 \
	--n_layer=24 \
	--d_model=768 \
	--d_embed=768 \
	--n_head=12 \
	--d_head=64 \
	--d_inner=3072 \
	--untie_r=True \
	--mask_alpha=6 \
	--mask_beta=1 \
	--num_predict=85 \
	--uncased=False \
	--train_steps=2000000 \
	--save_steps=20000 \
	--warmup_steps=20000 \
	--max_save=20 \
	--weight_decay=0.01 \
	--adam_epsilon=1e-6 \
	--learning_rate=1e-4 \
	--dropout=0.1 \
	--dropatt=0.1 \
	--tpu=$TPU_NAME \
	--tpu_zone=$TPU_ZONE \
	--use_tpu=True

下游任务微调细节

下游任务微调使用的设备是谷歌Cloud TPU v2(64G HBM),以下简要说明各任务精调时的配置。 如果你使用GPU进行精调,请更改相应参数以适配,尤其是batch_size, learning_rate等参数。 相关代码请查看src目录。

CMRC 2018

对于阅读理解任务,首先需要生成tf_records数据。 请参考XLNet官方教程之SQuAD 2.0处理方法,在这里不再赘述。 以下是CMRC 2018中文机器阅读理解任务中使用的脚本参数:

XLNET_DIR=YOUR_GS_BUCKET_PATH_TO_XLNET
MODEL_DIR=YOUR_OUTPUT_MODEL_PATH
DATA_DIR=YOUR_DATA_DIR_TO_TFRECORDS
RAW_DIR=YOUR_RAW_DATA_DIR
TPU_NAME=v2-xlnet
TPU_ZONE=us-central1-b

python -u run_cmrc_drcd.py \
	--spiece_model_file=./spiece.model \
	--model_config_path=${XLNET_DIR}/xlnet_config.json \
	--init_checkpoint=${XLNET_DIR}/xlnet_model.ckpt \
	--tpu_zone=${TPU_ZONE} \
	--use_tpu=True \
	--tpu=${TPU_NAME} \
	--num_hosts=1 \
	--num_core_per_host=8 \
	--output_dir=${DATA_DIR} \
	--model_dir=${MODEL_DIR} \
	--predict_dir=${MODEL_DIR}/eval \
	--train_file=${DATA_DIR}/cmrc2018_train.json \
	--predict_file=${DATA_DIR}/cmrc2018_dev.json \
	--uncased=False \
	--max_answer_length=40 \
	--max_seq_length=512 \
	--do_train=True \
	--train_batch_size=16 \
	--do_predict=True \
	--predict_batch_size=16 \
	--learning_rate=3e-5 \
	--adam_epsilon=1e-6 \
	--iterations=1000 \
	--save_steps=2000 \
	--train_steps=2400 \
	--warmup_steps=240

DRCD

以下是DRCD繁体中文机器阅读理解任务中使用的脚本参数:

XLNET_DIR=YOUR_GS_BUCKET_PATH_TO_XLNET
MODEL_DIR=YOUR_OUTPUT_MODEL_PATH
DATA_DIR=YOUR_DATA_DIR_TO_TFRECORDS
RAW_DIR=YOUR_RAW_DATA_DIR
TPU_NAME=v2-xlnet
TPU_ZONE=us-central1-b

python -u run_cmrc_drcd.py \
	--spiece_model_file=./spiece.model \
	--model_config_path=${XLNET_DIR}/xlnet_config.json \
	--init_checkpoint=${XLNET_DIR}/xlnet_model.ckpt \
	--tpu_zone=${TPU_ZONE} \
	--use_tpu=True \
	--tpu=${TPU_NAME} \
	--num_hosts=1 \
	--num_core_per_host=8 \
	--output_dir=${DATA_DIR} \
	--model_dir=${MODEL_DIR} \
	--predict_dir=${MODEL_DIR}/eval \
	--train_file=${DATA_DIR}/DRCD_training.json \
	--predict_file=${DATA_DIR}/DRCD_dev.json \
	--uncased=False \
	--max_answer_length=30 \
	--max_seq_length=512 \
	--do_train=True \
	--train_batch_size=16 \
	--do_predict=True \
	--predict_batch_size=16 \
	--learning_rate=3e-5 \
	--adam_epsilon=1e-6 \
	--iterations=1000 \
	--save_steps=2000 \
	--train_steps=3600 \
	--warmup_steps=360

ChnSentiCorp

与阅读理解任务不同,分类任务无需提前生成tf_records。 以下是ChnSentiCorp情感分类任务中使用的脚本参数:

XLNET_DIR=YOUR_GS_BUCKET_PATH_TO_XLNET
MODEL_DIR=YOUR_OUTPUT_MODEL_PATH
DATA_DIR=YOUR_DATA_DIR_TO_TFRECORDS
RAW_DIR=YOUR_RAW_DATA_DIR
TPU_NAME=v2-xlnet
TPU_ZONE=us-central1-b

python -u run_classifier.py \
	--spiece_model_file=./spiece.model \
	--model_config_path=${XLNET_DIR}/xlnet_config.json \
	--init_checkpoint=${XLNET_DIR}/xlnet_model.ckpt \
	--task_name=csc \
	--do_train=True \
	--do_eval=True \
	--eval_all_ckpt=False \
	--uncased=False \
	--data_dir=${RAW_DIR} \
	--output_dir=${DATA_DIR} \
	--model_dir=${MODEL_DIR} \
	--train_batch_size=48 \
	--eval_batch_size=48 \
	--num_hosts=1 \
	--num_core_per_host=8 \
	--num_train_epochs=3 \
	--max_seq_length=256 \
	--learning_rate=2e-5 \
	--save_steps=5000 \
	--use_tpu=True \
	--tpu=${TPU_NAME} \
	--tpu_zone=${TPU_ZONE}

FAQ

Q: 会发布更大的模型吗?
A: 不一定,不保证。如果我们获得了显著性能提升,会考虑发布出来。

Q: 在某些数据集上效果不好?
A: 选用其他模型或者在这个checkpoint上继续用你的数据做预训练。

Q: 预训练数据会发布吗?
A: 抱歉,因为版权问题无法发布。

Q: 训练XLNet花了多长时间?
A: XLNet-mid使用了Cloud TPU v3 (128G HBM)训练了2M steps(batch=32),大约需要3周时间。XLNet-base则是训练了4M steps。

Q: 为什么XLNet官方没有发布Multilingual或者Chinese XLNet?
A: (以下是个人看法)不得而知,很多人留言表示希望有,戳XLNet-issue-#3。 以XLNet官方的技术和算力来说,训练一个这样的模型并非难事(multilingual版可能比较复杂,需要考虑各语种之间的平衡,也可以参考multilingual-bert中的描述。)。 不过反过来想一下,作者们也并没有义务一定要这么做。 作为学者来说,他们的technical contribution已经足够,不发布出来也不应受到指责,呼吁大家理性对待别人的工作。

Q: XLNet多数情况下比BERT要好吗?
A: 目前看来至少上述几个任务效果都还不错,使用的数据和我们发布的BERT-wwm-ext是一样的。

Q: ?
A: 。

引用

如果本目录中的内容对你的研究工作有所帮助,欢迎在论文中引用下述技术报告: https://arxiv.org/abs/2004.13922

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

致谢

项目作者: 崔一鸣(哈工大讯飞联合实验室)、车万翔(哈工大)、刘挺(哈工大)、王士进(科大讯飞)、胡国平(科大讯飞)

本项目受到谷歌TensorFlow Research Cloud (TFRC)计划资助。

建设该项目过程中参考了如下仓库,在这里表示感谢:

免责声明

本项目并非XLNet官方发布的Chinese XLNet模型。 同时,本项目不是哈工大或科大讯飞的官方产品。 该项目中的内容仅供技术研究参考,不作为任何结论性依据。 使用者可以在许可证范围内任意使用该模型,但我们不对因使用该项目内容造成的直接或间接损失负责。

关注我们

欢迎关注哈工大讯飞联合实验室官方微信公众号。

qrcode.png

问题反馈 & 贡献

如有问题,请在GitHub Issue中提交。
我们没有运营,鼓励网友互相帮助解决问题。
如果发现实现上的问题或愿意共同建设该项目,请提交Pull Request。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].