英文|中文
預訓練已成為 NLP 任務的重要組成部分。 UER-py(通用編碼器表示)是一個用於通用領域語料庫預訓練和下游任務微調的工具包。 UER-py 保持模型模組化並支持研究可擴展性。它方便了現有預訓練模型的使用,並為使用者提供了進一步擴展的介面。使用 UER-py,我們建立了一個模型動物園,其中包含具有不同屬性的預訓練模型。有關完整文檔,請參閱 UER-py 項目 Wiki 。
我們開源了UER-py的重構新版本TencentPretrain。 TencentPretrain支援多模態模型,能夠訓練大型模型。如果您對中等大小的文字模型(參數大小小於 10 億)感興趣,我們建議繼續使用 UER-py 項目。
UER-py具有以下特點:
本節透過幾個常用的例子來示範如何使用UER-py。更多細節將在說明部分討論。我們首先在書評情緒分類資料集上使用 BERT(文字預訓練模型)。我們在書評語料庫上預先訓練模型,然後在書評情緒分類資料集上微調。共有三個輸入檔:書評語料庫、書評情緒分類資料集和詞彙表。所有文件均以 UTF-8 編碼並包含在該項目中。
BERT的語料格式如下(每行一個句子,文檔之間以空行分隔):
doc1-sent1
doc1-sent2
doc1-sent3
doc2-sent1
doc3-sent1
doc3-sent2
書評語料庫是從書評分類資料集中獲得的。我們刪除標籤並將評論從中間分成兩部分,以建立一個包含兩個句子的文件(請參閱語料庫資料夾中的book_review_bert.txt )。
分類資料集的格式如下:
label text_a
1 instance1
0 instance2
1 instance3
標籤和實例由 t 分隔。第一行是列名稱清單。對於 n 路分類,標籤 ID 應為 0 和 n-1 之間(含)之間的整數。
我們使用Google的中文詞彙檔案models/google_zh_vocab.txt ,其中包含21128個漢字。
我們先對書評語料庫進行預處理。在預處理階段,需要將語料處理成指定預訓練模型( --data_processor )所需的格式:
python3 preprocess.py --corpus_path corpora/book_review_bert.txt --vocab_path models/google_zh_vocab.txt
--dataset_path dataset.pt --processes_num 8 --data_processor bert
請注意,需要6>=1.12.0 。
預處理非常耗時。使用多個進程可以大幅加快預處理速度( --processes_num )。預設使用 BERT 分詞器 ( --tokenizer bert )。預處理後,原始文字被轉換為dataset.pt ,這是pretrain.py的輸入。然後我們下載Google預先訓練的中文BERT模型google_zh_model.bin (UER格式,原始模型來自這裡),並將其放在models資料夾中。我們載入預先訓練的中文 BERT 模型,並在書評語料庫上進一步對其進行預訓練。預訓練模型通常由嵌入層、編碼器層和目標層組成。為了建立預訓練模型,我們應該提供相關資訊。設定檔( --config_path )指定預訓練模型使用的模組和超參數。更多詳細資訊可以在models/bert/base_config.json中找到。假設我們有一台有 8 個 GPU 的機器:
python3 pretrain.py --dataset_path dataset.pt --vocab_path models/google_zh_vocab.txt
--pretrained_model_path models/google_zh_model.bin
--config_path models/bert/base_config.json
--output_model_path models/book_review_model.bin
--world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7
--total_steps 5000 --save_checkpoint_steps 1000 --batch_size 32
mv models/book_review_model.bin-5000 models/book_review_model.bin
請注意,由pretrain.py訓練的模型帶有記錄訓練步驟的後綴 ( --total_steps )。我們可以刪除後綴以方便使用。
然後我們在下游分類資料集上微調預訓練模型。我們使用book_review_model.bin的嵌入層和編碼器層,它是pretrain.py的輸出:
python3 finetune/run_classifier.py --pretrained_model_path models/book_review_model.bin
--vocab_path models/google_zh_vocab.txt
--config_path models/bert/base_config.json
--train_path datasets/book_review/train.tsv
--dev_path datasets/book_review/dev.tsv
--test_path datasets/book_review/test.tsv
--epochs_num 3 --batch_size 32
微調分類器模型的預設路徑是models/finetuned_model.bin 。值得注意的是,預訓練的實際批次大小為--batch_size乘以--world_size ;下游任務(例如分類)的實際批次大小為--batch_size 。然後我們用微調後的模型來推理。
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin
--vocab_path models/google_zh_vocab.txt
--config_path models/bert/base_config.json
--test_path datasets/book_review/test_nolabel.tsv
--prediction_path datasets/book_review/prediction.tsv
--labels_num 2
--test_path指定要預測的檔案的路徑。該文件應包含 text_a 列。 --prediction_path指定預測結果檔案的路徑。我們需要透過--labels_num明確指定標籤的數量。上述資料集是一個雙向分類資料集。
以上內容提供了使用UER-py進行預處理、預訓練、微調和推理的基本方法。更多用例可以在完整的➡️快速入門⬅️中找到。完整的快速入門包含豐富的用例,涵蓋了大部分預先訓練相關的應用場景。建議使用者閱讀完整的快速入門,以便合理使用該項目。
本部分提供一系列 ➡️預訓練資料⬅️ 的連結。 UER可以直接載入這些預訓練資料。
本部分提供一系列➡️下游資料集⬅️的連結。 UER可以直接載入這些資料集。
在UER的幫助下,我們預先訓練了不同屬性的模型(例如基於不同語料庫、編碼器和目標的模型)。預訓練模型的詳細介紹及其下載連結可以在➡️modelzoo⬅️找到。所有預先訓練的模型都可以由UER直接載入。
UER-py的組織方式如下:
UER-py/
|--uer/
| |--embeddings/ # contains modules of embedding component
| |--encoders/ # contains modules of encoder component such as RNN, CNN, Transformer
| |--decoders/ # contains modules of decoder component
| |--targets/ # contains modules of target component such as language modeling, masked language modeling
| |--layers/ # contains frequently-used NN layers
| |--models/ # contains model.py, which combines modules of different components
| |--utils/ # contains frequently-used utilities
| |--model_builder.py
| |--model_loader.py
| |--model_saver.py
| |--opts.py
| |--trainer.py
|
|--corpora/ # contains pre-training data
|--datasets/ # contains downstream tasks
|--models/ # contains pre-trained models, vocabularies, and configuration files
|--scripts/ # contains useful scripts for pre-training models
|--finetune/ # contains fine-tuning scripts for downstream tasks
|--inference/ # contains inference scripts for downstream tasks
|
|--preprocess.py
|--pretrain.py
|--README.md
|--README_ZH.md
|--requirements.txt
|--LICENSE
程式碼是根據元件(例如嵌入、編碼器)進行組織的。用戶可以毫不費力地使用和擴展它。
使用 UER 的綜合範例可以在➡️說明⬅️中找到,幫助使用者快速實現 BERT、GPT-2、ELMo、T5 等預訓練模型,並在一系列下游任務上對預訓練模型進行微調。
UER-py已被用於許多NLP競賽的獲勝解決方案。在本節中,我們提供了一些使用 UER-py 在 NLP 競賽(例如 CLUE)上取得 SOTA 結果的範例。更多詳細資訊請參閱➡️競賽解決方案⬅️。
@article{zhao2019uer,
title={UER: An Open-Source Toolkit for Pre-training Models},
author={Zhao, Zhe and Chen, Hui and Zhang, Jinbin and Zhao, Xin and Liu, Tao and Lu, Wei and Chen, Xi and Deng, Haotang and Ju, Qi and Du, Xiaoyong},
journal={EMNLP-IJCNLP 2019},
pages={241},
year={2019}
}
本計畫相關溝通請洽趙喆([email protected];[email protected])或李宇東([email protected])或侯成([email protected])或施文航(cn) [email protected])。
這項工作是由我的企業導師鞠琪、楊雪峰、鄧浩堂和學校導師劉濤、杜曉勇指導的。
我們還得到了劉偉傑、張魯生、崔建偉、李夏宇、毛偉權、趙鑫、陳輝、張金斌、王志若、週鵬、劉海曉和吳偉建的大力幫助。