Path: blob/main/transformers_doc/ja/tensorflow/language_modeling.ipynb
4535 views
Causal language modeling
言語モデリングには、因果的モデリングとマスクされた言語モデリングの 2 つのタイプがあります。このガイドでは、因果関係のある言語モデリングについて説明します。 因果言語モデルはテキスト生成によく使用されます。これらのモデルは、次のようなクリエイティブなアプリケーションに使用できます。 独自のテキスト アドベンチャーを選択するか、Copilot や CodeParrot などのインテリジェントなコーディング アシスタントを選択します。
因果言語モデリングは、一連のトークン内の次のトークンを予測します。モデルは、次のトークンにのみ対応できます。 左。これは、モデルが将来のトークンを認識できないことを意味します。 GPT-2 は因果的言語モデルの一例です。
このガイドでは、次の方法を説明します。
ELI5 の r/askscience サブセットで DistilGPT2 を微調整します。 /huggingface.co/datasets/eli5) データセット。
微調整したモデルを推論に使用します。
このタスクと互換性のあるすべてのアーキテクチャとチェックポイントを確認するには、タスクページ を確認することをお勧めします。u
始める前に、必要なライブラリがすべてインストールされていることを確認してください。
モデルをアップロードしてコミュニティと共有できるように、Hugging Face アカウントにログインすることをお勧めします。プロンプトが表示されたら、トークンを入力してログインします。
Load ELI5 dataset
まず、ELI5 データセットの r/askscience サブセットの小さいサブセットを 🤗 データセット ライブラリからロードします。 これにより、完全なデータセットのトレーニングにさらに時間を費やす前に、実験してすべてが機能することを確認する機会が得られます。
train_test_split
メソッドを使用して、データセットの train_asks
をトレイン セットとテスト セットに分割します。
次に、例を見てみましょう。
これは多くのことのように見えるかもしれませんが、実際に関心があるのはtext
フィールドだけです。言語モデリングの優れている点 タスクでは、次の単語がラベル * であるため、ラベル (教師なしタスクとも呼ばれます) は必要ありません。
Preprocess
次のステップは、text
サブフィールドを処理するために DistilGPT2 トークナイザーをロードすることです。
上の例からわかるように、text
フィールドは実際にはanswers
内にネストされています。つまり、次のことが必要になります。 flatten
メソッドを使用して、ネストされた構造から text
サブフィールドを抽出します。
answers
接頭辞で示されるように、各サブフィールドは個別の列になり、text
フィールドはリストになりました。その代わり 各文を個別にトークン化する場合は、リストを文字列に変換して、それらをまとめてトークン化できるようにします。
以下は、各例の文字列のリストを結合し、結果をトークン化する最初の前処理関数です。
この前処理関数をデータセット全体に適用するには、🤗 Datasets map
メソッドを使用します。 map
関数を高速化するには、batched=True
を設定してデータセットの複数の要素を一度に処理し、num_proc
でプロセスの数を増やします。不要な列を削除します。
このデータセットにはトークン シーケンスが含まれていますが、その一部はモデルの最大入力長よりも長くなります。
2 番目の前処理関数を使用して、
すべてのシーケンスを連結します
連結されたシーケンスを
block_size
で定義された短いチャンクに分割します。これは、最大入力長より短く、GPU RAM に十分な長さである必要があります。
Apply the group_texts
function over the entire dataset:
次に、DataCollatorForLanguageModeling
を使用してサンプルのバッチを作成します。 動的にパディングする方が効率的です。 データセット全体を最大長までパディングするのではなく、照合中にバッチ内の文を最長の長さにします。
シーケンス終了トークンをパディング トークンとして使用し、mlm=False
を設定します。これは、入力を 1 要素分右にシフトしたラベルとして使用します。
Train
Keras を使用したモデルの微調整に慣れていない場合は、基本チュートリアル をご覧ください。
次に、TFAutoModelForCausalLM を使用して DistilGPT2 をロードできます。
prepare_tf_dataset() を使用して、データセットを tf.data.Dataset
形式に変換します。
compile
を使用してトレーニング用のモデルを設定します。 Transformers モデルにはすべてデフォルトのタスク関連の損失関数があるため、次の場合を除き、損失関数を指定する必要はないことに注意してください。
これは、モデルとトークナイザーを PushToHubCallback でプッシュする場所を指定することで実行できます。
ついに、モデルのトレーニングを開始する準備が整いました。トレーニングおよび検証データセット、エポック数、コールバックを指定して fit
を呼び出し、モデルを微調整します。
トレーニングが完了すると、モデルは自動的にハブにアップロードされ、誰でも使用できるようになります。
因果言語モデリング用にモデルを微調整する方法のより詳細な例については、対応するドキュメントを参照してください。 PyTorch ノートブック または TensorFlow ノートブック。
Inference
モデルを微調整したので、それを推論に使用できるようになりました。
テキストを生成するプロンプトを考え出します。
推論用に微調整されたモデルを試す最も簡単な方法は、それを pipeline() で使用することです。モデルを使用してテキスト生成用のpipeline
をインスタンス化し、それにテキストを渡します。
テキストをトークン化し、input_ids
を TensorFlow テンソルとして返します。
~transformers.generation_tf_utils.TFGenerationMixin.generate
メソッドを使用して要約を作成します。さまざまなテキスト生成戦略と生成を制御するためのパラメーターの詳細については、テキスト生成戦略 ページを参照してください。
生成されたトークン ID をデコードしてテキストに戻します。