このチュートリアルは、6月2日に、セバスチャン・ルーダー、マシュー・ピーターズ、スワバ・スワヤムディプタ、トーマス・ウルフによって、米国ミネソタ州ミネアポリスで開催されたNAACL 2019で行われました。
詳細については、NAACLチュートリアルのWebページです。
チュートリアルのスライドは、https://tinyurl.com/naacltransferにあります。
チュートリアル用のすべてのコードを備えたGoogle Colabノートブックは、https://tinyurl.com/naacltransfercolabをご覧ください。
現在のリポジトリは、次の短いURLでアクセスすることもできます:https://tinyurl.com/naacltransfercode
古典的な監視された機械学習パラダイムは、単一のデータセットを使用したタスクの単一の予測モデルを単独で学習することに基づいています。このアプローチには、多数のトレーニング例が必要であり、明確に定義された狭いタスクに最適です。転送学習とは、追加のドメインまたはタスクからのデータを活用して、より良い一般化プロパティでモデルをトレーニングすることにより、このアプローチを拡張する一連のメソッドを指します。
過去2年間、自然言語加工の分野(NLP)は、いくつかの転送学習方法とアーキテクチャの出現を目撃しました。
これらの改善は、これらの方法の幅広い可用性と統合の容易さとともに、コンピュータービジョンにおける前提条件の単語埋め込みとイメージネットの事前削除の成功につながった要因を連想させ、これらの方法がNLP景観の一般的なツールと重要な研究方向になる可能性が高いことを示しています。
NLPの最新の転送学習方法、モデルの事前訓練方法、学習する表現の情報、およびこれらのモデルをダウンストリームNLPタスクにどのように統合および適応させるかについての例とケーススタディをレビューします。
このコードベースは、過去数年間に登場してきた主要な転送学習手法のいくつかを最も単純で最もコンパクトな方法で提示しようとします。このリポジトリのコードは、最先端になろうとはしません。しかし、合理的なパフォーマンスを達成するために努力が払われており、現在の最先端と競争するためのいくつかの修正が行われました。
特別な努力が払われました
現在、コードベースは次のとおりです。
pretraining_model.py :基本的な前処理モデルとしてGPT-2様アーキテクチャを備えたトランスモデル。pretraining_train.py :利用可能な場合は、分散トレーニングを使用して、大規模なデータセット(wikitext-103、simplebooks-92)の選択に関する言語モデリングの目的でこのモデルをトレーニングするための事前削除スクリプト。finetuning_model.py :微調整用のトランスモデルに基づくいくつかのアーキテクチャ(アダプター付きの分類ヘッドがあります)。finetuning_train.py :分類タスク(IMDB)でこれらのアーキテクチャを微調整するための微調整スクリプト。 このコードベースを使用するには、GitHubリポジトリをクローンして、次のような要件をインストールするだけです。
git clone https://github.com/huggingface/naacl_transfer_learning_tutorial
cd naacl_transfer_learning_tutorial
pip install -r requirements.txtトランスを事前に訓練するには、このようにpretraining_train.pyスクリプトを実行します。
python ./pretraining_train.pyまたは、このような分散トレーニングを使用します(8 GPUサーバーの場合):
python -m torch.distributed.launch --nproc_per_node 8 ./pretraining_train.pyトレーニング前のスクリプトは次のとおりです。
wikitext-103をダウンロードしてください./runsの下のフォルダーで経験を記録します。Wikitext-103での〜29の検証困惑を事前に取得するには、8 V100 GPUで約15時間かかります(以前に停止できます)。 SOTAに興味がある場合、検証困惑が同等の変圧器XLの困惑よりも少し高い理由があります(約24)。主な理由は、閉じた語彙の代わりに、オープンな語彙(Bert Tokenizerのサブワード)の使用です(いくつかの説明については、Sebastian Mielkeによるこのブログ投稿を参照)
さまざまなトレーニング前のオプションが利用可能です。次のことをリストできます。
python ./pretraining_train.py --help事前に訓練されたトランスを微調整するには、このようにfinetuning_train.pyスクリプトを実行します。
python ./finetuning_train.py --model_checkpoint PATH-TO-YOUR-PRETRAINED-MODEL-FOLDER PATH-TO-YOUR-PRETRAINED-MODEL-FOLDERたとえば./runs/May17_17-47-12_my_big_serverにすることができます
または、このような分散トレーニングを使用します(8 GPUサーバーの場合):
python -m torch.distributed.launch --nproc_per_node 8 ./finetuning_train.py --model_checkpoint PATH-TO-YOUR-PRETRAINED-MODEL-FOLDERさまざまな微調整オプションが利用可能です。次のことをリストできます。
python ./finetuning_train.py --help