実際、出力ベクトルは、数学演算を使用して入力から計算されません。代わりに、すべての可能なベクトルを含むテーブルにアクセスするためのインデックスとして、各入力整数が使用されます。これが、最初の引数として語彙のサイズを指定する必要がある理由です(したがって、テーブルを初期化できます)。
このレイヤーの最も一般的なアプリケーションは、テキスト処理です。簡単な例を見てみましょう。トレーニングセットは、2つのフレーズのみで構成されています。
早く会いましょう
またお会いできてうれしいです
したがって、各単語に一意の整数番号を割り当てることで、これらのフレーズをエンコードできます(たとえば、トレーニングデータセットの出現順)。次に、フレーズを次のように書き換えます。
[0, 1, 2, 3, 4]
[5, 1, 2, 3, 6]
ここで、最初の層が埋め込み層であるネットワークをトレーニングしたいと考えてください。この場合、次のように初期化する必要があります。
Embedding(7, 2, input_length=5)
最初の引数(7)は、トレーニングセット内の個別の単語の数です。2番目の引数(2)は、埋め込みベクトルのサイズを示します。input_lengthの argumetは、当然のことながら、各入力配列のサイズを決定します。
ネットワークがトレーニングされると、埋め込み層の重みを取得できます。この場合、サイズは(7、2)で、整数を埋め込みベクトルにマッピングするために使用されるテーブルと考えることができます。
+------------+------------+
| index | Embedding |
+------------+------------+
| 0 | [1.2, 3.1] |
| 1 | [0.1, 4.2] |
| 2 | [1.0, 3.1] |
| 3 | [0.3, 2.1] |
| 4 | [2.2, 1.4] |
| 5 | [0.7, 1.7] |
| 6 | [4.1, 2.0] |
+------------+------------+
したがって、これらの埋め込みによると、2番目のトレーニングフレーズは次のように表されます。
[[0.7, 1.7], [0.1, 4.2], [1.0, 3.1], [0.3, 2.1], [4.1, 2.0]]
最初は直感に反するように思えるかもしれませんが、基礎となる自動微分エンジン(TensorflowやTheanoなど)は、モデルの他のパラメーターと同様に、各入力整数に関連付けられたこれらのベクトルを最適化します。異なるドメインの他のメソッド/人が学習した埋め込みを使用することも興味深いです(https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.htmlを参照) [1]で行います。
[1]López-Sánchez、D.、Herrero、JR、Arrieta、AG、&Corchado、JM適応可能なクリックベイト検出のためのメトリック学習とケースベースの推論のハイブリッド化。応用知能、1-16。