埋め込みとは、自然言語処理(Natural Language Processing, NLP)の文脈では、自然言語などの文章や単語を、数値的に扱えるようにベクトル化することを示します。
Embedding(埋め込み)の目的
埋め込みの主たる目的は、冒頭で述べたように、単語や文章を計算機で扱えるようなベクトルデータに変換することです。
通常の機械学習の入力はほぼ必ずベクトルになるので、自然言語などは何かしらの方法でベクトルの形式にする必要性があります。また文章だけでなく、カテゴリカルな値も、ベクトル化してあげる必要性があります。
通常、文章や単語などをベクトル化する手法として、one-hot-encoding(1-of-K表現)が知られています。しかし、実際には、one-hot-encodingはほとんどの値が0になる、スパース行列 になってしまうため、計算機のメモリを大量に使用してしまうため、かなり非効率です。
また、うまく埋め込みできると、モデルの認識精度が上がる可能性があります。
Embeddingの実装や仕組み
埋め込み層は、シンプルに全結合層(Dense)として実装されることが多いようです。
pytorchでは、nn.Embedding()として実装されています。
Embeddingで嬉しいこと
単語をEmbeddingすると、嬉しいことがあります。それは、単語をベクトルで表現することができるので、類似している単語をベクトルの類似度の指標で評価することができるようになることです。
ベクトルの類似度の指標としてはよく、コサイン類似度が利用されます。似たような単語埋め込みベクトルのコサイン類似度が高くなるように、埋め込みEmbeddingの重みパラメータを学習することで、単語の類似度などをモデルで評価できるようになります。