英語|中文
事前トレーニングは AI テクノロジーの重要な部分になっています。 TencentPretrain は、さまざまなモダリティ (テキストやビジョンなど) のデータの事前トレーニングと微調整のためのツールキットです。 TencentPretrain はモジュール設計が特徴です。これにより、既存の事前トレーニング モデルの使用が容易になり、ユーザーがさらに拡張できるインターフェイスが提供されます。 TencentPretrain を使用して、さまざまなプロパティの事前トレーニングされたモデルを含むモデル動物園を構築します。 TencentPretrain は、オープンソース ツールキット UER (https://github.com/dbiir/UER-py/) を継承し、それをマルチモーダル事前トレーニング フレームワークに拡張します。
TencentPretrain には次の機能があります。
このセクションでは、いくつかの一般的に使用される例を使用して、TencentPretrain の使用方法を示します。詳細については、「手順」セクションで説明します。まず、書評感情分類データセットに対して BERT (テキスト事前トレーニング モデル) を使用します。書評コーパスでモデルを事前トレーニングし、書評感情分類データセットでモデルを微調整します。入力ファイルには、書評コーパス、書評感情分類データセット、語彙の 3 つがあります。すべてのファイルは UTF-8 でエンコードされ、このプロジェクトに含まれています。
BERT のコーパスの形式は次のとおりです (1 行に 1 文、文書は空行で区切られます)。
doc1-sent1
doc1-sent2
doc1-sent3
doc2-sent1
doc3-sent1
doc3-sent2
書評コーパスは、書評感情分類データセットから取得されます。ラベルを削除し、レビューを途中から 2 つの部分に分割して、2 つの文からなるドキュメントを構築します (コーパスフォルダー内の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
six>=1.12.0が必要であることに注意してください。
前処理には時間がかかります。複数のプロセスを使用すると、前処理速度が大幅に向上します ( --processes_num )。 BERT トークナイザーはデフォルト ( --tokenizer bert ) で使用されます。前処理の後、生のテキストはpretrain.pyの入力であるdataset.ptに変換されます。次に、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 ) を記録するサフィックスが付加されていることに注意してください。使いやすくするために接尾辞を削除することもできます。
次に、下流の分類データセットで事前トレーニングされたモデルを微調整します。 pretrain.pyの出力であるbook_review_model.binの埋め込み層とエンコーダー層を使用します。
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 によって直接ロードできます。
TencentPretrain は次のように構成されています。
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 などの事前トレーニング モデルを迅速に実装し、さまざまな下流タスクで事前トレーニングされたモデルを微調整するのに役立ちます。
TencentPretrain は、多くのコンテストの優勝ソリューションに使用されています。このセクションでは、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}
}