単語の分散表現に pre-trained なものだけを使い, RNN 部分は一切訓練せずテキスト分類を解く.
訓練済みの単語ベクトルによって, 文 (単語列) について分散ベクトルの列 \(e_1,\ldots,e_n\) を得る. 列を読む RNN のような \(f_\theta\) を以て
\[h = f_\theta(e_1,\ldots,e_n)\]で分類DNNを構成するが, ここで, パラメータ \(\theta\) を一切更新せずランダムに初期化したままにする. ということは教師ラベルは要らない!!
この \(f_\theta\) の計算に次の3通りを試す.
Bag of Words 的に扱う.
単語ベクトル \(d\) 次元について 各成分を \(\left[ -\dfrac{1}{\sqrt{d}}, \dfrac{1}{\sqrt{d}} \right]\) で一様ランダムに作った行列 \(W \in \mathbb{R}^{D \times d}\) を用いて, \(e \in \mathbb R^d\) について,
\[h = f_{\text{pool}}(W e_1,\ldots,W e_n)\]とする. また \(f_{\text{pool}}\) は何かしらのプーリングで, \(\sum(x)\) , \(\max(x)\) , \(\sum(x) / |x|\) など. また適宜 \(\max(0,h)\) で活性化もする.
パラメータを \(\left[ -\dfrac{1}{\sqrt{d}}, \dfrac{1}{\sqrt{d}} \right]\) で一様ランダムに初期化して, また hidden size を \(d\) にした BiLSTM によって列を読む. これで読んだ値をプーリングする.
\[h = f_{\text{pool}} (\mathrm{BiLSTM}(e_1,\ldots,e_n))\]これは [Jaeger, 2001] で提案されたもので, 入力列について各成分のラベルを予測するようなもの. つまりラベルの列が出力.
もちろん \(W^i, W^h, b^i\) はランダムに初期化するパラメータ. \(\alpha \in (0,1]\) は適当に決めるパラメータ.
予測ラベルは更にこう:
\(W^o,b^o\) はランダムで決まるパラメータ.
以上のようにして列を読んで列を返す手続きを ESN とするとき
\[h = \max(\mathrm{ESN}(e_1,\ldots,e_n))\]\(h\) からラベル予測はさすがに普通に教師あり学習??
評価には SentEval を使う.
最新手法をさすがに超えはしないがベースラインにはなると言っている. そして結構迫るくらい精度を出してる.