統計とイモリとバーベルと

勉強の備忘録メイン

なぜFGOを始めてしまったのか

メモ: Embeddingレイヤについて [keras]

いろいろ間違って理解していそうでアレ

Embeddingとは?

このスライドのp11以降がわかりやすい. カテゴリカル変数をone-hot表現から分散表現に変換する. 名義変数で表現された分析対象を複数の特徴量の組み合わせで表現する. レコードごとの因子得点を計算する操作に近い. 近くもなかった.

言語と画像の表現学習

ていうかこれ書いたの学部1年生なのね…恐ろしい...

なぜEmbeddingするのか?

自然言語処理において,keras.preprocessing.text.Tokenizerなどを用い,ボキャブラリを構築して各単語にIDを割り当てるが,IDそのものは意味を持たず,単語間に存在しうる有力な情報が失われている ② 疎なデータセットの構築につながるため,有効な学習のためには多くのデータが必要になる ③ 文章をトークン化したSequenceでなはない,単一のカテゴリカル変数に対しても,Embeddingをする意味はある.カテゴリカル変数は種々の分析でone-hot vectorに変換して利用されるが,カテゴリ同士が独立であることを仮定していたり,カテゴリ間の意味的な距離関係やカテゴリ間の順序性などが失われたりと,不十分な点も少なくない.また,カテゴリが多い場合には,次元が大きくなりすぎる問題もある.

Embeddingレイヤは具体的に何をしているのか

一般論

one-hot vectorを連続的なベクトル空間にマッピングする.
この結果,意味の近い単語同士が近い位置にマッピングされる等,意味がある程度保存される.また,連続変数に変換される点は,NNを使用する点で重要.

Skip-gramの場合

単語同士の隣接確率を目的変数として隠れ層1のNNを学習する. 学習のoutput(隣接確率のNNベースの予測値)ではなく,学習により得られた隠れ層の重み行列を利用する.

keras.layers.Embeddingでは何をしているのか

input(None, n)をone-hotに変換(None, n, m)してからembedding matrix(m, m)を学習して,output(None, n, m*)のテンソルを返している.
ただし,肝心の学習方法がよくわからない.Skip-gramを使用している? いずれにせよ,学習済みのembedding matrixを掛けているわけではなく,何らかの形で学習をしている模様.テキストをNNに突っ込むなら学習済みの行列を使用したほうが良さそう.

どうやって使うのか

このリンクを参照すればOK. pre-trained matrixを使用する場合についても書いてある.

How to Use Word Embedding Layers for Deep Learning with Keras - Machine Learning Mastery

その他参考リンク集

Embeddingレイヤー - Keras Documentation

qiita.com

qiita.com

[1604.06737] Entity Embeddings of Categorical Variables