Path: blob/master/site/ja/tutorials/text/warmstart_embedding_matrix.ipynb
25118 views
Warm-start embedding layer matrix
このチュートリアルでは、語彙を変更してテキストのセンチメント分類を行う際に、tf.keras.utils.warmstart_embedding_matrix
API を使用してトレーニングを「ウォームスタート」する方法を説明します。
まず、基本語彙を使って単純な Keras モデルをトレーニングすることから始め、語彙を更新した後に、モデルのトレーニングを続行します。これは「ウォームスタート」と呼ばれる方法で、新しい語彙に合わせてテキスト埋め込み行列をマッピングし直す必要があります。
埋め込み行列
埋め込みは、類似する語彙トークンに類似するエンコーディングのある、効率的な密の表現を使用するための手法です。トレーナブルなパラメータです(重みは、モデルが高密度レイヤーの重みを学習するのと同じように、トレーニング中にモデルによって学習されます)。小さなデータセットでは、8 次元の埋め込みがあるのが一般的で、大規模なデータセットを操作する場合には、最大 1024 次元にもなります。高次元の埋め込みであるほど、粒度の高い単語関係をキャプチャできますが、学習にはより多くのデータが必要となります。
語彙
一意の単語のセットは語彙と呼ばれます。テキストモデルを構築するには、固定の語彙を選択する必要があります。語彙は、データセット内の最も共通する単語からビルドするのが一般的です。語彙を使用することで、各テキストを、埋め込み行列でルックアップできる一連の ID で表現することができます。語彙では、各テキストをテキストに出現する特定の単語で表現することができます。
埋め込み行列をウォームスタートする理由
モデルは、特定の語彙を表現する埋め込みのセットでトレーニングされます。モデルを更新または改善する必要がある場合、前回のランの重みを再利用することで、トレーニングを収束する時間が短縮されます。前回のランの埋め込み行列を使用するのは、より困難です。語彙に何らかの変更があると、単語と ID のマッピングが無効になってしまうのが問題です。
tf.keras.utils.warmstart_embedding_matrix
は、基本語彙の埋め込み行列から新しい語彙の埋め込み行列を作成することで、この問題を解決します。単語が両方の語彙に存在する場合、基本の埋め込みベクトルは新しい埋め込み行列の正しい位置にコピーされます。このため、語彙のサイズまたは順序が変更された後にトレーニングをウォームスタートすることが可能です。
セットアップ
データセットを読み込む
チュートリアルでは、Large Movie Review Dataset を使用します。このデータセットでセンチメント分類器モデルをトレーニングし、その過程で、ゼロから埋め込みを学習します。詳細については、テキストの読み込みチュートリアルをご覧ください。
Keras ファイルユーティリティを使用してデータセットをダウンロードし、ディレクトリを確認します。
train/
ディレクトリには pos
フォルダと neg
フォルダがあり、それぞれに、positive と negative としてラベル付けされた映画レビューが含まれます。pos
フォルダと neg
フォルダのレビューを使用して、二項分類モデルをトレーニングします。
train
には、トレーニングセットを作成する前に削除する必要のある他のフォルダも含まれています。
次に、tf.keras.utils.text_dataset_from_directory
を使用して、tf.data.Dataset
を作成します。このユーティリティの使用についての詳細は、こちらのテキスト分類チュートリアルをご覧ください。
train
ディレクトリを使用して、トレーニングセットと検証セットを作成します。検証の分割は 20% とします。
データセットを構成してパフォーマンスを改善する
Dataset.cache
と Dataset.prefetch
、またデータをディスクにキャッシュする方法については、データパフォーマンスガイドをご覧ください。
テキストの前処理
次に、センチメント分類モデルに必要なデータセットの前処理ステップを定義します。layers.TextVectorization
レイヤーを、映画レビューをベクトル化する任意のパラメータで初期化します。このレイヤーの使用方法については、テキスト分類チュートリアルをご覧ください。
分類モデルを作成する
Keras Sequential API を使用して、センチメント分類モデルを定義します。
モデルをコンパイルしてトレーニングする
損失と精度を含む指標の可視化には、TensorBoard を使用します。tf.keras.callbacks.TensorBoard
を作成しましょう。
Adam
オプティマイザと BinaryCrossentropy
損失を使用して、モデルをコンパイルし、トレーニングします。
このアプローチでは、モデルは約 85% の検証精度を達成します。
注意: 結果は、埋め込みレイヤーをトレーニングする前に、どのようにして重みがランダムに初期化されたかによって、多少異なる可能性があります。
モデルの要約を見ると、モデルの各レイヤーについて知ることができます。
TensorBoard でモデルのメトリクスを可視化します。
語彙の再マッピング
では、語彙を更新し、ウォームスタートでトレーニングを続けることにしましょう。
まず、基本語彙と埋め込み行列を取得します。
新しいより大きな語彙を生成するように、新しいベクトル化レイヤーを定義します。
keras.utils.warmstart_embedding_matrix
util を使用して、更新された埋め込みを生成します。
または
新しい埋め込み行列の初期化に使用したい埋め込み行列がある場合は、keras.initializers.Constant
を new_embeddings イニシャライザとして使用します。以下のブロックをコードセルにコピーして、試して組みましょう。こうすると、語彙に新しい単語があり、より優れた埋め込み行列初期化が必要な場合に便利です。
埋め込み行列の形状が新しい語彙に合わせて変更されたかを検証します。
埋め込み行列が更新されたため、次は、レイヤーの重みを更新しましょう。
新しいテキストベクトル化レイヤーを使用するように、モデルのアーキテクチャを変更します。
以下のように、モデルをチェックポイントから読み込んで、モデルのアーキテクチャを更新することもできます。
新しい語彙を受け入れるようにモデルを正しく更新しました。埋め込みレイヤーは、古い語彙の単語を古い埋め込みにマッピングして、学習の必要がある新しい語彙の埋め込みを初期化するように更新されています。モデルの残りの学習済重みは変更されません。モデルがウォームスタートされ、前回中断された場所からトレーニングが再開します。
再マッピングがうまく行われたかを検証することができます。基本語彙と新しい語彙の両方に存在する語彙の単語「the」のインデックスを取得し、埋め込みの値を比較しましょう。同じであるはずです。
ウォームスタートされたトレーニングを続ける
トレーニングがどのようにウォームスタートされたかに注目してください。最初のエポックの精度は、約 85% で、前回のトレーニングが終了したときの精度に近似しています。
ウォームスタートされたトレーニングを可視化する
次のステップ
このチュートリアルでは、以下の内容を学習しました。
小さな語彙データセットで、センチメント分類モデルをゼロからトレーニングする
語彙サイズが変化したら、モデルのアーキテクチャを更新し、埋め込み行列をウォームスタートする
データセットを拡大し、モデルの精度を絶えず改善する
埋め込みについての詳細は、Word2Vec と 言語を理解するためのトランスフォーマモデルチュートリアルをご覧ください。