Notebooks
H
Hugging Face
Multiple Choice

Multiple Choice

tensorflowhf-notebookstransformers_docja

Multiple choice

多肢選択タスクは質問応答に似ていますが、いくつかの候補の回答がコンテキストとともに提供され、正しい回答を選択するようにモデルがトレーニングされる点が異なります。

このガイドでは、次の方法を説明します。

  1. SWAG データセットの「通常」構成で BERT を微調整して、最適なデータセットを選択します複数の選択肢と何らかのコンテキストを考慮して回答します。
  2. 微調整したモデルを推論に使用します。

始める前に、必要なライブラリがすべてインストールされていることを確認してください。

pip install transformers datasets evaluate

モデルをアップロードしてコミュニティと共有できるように、Hugging Face アカウントにログインすることをお勧めします。プロンプトが表示されたら、トークンを入力してログインします。

[ ]

Load SWAG dataset

まず、🤗 データセット ライブラリから SWAG データセットの「通常」構成をロードします。

[ ]

次に、例を見てみましょう。

[ ]
{'ending0': 'passes by walking down the street playing their instruments.',
, 'ending1': 'has heard approaching them.',
, 'ending2': "arrives and they're outside dancing and asleep.",
, 'ending3': 'turns the lead singer watches the performance.',
, 'fold-ind': '3416',
, 'gold-source': 'gold',
, 'label': 0,
, 'sent1': 'Members of the procession walk down the street holding small horn brass instruments.',
, 'sent2': 'A drum line',
, 'startphrase': 'Members of the procession walk down the street holding small horn brass instruments. A drum line',
, 'video-id': 'anetv_jkn6uvmqwh4'}

ここにはたくさんのフィールドがあるように見えますが、実際は非常に簡単です。

  • sent1sent2: これらのフィールドは文の始まりを示し、この 2 つを組み合わせると startphrase フィールドが得られます。
  • ending: 文の終わり方として考えられる終わり方を示唆しますが、正しいのは 1 つだけです。
  • label: 正しい文の終わりを識別します。

Preprocess

次のステップでは、BERT トークナイザーをロードして、文の始まりと 4 つの可能な終わりを処理します。

[ ]

作成する前処理関数は次のことを行う必要があります。

  1. sent1 フィールドのコピーを 4 つ作成し、それぞれを sent2 と組み合わせて文の始まりを再現します。
  2. sent2 を 4 つの可能な文末尾のそれぞれと組み合わせます。
  3. これら 2 つのリストをトークン化できるようにフラット化し、その後、各例に対応する input_idsattention_mask、および labels フィールドが含まれるように非フラット化します。
[ ]

データセット全体に前処理関数を適用するには、🤗 Datasets map メソッドを使用します。 batched=True を設定してデータセットの複数の要素を一度に処理することで、map 関数を高速化できます。

[ ]

DataCollatorForMultipleChoice は、すべてのモデル入力を平坦化し、パディングを適用して、結果を非平坦化します。

[ ]

Evaluate

トレーニング中にメトリクスを含めると、多くの場合、モデルのパフォーマンスを評価するのに役立ちます。 🤗 Evaluate ライブラリを使用して、評価メソッドをすばやくロードできます。このタスクでは、accuracy メトリクスを読み込みます (🤗 Evaluate クイック ツアー を参照してください) ) メトリクスの読み込みと計算方法の詳細については、次を参照してください)。

[ ]

次に、予測とラベルを compute に渡して精度を計算する関数を作成します。

[ ]

これでcompute_metrics関数の準備が整いました。トレーニングをセットアップするときにこの関数に戻ります。

Train

Trainer を使用したモデルの微調整に慣れていない場合は、ここ の基本的なチュートリアルをご覧ください。

これでモデルのトレーニングを開始する準備が整いました。 AutoModelForMultipleChoice を使用して BERT をロードします。

[ ]

この時点で残っている手順は次の 3 つだけです。

  1. TrainingArguments でトレーニング ハイパーパラメータを定義します。唯一の必須パラメータは、モデルの保存場所を指定する output_dir です。 push_to_hub=Trueを設定して、このモデルをハブにプッシュします (モデルをアップロードするには、Hugging Face にサインインする必要があります)。各エポックの終了時に、Trainer は精度を評価し、トレーニング チェックポイントを保存します。
  2. トレーニング引数を、モデル、データセット、トークナイザー、データ照合器、および compute_metrics 関数とともに Trainer に渡します。
  3. train() を呼び出してモデルを微調整します。
[ ]

トレーニングが完了したら、 push_to_hub() メソッドを使用してモデルをハブに共有し、誰もがモデルを使用できますように。

[ ]

複数選択用にモデルを微調整する方法の詳細な例については、対応するセクションを参照してください。 PyTorch ノートブック または TensorFlow ノートブック

Inference

モデルを微調整したので、それを推論に使用できるようになりました。

いくつかのテキストと 2 つの回答候補を考えてください。

[ ]

各プロンプトと回答候補のペアをトークン化し、PyTorch テンソルを返します。いくつかのlablesも作成する必要があります。

[ ]

入力とラベルをモデルに渡し、logitsを返します。

[ ]

最も高い確率でクラスを取得します。

[ ]
'0'