英語|中文
事前トレーニングは NLP タスクにとって不可欠な部分となっています。 UER-py (Universal Encoder Representations) は、一般ドメインのコーパスでの事前トレーニングと下流タスクの微調整のためのツールキットです。 UER-py はモデルのモジュール性を維持し、研究の拡張性をサポートします。これにより、既存の事前トレーニング モデルの使用が容易になり、ユーザーがさらに拡張できるインターフェイスが提供されます。 UER-py を使用して、さまざまなプロパティの事前トレーニングされたモデルを含むモデル動物園を構築します。完全なドキュメントについては、UER-py プロジェクト Wiki を参照してください。
UER-py のリファクタリングされた新しいバージョンである TencentPretrain をオープンソース化しました。 TencentPretrain はマルチモーダル モデルをサポートしており、大規模なモデルのトレーニングを可能にします。中程度のサイズ (パラメーター サイズが 10 億未満) のテキスト モデルに興味がある場合は、引き続き UER-py プロジェクトを使用することをお勧めします。
UER-py には次の機能があります。
このセクションでは、よく使用されるいくつかの例を使用して、UER-py の使用方法を示します。詳細については、「手順」セクションで説明します。まず、書評感情分類データセットに対して 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 (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 ) を記録するサフィックスが付加されていることに注意してください。使いやすくするために接尾辞を削除することもできます。
次に、下流の分類データセットで事前トレーニングされたモデルを微調整します。 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でラベルの数を明示的に指定する必要があります。上記のデータセットは二元分類データセットです。
上記のコンテンツでは、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 コンテストの優勝ソリューションに使用されています。このセクションでは、CLUE などの NLP コンテストで SOTA の結果を達成するために UER-py を使用する例をいくつか示します。詳細については、➡️競合ソリューション⬅️を参照してください。
@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}
}
このプロジェクトに関する連絡については、Zhe Zhao ([email protected]; [email protected])、Yudong Li ([email protected])、または Cheng Hou ([email protected]) までご連絡ください。または石文航 ([email protected])。
この作業は、私の企業指導者であるQi Ju氏、 Xuefeng Yang 氏、 Haotang Deng 氏、および学校の指導者であるTao Liu 氏、 Xiaoyong Du 氏によって指導されています。
また、Weijie Liu 氏、Lusheng Zhang 氏、Jianwei Cui 氏、Xiayu Li 氏、Weiquan Mao 氏、Xin Zhao 氏、Hui Chen 氏、Jinbin Zhang 氏、Zhiruo Wang 氏、Peng Zhou 氏、Haaixiao Liu 氏、Weijian Wu 氏からも多大なご協力をいただきました。