2021.05.17 に https://github.com/huggingface/transformers/tree/86d5fb0b360e68de46d40265e7c707fe68c8015b/examples/pytorch/ language-modeling からフォークしました。
GPT、GPT-2、ALBERT、BERT、DistilBERT、RoBERTa、XLNet...のテキスト データセットで言語モデリングのライブラリ モデルを微調整 (または最初からトレーニング) する GPT および GPT-2 は、次を使用してトレーニングまたは微調整されます。 ALBERT、BERT、DistilBERT、RoBERTa はマスク言語モデリング (MLM) 損失を使用してトレーニングまたは微調整されますが、因果言語モデリング (CLM) 損失が発生します。 XLNet は順列言語モデリング (PLM) を使用します。モデルの概要でこれらの目的の違いについて詳しく知ることができます。
2 つのスクリプト セットが提供されています。最初のセットでは、トレーナー API を利用します。サフィックスにno_trainer
が含まれる 2 番目のセットは、カスタム トレーニング ループを使用し、?ライブラリを高速化します。どちらのセットも ? を使用します。データセットライブラリ。データセットに追加の処理が必要な場合は、ニーズに合わせて簡単にカスタマイズできます。
注:古いスクリプトrun_language_modeling.py
はまだここから入手できます。
次の例は、ハブでホストされているデータセット、またはトレーニングと検証用の独自のテキスト ファイルで実行されます。以下に両方の例を示します。
次の例では、WikiText-2 で GPT-2 を微調整します。私たちは生の WikiText-2 を使用しています (トークン化の前にトークンは置き換えられていません)。ここでの損失は、因果言語モデリングの損失です。
python run_clm.py
--model_name_or_path gpt2
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-clm
単一の K80 GPU でのトレーニングには約 30 分、評価の実行には約 1 分かかります。データセットを微調整すると、困惑度のスコアは約 20 に達します。
独自のトレーニング ファイルと検証ファイルを実行するには、次のコマンドを使用します。
python run_clm.py
--model_name_or_path gpt2
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-clm
これは、トレーニングに組み込みの HuggingFace Trainer
使用します。カスタム トレーニング ループを使用する場合は、 run_clm_no_trainer.py
スクリプトを利用または調整できます。サポートされている引数のリストについては、スクリプトを参照してください。例を以下に示します。
python run_clm_no_trainer.py
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--model_name_or_path gpt2
--output_dir /tmp/test-clm
次の例では、WikiText-2 で RoBERTa を微調整します。ここでも、生の WikiText-2 を使用しています。 BERT/RoBERTa には双方向メカニズムがあるため、損失は異なります。したがって、事前トレーニング中に使用されたものと同じ損失、つまりマスクされた言語モデリングを使用しています。
RoBERTa の論文に従って、静的マスキングではなく動的マスキングを使用します。したがって、モデルの収束がわずかに遅くなる可能性があります (オーバーフィッティングにはより多くのエポックがかかります)。
python run_mlm.py
--model_name_or_path roberta-base
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-mlm
独自のトレーニング ファイルと検証ファイルを実行するには、次のコマンドを使用します。
python run_mlm.py
--model_name_or_path roberta-base
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-mlm
データセットが 1 行に 1 つのサンプルで構成されている場合は、 --line_by_line
フラグを使用できます (それ以外の場合、スクリプトはすべてのテキストを連結してから、同じ長さのブロックに分割します)。
これは、トレーニングに組み込みの HuggingFace Trainer
使用します。カスタム トレーニング ループを使用する場合は、 run_mlm_no_trainer.py
スクリプトを利用または調整できます。サポートされている引数のリストについては、スクリプトを参照してください。以下に例を示します。
python run_mlm_no_trainer.py
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--model_name_or_path roberta-base
--output_dir /tmp/test-mlm
注: TPU では、すべてのバッチが同じ長さになるように、フラグ--pad_to_max_length
--line_by_line
フラグと組み合わせて使用する必要があります。
この部分はexamples/research_projects/mlm_wwm
に移動されました。
XLNet は、順列言語モデリングという別のトレーニング目標を使用します。これは、入力シーケンスの因数分解順序のすべての順列に対して期待される尤度を最大化することで双方向コンテキストを学習する自己回帰手法です。
--plm_probability
フラグを使用して、置換言語モデリングのマスクされたトークンのスパンの長さと周囲のコンテキストの長さの比率を定義します。
--max_span_length
フラグは、置換言語モデリングに使用されるマスクされたトークンのスパンの長さを制限するために使用することもできます。
wikitext-2 で XLNet を微調整する方法は次のとおりです。
python run_plm.py
--model_name_or_path=xlnet-base-cased
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-plm
独自のトレーニングおよび検証ファイルで微調整するには、次を実行します。
python run_plm.py
--model_name_or_path=xlnet-base-cased
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-plm
データセットが 1 行に 1 つのサンプルで構成されている場合は、 --line_by_line
フラグを使用できます (それ以外の場合、スクリプトはすべてのテキストを連結してから、同じ長さのブロックに分割します)。
注: TPU では、すべてのバッチが同じ長さになるように、フラグ--pad_to_max_length
--line_by_line
フラグと組み合わせて使用する必要があります。