Coda

論文メモ Skip-Thought Vectors

September 11, 2020

様々なタスクで性能を発揮できる文の分散表現を生成するモデルSkip-Thougtを提案した。 表題のSkip-Tought Vectorsは、Skip-Toughtで生成されるベクトルである。 Skip-Thoughtは、文書を入力とする教師なし学習であり、与えられた文から隣接する左右の文を推定できるようにパラメタを学習する。 学習後は、語彙を増やすために、Word2Vecの単語のベクトルからSkip-Toughtのベクトルを推定するための正則化なしの回帰モデルを学習させる。 学習データにない単語のベクトルを回帰モデルの推定結果で代用し、未知の単語を含む文の分散表現もつくれるようにする。 Skip-Toughtを8タスクに適用し、汎用性を確かめた。

モデルは、GRUつきのRNNをもちいたencoder-decoderである。 \(i\)番目の文を\(s_i\)として、事例を\((s_{i-1}, s_i, s_{i+1})\)とおく。 また、\(s_i\)の\(t\)番目の単語\(w_i^t\)の分散表現を\(\mathrm{x}^t_i\)とする。 このとき、次のencoderの隠れ状態\(\mathrm{\boldsymbol{h}}_i^t\)が\(w_i^1, \dots w_i^t\)の分散表現となる。 以下の式では添字\(i\)を省略している。

$$ \begin{align} \mathrm{\boldsymbol{r}}^t &=\sigma (\boldsymbol{\mathrm{W}}_r\mathrm{\boldsymbol{x}}^t+\mathrm{\boldsymbol{U}}_r\mathrm{\boldsymbol{h}}^{t-1})\\
\mathrm{\boldsymbol{z}}^t&=\sigma(\boldsymbol{\mathrm{W}}_z\boldsymbol{\mathrm{x}}^t + \mathrm{\boldsymbol{U}}_z\boldsymbol{\mathrm{h}}^{t-1})\\
\bar{\boldsymbol{\mathrm{h}}}^t&=\tanh(\mathrm{\boldsymbol{W}}\boldsymbol{\mathrm{x}}^t+\boldsymbol{\mathrm{U}}(\mathrm{\boldsymbol{r}}^t\odot \mathrm{\boldsymbol{h}}^{t-1}))\\
\boldsymbol{\mathrm{h}}^t&=(1-\mathrm{\boldsymbol{z}}^t)\odot \mathrm{\boldsymbol{h}}^{t-1}+\boldsymbol{\mathrm{z}}^t\odot\bar{\mathrm{\boldsymbol{h}}}^t \end{align} $$

decoderは、encoderの出力\(\mathrm{\boldsymbol{h}}_i\)を条件とする条件付き確率に対応する言語モデルになっている。 2つのdecoderが使われ、それぞれ入力文の前の文を推定するものと、後の文を推定するものに対応する。 また、バイアス項として\(\mathrm{\boldsymbol{C}}_z, \mathrm{\boldsymbol{C}}_r, \mathrm{\boldsymbol{C}}\)がある点もencoderと異なる。 後の文を推定するdecoderは次の式をとる。

$$ \begin{align} \mathrm{\boldsymbol{r}}^t &=\sigma (\boldsymbol{\mathrm{W}}^d_r\mathrm{\boldsymbol{x}}^{t-1}+\mathrm{\boldsymbol{U}}^d_r\mathrm{\boldsymbol{h}}^{t-1}+\mathrm{\boldsymbol{C}}_r\mathrm{\boldsymbol{h}}_i)\\
\mathrm{\boldsymbol{z}}^t&=\sigma(\boldsymbol{\mathrm{W}}^d_z\boldsymbol{\mathrm{x}}^{t-1} + \mathrm{\boldsymbol{U}}^d_z\boldsymbol{\mathrm{h}}^{t-1}+\mathrm{\boldsymbol{C}}_z\mathrm{\boldsymbol{h}}_i)\\
\bar{\boldsymbol{\mathrm{h}}}^t&=\tanh(\mathrm{\boldsymbol{W}}^d\boldsymbol{\mathrm{x}}^{t-1}+\boldsymbol{\mathrm{U}}^d(\mathrm{\boldsymbol{r}}^t\odot \mathrm{\boldsymbol{h}}^{t-1})+\mathrm{\boldsymbol{C}}\mathrm{\boldsymbol{h}}_i)\\
\boldsymbol{\mathrm{h}}^t_{i+1}&=(1-\mathrm{\boldsymbol{z}}^t)\odot \mathrm{\boldsymbol{h}}^{t-1}+\boldsymbol{\mathrm{z}}^t\odot\bar{\mathrm{\boldsymbol{h}}}^t \end{align} $$

\(\mathrm{\boldsymbol{V}}\)を\(w_{i+1}^t\)に対応する行ベクトル\(\mathrm{\boldsymbol{v}}_{w^t_{i+1}}\)をもつパラメタとすると、

$$P(w^t_{i+1}\mid w^{<t}_{i+1},\boldsymbol{\mathrm{h}}_i)\propto\exp (\mathrm{\boldsymbol{v}}_{w^t_{i-1}}\mathrm{\boldsymbol{h}}_{i+1}^t) $$ となり、目的関数は次になる。

$$ \sum\log P(\mathrm{w}^t_{i+1}\mid w_{i+1}^{<t},\mathrm{\boldsymbol{h}}_i)+\sum_t\log P(w_{i-1}^t\mid w_{i-1}^{<t},\boldsymbol{\mathrm{h}}_i) $$