英文|中文
預訓練已經成為人工智慧技術的重要組成部分。 TencentPretrain是一個用於對不同模態(例如文字和視覺)的資料進行預先訓練和微調的工具包。騰訊Pretrain的特點是模組化設計。它方便了現有預訓練模型的使用,並為使用者提供了進一步擴展的介面。透過TencentPretrain,我們建立了一個模型動物園,其中包含不同屬性的預訓練模型。 TencentPretrain繼承了開源工具包UER(https://github.com/dbiir/UER-py/),並將其擴展為多模態預訓練框架。
騰訊Pretrain具有以下特點:
本節透過幾個常用的例子來示範如何使用TencentPretrain。更多細節將在說明部分討論。我們首先在書評情緒分類資料集上使用 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 (TencentPretrain格式,原始模型來自這裡),並將其放在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明確指定標籤的數量。上述資料集是一個雙向分類資料集。
以上內容提供了使用TencentPretrain進行預處理、預先訓練、微調、推理的基本方法。更多用例可以在完整的➡️快速入門⬅️中找到。完整的快速入門包含豐富的用例,涵蓋了大部分預先訓練相關的應用場景。建議使用者閱讀完整的快速入門,以便合理使用該項目。
本部分提供一系列 ➡️預訓練資料⬅️ 的連結。 TencentPretrain可以直接載入這些預訓練資料。
本部分提供一系列➡️下游資料集⬅️的連結。 TencentPretrain可以直接載入這些資料集。
在TencentPretrain的幫助下,我們預先訓練了不同屬性的模型(例如基於不同模態、編碼器和目標的模型)。預訓練模型的詳細介紹及其下載連結可以在➡️modelzoo⬅️找到。所有預訓練模型都可以直接由TencentPretrain載入。
騰訊Pretrain的組織方式如下:
TencentPretrain/
|--tencentpretrain/
| |--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
程式碼是根據元件(例如嵌入、編碼器)進行組織的。用戶可以毫不費力地使用和擴展它。
➡️使用說明⬅️提供了TencentPretrain的綜合使用範例,幫助使用者快速實現BERT、GPT-2、ELMo、T5、CLIP等預訓練模型,並在一系列下游任務上對預訓練模型進行微調。
騰訊Pretrain已被用於眾多競賽的獲獎方案中。在本節中,我們提供了一些使用TencentPretrain在CLUE等比賽中取得SOTA結果的範例。更多詳細資訊請參閱➡️競賽解決方案⬅️。
@article{zhao2023tencentpretrain,
title={TencentPretrain: A Scalable and Flexible Toolkit for Pre-training Models of Different Modalities},
author={Zhao, Zhe and Li, Yudong and Hou, Cheng and Zhao, Jing and others},
journal={ACL 2023},
pages={217},
year={2023}
}