見出し画像

Huggingface Transformers 入門 (11) - テキスト分類の学習スクリプト

以下の記事を参考に書いてます。

·Text classification examples - huggingface/transformers

・Huggingface Transformers 4.1.1
・Huggingface Datasets 1.2

前回

1. PyTorch版のテキスト分類のファインチューニング

run_glue.py」は、GLUEでのテキスト分類のファインチューニングを行うスクリプトのPyTorch版です。CSVまたはJSONの独自のデータにも使用できます(その場合、スクリプトの微調整が必要です。ヘルプについては、内部のコメントを参照してください)。GLUEは、合計9つの異なるタスクで構成されています。 

スクリプトを実行する方法は、次のとおりです。

export TASK_NAME=mrpc

python run_glue.py \
    --model_name_or_path bert-base-cased \
    --task_name $TASK_NAME \
    --do_train \
    --do_eval \
    --max_seq_length 128 \
    --per_device_train_batch_size 32 \
    --learning_rate 2e-5 \
    --num_train_epochs 3 \
    --output_dir /tmp/$TASK_NAME/

パラメータの説明は、次のとおりです。

--model_name_or_path : BERTモデルタイプ。
--task_name : タスク名(cola,sst2,mrpc,stsb,qqp,mnli,qnli,rte,wnliのいずれか)。
--do_train : 学習するかどうか。
--do_eval : 検証するかどうか。
--max_seq_length : トークン化後の最大合計入力シーケンス長。 これより長いシーケンスは切り捨てられ、短いシーケンスはパディングされる。
--per_device_train_batch_size : バッチサイズ。
--num_train_epochs : 訓練のエポック数。
--learning_rate : 学習率。
--output_dir
: 出力を保存する保存するディレクトリパス。

--train_file : 訓練ファイル(*.csv,*.json)。
--validation_file : 検証ファイル(*.csv,*.json)。
--save_steps : checkpointを何ステップ毎に保存するか。

次の結果が得られます(ただし、MRPCとWNLIは小さく、5エポックを使用した場合は3つではありません)。 訓練はシードされているため、PyTorch 1.6.0で同じ結果が得られるはずです(異なるバージョンで近い結果が得られます)。訓練時間は情報として提供しています(単一のTitan RTXが使用されました)。

画像1

この結果の一部は、WebサイトのGLUEベンチマークのテストセットで報告された結果とは大幅に異なります。 QQPおよびWNLIについては、WebサイトのFAQ#12を参照してください。

◎ 混合精度訓練
混合精度機能(Pascal以降)を備えたGPUを使用している場合は、PyTorch 1.6.0以降、または前バージョンのApexをインストールすることにより、混合精度訓練を使用できます。 コマンドに--fp16を追加するだけです。混合精度訓練を使用すると、通常、訓練の速度が2倍になり、同じ最終結果が得られます。

画像2

2. TensorFlow 2.0版のテキスト分類のファインチューニング

run_tf_glue.py」は、GLUEでのテキスト分類のファインチューニングを行うスクリプトのTensorFlow 2.0版です。このスクリプトには、Tensorコア(NVIDIA Volta / Turing GPU)と将来のハードウェアでモデルを実行するための混合精度(自動混合精度/ AMP)のオプションと、XLAコンパイラを使用してモデルの実行時間を短縮するXLAのオプションがありますオプションは、スクリプトでUSE_XLA変数またはUSE_AMP変数を使用して切り替えられます。これらのオプションと以下のベンチマークは@tlkhによって提供されます。

画像3

混合精度(AMP)は、同じハードウェアとハイパーパラメータの訓練時間を大幅に短縮します。

◎ TensorFlowでのテキスト分類スクリプトの実行
「run_tf_text_classification.py」を使用すると、ユーザーは自分のCSVファイルでテキスト分類を実行できます。 今のところ、いくつかの制限があります。CSVファイルには、列名に対応するヘッダーが必要で、3つ以下の列が必要です。1つの列はID用、1つの列はテキスト用、もう1つの列は2番目のテキスト用です。

スクリプトを実行する方法は、次のとおりです。

python run_tf_text_classification.py \
    --train_file train.csv \ ### training dataset file location (mandatory if running with --do_train option) 
    --dev_file dev.csv \ ### development dataset file location (mandatory if running with --do_eval option)
    --test_file test.csv \ ### test dataset file location (mandatory if running with --do_predict option)
    --label_column_id 0 \ ### which column corresponds to the labels
    --model_name_or_path bert-base-multilingual-uncased \
    --output_dir model \
    --num_train_epochs 4 \
    --per_device_train_batch_size 16 \
    --per_device_eval_batch_size 32 \
    --do_train \
    --do_eval \
    --do_predict \
    --logging_steps 10 \
    --evaluation_strategy steps \
    --save_steps 10 \
    --overwrite_output_dir \
    --max_seq_length 128

3. XNLI

run_xnli.py」は、XNLIのサンプルです。XNLIは、MultiNLIに基づくクラウドソーシングデータセットです。これは、言語を超えたテキスト表現の評価ベンチマークです。テキストのペアには、15の異なる言語(英語などの高リソース言語とスワヒリ語などの低リソース言語の両方を含む)のテキスト含意注釈が付けられています。

◎ XNLIのファインチューニング
このサンプルコードは、XNLIデータセットのmBERT(多言語BERT)をファインチューニングします。 単一のteslaV10016GBで106分で動作します。 XNLIのデータは、次のリンクを使用してダウンロードでき、$XNLI_DIRディレクトリに保存(および解凍)する必要があります。

XNLI 1.0
XNLI-MT 1.0
export XNLI_DIR=/path/to/XNLI

python run_xnli.py \
    --model_name_or_path bert-base-multilingual-cased \
    --language de \
    --train_language en \  
    --do_train \
    --do_eval \
    --data_dir $XNLI_DIR \
    --per_device_train_batch_size 32 \
    --learning_rate 5e-5 \
    --num_train_epochs 2.0 \
    --max_seq_length 128 \
    --output_dir /tmp/debug_xnli/ \
    --save_steps -1

以前に定義されたハイパーパラメータを使用して訓練すると、テストセットで次の結果が得られます。

acc = 0.7093812375249501

次回



この記事が気に入ったらサポートをしてみませんか?