中文說明| English

本項目提供了面向中文的XLNet預訓練模型,旨在豐富中文自然語言處理資源,提供多元化的中文預訓練模型選擇。 我們歡迎各位專家學者下載使用,並共同促進和發展中文資源建設。
本項目基於CMU/谷歌官方的XLNet:https://github.com/zihangdai/xlnet
中文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多位學者撰寫的《自然語言處理:基於預訓練模型的方法》已出版,歡迎大家選購。
2021/1/27 所有模型已支持TensorFlow 2,請通過transformers庫進行調用或下載。 https://huggingface.co/hfl
2020/8/27 哈工大訊飛聯合實驗室在通用自然語言理解評測GLUE中榮登榜首,查看GLUE榜單,新聞。
2020/3/11 為了更好地了解需求,邀請您填寫調查問卷,以便為大家提供更好的資源。
2020/2/26 哈工大訊飛聯合實驗室發布知識蒸餾工具TextBrewer
2019/12/19 本目錄發布的模型已接入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 parametersXLNet-base :12-layer, 768-hidden, 12-heads, 117M parameters| 模型簡稱 | 語料 | Google下載 | 百度網盤下載 |
|---|---|---|---|
XLNet-mid, Chinese | 中文維基+ 通用數據[1] | TensorFlow PyTorch | TensorFlow(密碼2jv2) |
XLNet-base, Chinese | 中文維基+ 通用數據[1] | TensorFlow PyTorch | TensorFlow(密碼ge7w) |
[1] 通用數據包括:百科、新聞、問答等數據,總詞數達5.4B,與我們發布的BERT-wwm-ext訓練語料相同。
如需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數據集**是哈工大訊飛聯合實驗室發布的中文機器閱讀理解數據。 根據給定問題,系統需要從篇章中抽取出片段作為答案,形式與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數據集**由中國台灣台達研究院發布,其形式與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數據集。模型需要將文本分成积极,消极兩個類別。 評測指標為: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文件。 原始文本的構造方式與原教程相同:
以下是生成數據時的命令( num_task與task請根據實際切片數量進行設置):
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目錄。
對於閱讀理解任務,首先需要生成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繁體中文機器閱讀理解任務中使用的腳本參數:
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
與閱讀理解任務不同,分類任務無需提前生成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}
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模型。 同時,本項目不是哈工大或科大訊飛的官方產品。 該項目中的內容僅供技術研究參考,不作為任何結論性依據。 使用者可以在許可證範圍內任意使用該模型,但我們不對因使用該項目內容造成的直接或間接損失負責。
歡迎關注哈工大訊飛聯合實驗室官方微信公眾號。

如有問題,請在GitHub Issue中提交。
我們沒有運營,鼓勵網友互相幫助解決問題。
如果發現實現上的問題或願意共同建設該項目,請提交Pull Request。