embedding algorithm
【 embeddingは行列の因数分解として解釈できる 】 mikalovらの「Word2Vec」の論文はいくつかのバージョンがあるのですが、その計算アルゴリズムは、2013年に、Skip−gramとnegative sampling の手法としてまとめられます。 ただ、2014年には、語の埋め込みのアルゴリズムの背後には、もっと深い構造があることが発見されます。それは、語の埋め込みは、ある行列の因数分解として解釈できるという発見です。 対象の言語の語彙Dを辞書式にアルファベット順に並べます。この並びでi番目の語をw_i とします。以前見たように、このi番目の語に、i番目のエントリーだけが1で残りのエントリーはすべて0の1−hotベクトルに対応付けることができます。 これは、Dから実数Rへの関数ですからR^Dのベクトル空間を考えたことになります。これもある意味、DからR^Dへの埋め込みですが、こうしたベクトル表示では、二つの語のベクトルの内積は0になり、言語の意味をうまく表現できないことは、前回見てきた通りです。 そこで、次のような|D|行 ×|D|列の行列Mを考えます(|D|は、Dの大きさです)。 Mの i行 j列の要素は、語w_iと語w_j に対応して、この二つの語がコーパス上で近くに出現する確率を表すものとします。Dが、例えば、3万語からなるとすれば、この行列Mは、3万行×3万列からなる巨大な行列です。 この行列Mが、|D|と比べるとはるかにちいさなdについて、|𝐷|×𝑑のサイズの行列𝜎′ と、𝑑×|𝐷| のサイズの行列𝜎の積の形で M=𝜎′𝜎 と因数分解できたとします。( 行列𝜎′𝜎のサイズが、|D|行 ×|D|列となることを確認ください。) この時、行列𝜎のi列は、語w_i のd次元のembedding を与えると考えることができます。(行列𝜎のサイズは、𝑑×|𝐷| ですので、どんな語w_i についても、i列目は存在します。また、i列目の列ベクトルの次元はdです。) Deep Learning の最適化の手順に則して語れば、Mが与えられた時、‖𝑀 − 𝜎′𝜎‖が最小となるような𝜎′と𝜎を見つける問題として、embedding のアルゴリズムを定式化できます。 -----------------------------