Path: blob/main/transformers_doc/ja/pytorch/training.ipynb
4535 views
Fine-tune a pretrained model
事前学習済みモデルを使用すると、計算コストを削減し、炭素排出量を減少させ、ゼロからモデルをトレーニングする必要なしに最新のモデルを使用できる利点があります。 🤗 Transformersは、さまざまなタスクに対応した数千もの事前学習済みモデルへのアクセスを提供します。 事前学習済みモデルを使用する場合、それを特定のタスクに合わせたデータセットでトレーニングします。これはファインチューニングとして知られ、非常に強力なトレーニング技術です。 このチュートリアルでは、事前学習済みモデルを選択したディープラーニングフレームワークでファインチューニングする方法について説明します:
🤗 TransformersのTrainerを使用して事前学習済みモデルをファインチューニングする。
TensorFlowとKerasを使用して事前学習済みモデルをファインチューニングする。
ネイティブのPyTorchを使用して事前学習済みモデルをファインチューニングする。
Prepare a dataset
事前学習済みモデルをファインチューニングする前に、データセットをダウンロードしてトレーニング用に準備する必要があります。 前のチュートリアルでは、トレーニングデータの処理方法を説明しましたが、これからはそれらのスキルを活かす機会があります!
まず、Yelp Reviewsデータセットを読み込んでみましょう:
トークナイザがテキストを処理し、可変のシーケンス長を処理するためのパディングと切り捨て戦略を含める必要があることをご存知の通り、 データセットを1つのステップで処理するには、🤗 Datasets の map
メソッドを使用して、 データセット全体に前処理関数を適用します:
お好みで、実行時間を短縮するためにフルデータセットの小さなサブセットを作成することができます:
Train
この時点で、使用したいフレームワークに対応するセクションに従う必要があります。右側のサイドバーのリンクを使用して、ジャンプしたいフレームワークに移動できます。 そして、特定のフレームワークのすべてのコンテンツを非表示にしたい場合は、そのフレームワークのブロック右上にあるボタンを使用してください!
Train with Pytorch Trainer
🤗 Transformersは、🤗 Transformersモデルのトレーニングを最適化したTrainerクラスを提供し、独自のトレーニングループを手動で記述せずにトレーニングを開始しやすくしています。 Trainer APIは、ログ記録、勾配累積、混合精度など、さまざまなトレーニングオプションと機能をサポートしています。
まず、モデルをロードし、予想されるラベルの数を指定します。Yelp Review dataset cardから、5つのラベルがあることがわかります:
一部の事前学習済みの重みが使用されず、一部の重みがランダムに初期化された警告が表示されることがあります。心配しないでください、これは完全に正常です! BERTモデルの事前学習済みのヘッドは破棄され、ランダムに初期化された分類ヘッドで置き換えられます。この新しいモデルヘッドをシーケンス分類タスクでファインチューニングし、事前学習モデルの知識をそれに転送します。
Training Hyperparameters
次に、トレーニングオプションをアクティベートするためのすべてのハイパーパラメータと、調整できるハイパーパラメータを含むTrainingArgumentsクラスを作成します。 このチュートリアルでは、デフォルトのトレーニングハイパーパラメータを使用して開始できますが、最適な設定を見つけるためにこれらを実験しても構いません。
トレーニングのチェックポイントを保存する場所を指定します:
Evaluate
Trainerはトレーニング中に自動的にモデルのパフォーマンスを評価しません。メトリクスを計算して報告する関数をTrainerに渡す必要があります。 🤗 Evaluateライブラリでは、evaluate.load
関数を使用して読み込むことができるシンプルなaccuracy
関数が提供されています(詳細についてはこちらのクイックツアーを参照してください):
metric
の~evaluate.compute
を呼び出して、予測の正確度を計算します。 compute
に予測を渡す前に、予測をロジットに変換する必要があります(すべての🤗 Transformersモデルはロジットを返すことを覚えておいてください):
評価メトリクスをファインチューニング中に監視したい場合、トレーニング引数で eval_strategy
パラメータを指定して、各エポックの終了時に評価メトリクスを報告します:
Trainer
モデル、トレーニング引数、トレーニングおよびテストデータセット、評価関数を使用してTrainerオブジェクトを作成します:
その後、train()を呼び出してモデルを微調整します:
Train in native Pytorch
Trainerはトレーニングループを処理し、1行のコードでモデルをファインチューニングできるようにします。 トレーニングループを独自に記述したいユーザーのために、🤗 TransformersモデルをネイティブのPyTorchでファインチューニングすることもできます。
この時点で、ノートブックを再起動するか、以下のコードを実行してメモリを解放する必要があるかもしれません:
モデルは生のテキストを入力として受け取らないため、
text
列を削除します:
label
列をlabels
に名前を変更します。モデルは引数の名前をlabels
と期待しています:
データセットの形式をリストではなくPyTorchテンソルを返すように設定します:
以前に示したように、ファインチューニングを高速化するためにデータセットの小さなサブセットを作成します:
DataLoader
トレーニングデータセットとテストデータセット用のDataLoader
を作成して、データのバッチをイテレートできるようにします:
ロードするモデルと期待されるラベルの数を指定してください:
Optimizer and learning rate scheduler
モデルをファインチューニングするためのオプティマイザと学習率スケジューラーを作成しましょう。 PyTorchからAdamW
オプティマイザを使用します:
デフォルトの学習率スケジューラをTrainerから作成する:
最後に、GPUを利用できる場合は device
を指定してください。それ以外の場合、CPUでのトレーニングは数時間かかる可能性があり、数分で完了することができます。
クラウドGPUが利用できない場合、ColaboratoryやSageMaker StudioLabなどのホストされたノートブックを使用して無料でGPUにアクセスできます。
さて、トレーニングの準備が整いました! 🥳
トレーニングループ
トレーニングの進捗を追跡するために、tqdmライブラリを使用してトレーニングステップの数に対して進行状況バーを追加します:
Evaluate
Trainerに評価関数を追加したのと同様に、独自のトレーニングループを作成する際にも同様の操作を行う必要があります。 ただし、各エポックの最後にメトリックを計算および報告する代わりに、今回はadd_batch
を使用してすべてのバッチを蓄積し、最後にメトリックを計算します。
追加リソース
さらなるファインチューニングの例については、以下を参照してください:
🤗 Transformers Examples には、PyTorchとTensorFlowで一般的なNLPタスクをトレーニングするスクリプトが含まれています。
🤗 Transformers Notebooks には、特定のタスクにモデルをファインチューニングする方法に関するさまざまなノートブックが含まれています。