Learning Deep Structured Semantic Models for Web Search using Clickthrough Data

大学の4年生ともなるので、"ちゃんと"論文を読み込んでストックしたいと思い、ブログに読んだ論文を簡単にまとめていきたい。
巷では「百本読むまで人権無し」とも言われるそうなので、できるだけある程度の頻度でアウトプットしていければなと思っている。

(そういうことはないよう努力は尽くすが)間違っていることもあるだろうから、読まれる方はぜひ鵜呑みにせず、遠慮無くご指摘いただきたい。

3行で

  • 3層のニューラルネットを用いて
  • Word Hashingと呼ばれる次元削減手法で効率的に
  • 文章の潜在意味が学習できた

概要

de:code 2016にてMicrosoftの女子高校生風会話エージェント「りんな」のバックエンドについてのセッションがあったのは記憶に新しい人も多いだろう。

http://internet.watch.impress.co.jp/docs/event/20160526_759214.htmlinternet.watch.impress.co.jp

見てみると「DSSM + RNN-GRU」で実現されているらしい。
RNNは「まあそうだよな」という一方、「DSSMってなんだ?」という疑問があったので、元論文を読んでみた。
それが今回の論文で、Microsoftが2015年にpublishした論文だ。

元々はWeb検索において、検索クエリとクリックしたページ(Clickthrough Data)の組をベースにして、文章の潜在意味を学習したいというのが動機だ。
文章の潜在意味解析としてはpLSA (probabilistic Latent Semantic Analysis)やLDA (Latent Dirichlet Allocation)が有名なのだが、いかんせん前者は巨大行列の演算、後者は確率分布の推定のためコストが非常に大きい。
Web検索のバックエンドとしてはリアルタイム性が要求されるだろうから、これらのモデルを素朴に用いるのは難しい。

本論文で提案されたのは、3層のDeep Neural Networkであり、最初の1層は非線形活性化関数なしの次元削減層(Word Hashing)だ。
これにより、従来のモデルより精度を上昇させることができたという。

関連研究

潜在意味解析の分野では、昨今2種類の研究がなされている。

1つ目は潜在意味モデルで、よく知られている例が共起行列の特異値分解だ。
共起行列を特異値分解すると、直感的には2つの単語の共起の強さが特異値として求まる。
この共起の強さを意味の類似度と考えることができ、セマンティクスによるクラスタリング等ができる。

2つ目はDeep Learningである。Hinton自身がやっていたらしいのだが、Deep RBMで元クエリを復元できるよう訓練し、中間層で最も次元を落とした層の出力をセマンティクスと捉えるという手法だ。
しかし、どうもクエリの復元には適しているものの、セマンティクスとして捉えるには不適当なのか、従来のモデルに比べ精度が出ないらしい。
さらに、普遍的な自然言語を扱うと単語数が爆発するが、この手法では高々2000words程度しか扱えない。これを超えると計算終了できない。

この論文では、ある意味で両者の折衷案を取ったことになる。

提案手法

f:id:levelfour:20160531082504p:plain
(図は論文から引用)

この論文ではDeep Structured Semantic Models; DSSMというモデルを提案している。
Deepという語を冠する通り、基本的にはDeep Neural Networkだ。隠れ層数は3層である。
ただし、1層目は非線形活性化関数を出力にかけない。他の層の活性化関数はf=\tanhだ。

l_1=W_1x
l_i=f(W_il_{i-1}+b_i)
y=f(W_4l_3+b_4)

さらに、W_1は訓練しない。本文中ではn-gramベースの変換と表現されている。
元の入力クエリはone-hotベクトルxとして与えられる。当然one-hotなので、次元数は非常に大きい。事実、Figure 1では50万次元で与えられている。
ここでn-gramを用いて次元削減する。例えば

latent semantic analysis

というクエリが与えられた場合、one-hotでは(latent=1, semantic=1, analysis=1, otherwise=0)というベクトルになるが、2-gramの場合

#l, la, at, te, en, nt, t_, _s, ... , is, s#

となる。実装では3-gramを使っていて、入力次元数が50万の場合、3-gram変換によって3万次元まで落ちるそうだ。

3-gramの場合、素朴には"#"と空白とアルファベット26文字と数字10文字の計38文字の順列なので{}_{38}P_3=54872で、3万次元という結果にもうなずけるのだが、2-gramの場合は{}_{38}P_2=1444で、Table 1では1607次元まで落ちるとあるが残りの150次元はどこから降ってきたんだという気がする(?)

DNNを経て得られた128次元の潜在意味出力y間で、今度はコサイン類似度をとる。

\displaystyle R(Q,D)=\frac{y_Q^\mathrm{T}y_D}{\|y_Q\|\|y_D\|}

これでクエリとクリックしたページの関連性が得られるので、ドキュメントの特徴として捉えられた。
最後にクエリからドキュメントが生成される事後確率をsoftmax関数で得る。

実験

実験で用いられたデータは、サーチエンジンの16510個のクエリログだ。平均的に各々のクエリは15個のドキュメントと紐付いている。
そしてなんと、クエリとドキュメントの関連度を0〜4の5段階で人間がラベリングしたらしい
その労力も然ることながら、恣意性はどうなんだという気もするが、これがまだまだ教師付き学習における課題なのだろう。

感想

これだけのモデルで精度を上げられるのはDeep Learning時代様様という感じだが、やはり得られたセマンティクスにはどういう意味があるのか(ないのか?)気になってしまう。
そもそも自然言語シンタックスとセマンティクスに強い結びつきがあるのは人間の思い込みかもしれないので、求まったセマンティクスに意味を求めるのも見当違いなのかもしれない。
実際にりんなでそれなりの会話精度が出ているので、あながち明後日の方向を向いているわけではないのだろうが。