らんだむな記憶

blogというものを体験してみようか!的なー

ゼロつく 2 (2)

word2vec における分散表現。one-hot エンコードをした 2 つのコンテキストのベクトルを線形層に放り込んで低次元に落として、再度線形層に放り込んで one-hot ベクトルを得る。i say hello という文章で言えば、ihello がコンテキストで say が出力であるところのコンテキストが定める単語ということになる。これをコンテキストから単語を生成する “エンコーダ-デコーダネットワーク” と考えるなら、'say' = dec(enc('i'), enc('hello')) という形になる。ということは、dec にわたる引数は i の潜在表現と hello の潜在表現になる。適当に 4 つの単語のテキストを考える時に hello に対応する one-hot 表現が $\begin{pmatrix}0 & 0 & 1 & 0\end{pmatrix}$ として、このエンコードのプロセスは例えば

\begin{align*}
\begin{pmatrix}0 & 0 & 1 & 0\end{pmatrix} \begin{pmatrix}
0.91 &-0.42 & 0.8 \\
0.84 & -0.46 & 0.79 \\
-0.39 & -0.82 & 0.3 \\
0.95 & -0.86 & -0.29
\end{pmatrix}
= \begin{pmatrix}-0.39 & -0.82 & 0.3\end{pmatrix}
\end{align*}

のようになる。つまり線形層の重みの第 3 行が hello の潜在表現ということになる。enc を通した潜在表現は何かしら単語の本質をコード化した分散表現ということになるであろうから、訓練済みの入力層の重みの行を分散表現として採用することには一定の納得感があるように思われる。

p.103 くらいまでの内容。