こんな夢を見た

修士学生による自然言語処理研究の記録。主にDeep LearningやEmbedding関連論文の軽い自分用まとめとして。内容に誤りが含まれている場合があります。お気軽にご指摘ください。

Sequence to Sequence Learning with Neural Networks

Sequence to Sequence Learning with Neural Networks
Ilya Sutskever, Oriol Vinyals, Quoc Le, NIPS 2014

不定長のシーケンス(単語列)を入力に不定長のシーケンス(単語列)をLSTMで出力。
機械翻訳の翻訳元の文を(深層の)LSTMで読み取っていって、その後に先の文を一単語ずつ出力していく形式。単語ではなく、""という文終了シンボルが出力されたらそこで打ち切り。それによって出力側の不定長にも対応。出力時には最初は入力文ベクトルを受け取って1単語目を出力、次にそのときのmemory cellに残ったベクトルと「さっき出力した(1単語目の)単語ベクトル」を入力として2単語目を出力、以下繰り返し。学習時には「さっき出力した単語」ではなく逐次「さっき出力すべきだった正しい単語ベクトル」を入力にする。
ちなみに入力文のエンコード用LSTMと出力用のLSTMは別ものとして学習するし使用する。

一単語ずつ出力する、と書いたが、実際には毎回各単語に対して(ソフトマックスで)出力確率を求めて、その最大確率をとるものを出力している。このときに最大確率だけでなく、k-bestの単語をとっていくビームサーチを行って、最終的な複数の単語列のうちでスコア最大のものを出力文として決定することもできる。そうした方が結果はよかった。処理時間はもちろん多めにかかる。(見落としただけかもしれないが、ビームサーチ時の最終的な単語列スコアをどう求めるかは書かれていなかった。単純な確率積だと「長い単語列が著しく確率的に不利になる問題」が起きてしまいそうだが、何か解決策があるのだろうか。昔何かで読んだような……)

また、おそらく今までやられていなかった試みとして「入力文を逆順にして読み取る」ということが行われている。そしてそれは性能向上にかなり貢献している。翻訳前の文の文頭の情報ができるだけ残った状態で、翻訳後の文頭部分を出力できると考えると、似たような構文をもっている言語間であれば一般的に通用しそうだ。その辺の言語ごとの検証とか、誰かやってくれていないだろうか。

実験結果としてはstate-of-the-artの性能に迫った。このモデル単体でも良い性能が出るが、一番性能がよかったのは既存の機械翻訳のモデルで出力候補文上位1000件を用意して、それを本モデルでリランキングするというスタイルだった。どこか別の論文でもリランキングがとても上手く決まるというのを見た気がするので、生成的なDNNは(計算コストの面から見ても)リランキングモデルがかなりフィットしているのかもしれない。
入力文反転、アンサンブル、ビームサーチ、どれもばっちり性能向上に貢献していることが見れる結果で清々しい。コスパのよさでいうと、入力文反転>>>アンサンブル>ビームサーチとなりそうだ(学習計算量と実行時の計算量が入り交じっているが)。

LSTMが深層になっているのだけど、その構造がいまいち明確には書かれていないように思う。イメージはできたけど、それが本当に正しいのか不安。図がほしい。

Learning Semantic Hierarchies via Word Embeddings

Learning Semantic Hierarchies via Word Embeddings
Ruiji Fu, Jiang Guo, Bing Qin, Wanxiang Che, Haifeng Wang, Ting Liu, 2014, ACL

上位下位の意味階層をWord Embeddingから構築(判定)。
ある単語xに対してとある射影行列をかけてyとの距離があるδ以下になれば上位下位関係、という判定の仕方。シンプル(である種ナイーブ)なアイデア。しかし、その射影行列を複数個用意して別々に学習する。ある正例ペアx, yについてオフセット(y - x)を計算して、それをクラスタリングして作って各クラスタで行列1つを学習、という形式。実際に判定するときは与えられた(順序付き)2単語についてオフセットを計算して、そのオフセットが所属するようなクラスタに割り当てられた行列を用いて判定。
スッキリとした話で納得感が高い(それで本当にいけるのか、というお馴染みのベクトル空間の神秘さはさておき)。実験結果もかなり良好のようだ。各上位下位ペアはオフセットによって幾つかのクラスタに分けられる、という根底のアイデアも直接的に実験で確かめられていてとても良い(正例ペアのオフセットをマッピングしたような図が示されていて、しっかりクラスタに分かれているのが見てとれる)。

ただ、手法や実験の方法に対してちょっと誤解しているしれない。晴れぬ疑問がある。実験の際に、①正例「hypernym - hyponym ペア」と②負例「hyponym - hypernym ペア」と③負例「上位下位関係にない単語ペア」を用意してそれぞれで結果を見るのかと思いきや、「①と②は反転しているだけで1対1対応になっているから実験しても結果は同じだし省いたよ」というようなことを言われてしまった。単語xとyについて、x - y と y - x で手法をそれぞれ試したら、オフセットが異なるのだから基本的に異なるクラスターに所属することになり、射影行列も異なるはずだ。となれば、前者で正しいと判定してうっかり後者でも正しいと判定しちゃうこともあるだろうし、逆もまたしかりだと思う。何か決定的な勘違いをしているのだろうか……。

どんな射影行列が出来上がったのか(重みのヒートマップ)も見たかった。例のごとく対角成分は強くて他は弱くて結局まあよく分からない、というオチにはなるだろうけども、クラスタごとバリエーションがある(割と異なる行列が出来上がりました)という確認の意味でも欲しい。

ジャーナル版(http://ir.hit.edu.cn/~car/papers/ieee2015.pdf)もあるけど、眺めた感じ、多分コンテンツはほぼ同じ。

Learning Semantic Word Embeddings based on Ordinal Knowledge Constraints

Learning Semantic Word Embeddings based on Ordinal Knowledge Constraints
Quan Liu, Hui Jiang, Si Wei, Zhen-Hua Ling, Yu Hu., 2015, ACL
project

類似度の順序関係知識を用いたWord Embeddingの学習。
word2vecと外部知識での合わせ技でEmbeddingを作る類の話。とても明瞭なストーリーで実験結果も上々なので、個人的にはこの類(あくまで類似度ベースの指標として外部知識を取り入れる)のアイデアの1つのチェックポイントとして腰を落ち着けた感がある。

ある3単語(a, b, c)を想定したとき、(a,b)と(a,c)とで類似度に差があると直観的に分かる場合がある。例えば、「aとその類義語b」と「aとその反義語c」であれば前者のほうが類似度が高くなるべきで、同様に「aとその類義語(Synset)」と「aとその上位語」であればこちらも一般には前者のほうが類似度が高いといえそうだ。このようなパターンをWordNetと英単語辞書(Fernald, 1896)から抽出して、それらのコサイン類似度が先の直感的な制約を満たすように学習する。厳密には制約ではなくヒンジロスを計算して、それとword2vecの方の目的関数とでバランスよくJointに学習を進めていく。

性能評価は、単語類似度、文内の単語穴埋め、固有表現抽出、TOEFLの類義語選択の4つ。どのタスクでもしっかりと性能が向上した。ただし、固有表現抽出では精度向上がいまいち。単語類似度タスクとTOEFLの問題については直接外部知識が生きるところなので(単語類似度の方は外部知識そのままではrankingが難しいとはいえ)、個人的にはここが精度向上するだけだと「そりゃ反義語を少し修正すれば上がるのは当然では?」という少しもやっとする気持ちが残る。実際に、単語類似度タスクでは「類義-上位」無しで「類義-反義」のパターンのみ使った時のほうが性能が上がっていたので、やはりその気持ちは正しいように思える。
しかし、単語穴埋めもちゃんと精度向上しているので、広い意味でqualityが上がったという納得感がある。少々執拗なツッコミかもしれないが、単語類似度タスクやTOEFLタスクにおいて行った単語比較のうちで、どれほどがWordNet等で直接学習可能だったペアなのかも少し知りたいところだった。
固有表現抽出の精度向上しない理由が気になる。どんな分類器を使ったとかは本論文には書いていなかったので(cite先の論文には書いてあるだろうが)わからないが、元々評価として不適なものなのかもしれない。

Future workとして他のNLPタスクでも評価してみたいというようなことが述べられているが、あまりそっち方向追っても仕方がない印象(性能向上の理由に深く踏み込むコメントはあまりされていないし)。個人的には定性的な分析をもう少し見てみたい。「学習後の単語ベクトルの (ベクトル空間内での) 配置をt-SNEとかで見るとWordNet木構造を高次元に写し取った形になっていました」とか「上位下位自体の制約等は加えずとも、類似度(距離)制約を満たすように学習すると自然と元の木構造が実現される」みたいなすごい報告を期待してしまう。そこまでいかずとも、数あるNLPタスクの中であれば、よくあるEmbeddingでの上位下位関係判定の結果とか見てみたい。

Compositional Distributional Semantics with Long Short Term Memory

Compositional Distributional Semantics with Long Short Term Memory
Phong Le, Willem Zuidema, 2015, *SEM

LSTMの機構をRecursive Neural Networkに組み込んで極性分類。
何か壮大にLSTM一般の話の総括でもするのかとタイトルを見て思ったが、実際には細かい話だった。このタイトルは意図的なテクニックなのだろうか。

LSTMをRecursiveに組み込むという少し不思議なモデル化。説明されれば、なるほどと理解はできる。結果的に単なるRecursiveに比べると良い性能となっていた。
モデルを見ると、メモリーセルの情報が木の下部からずっと使いまわされるという感じではない。伝搬は勿論するのだけどメモリー感(?)はない。そもそもRecursiveはRecurrentに比べて成分の大局的な伝搬が通用する方である(が、あまりそのことには触れられていない印象)し、そんなに要らない気はする。
モデル構造から個人的に推察すると、メモリーセル自体に重要な貢献があったという感じはしない。そこよりもインプットゲートによって擬似的にuntiedな重みで2単語を合成できていることがいいのでは、と思う。

良くも悪くもライトな論文で、非常に読みやすくて徹頭徹尾さくさくと話が進んだ。

Learning Word Representations with Hierarchical Sparse Coding

Learning Word Representations with Hierarchical Sparse Coding
Dani Yogatama, Manaal Faruqui, Chris Dyer, Noah A. Smith, 2015, ACL (NIPS WS, 2014)

階層的な次元構造を持った単語ベクトル学習。
各次元ごとに異なったL2正則化項(上手いこと設計したgroup lasso)を持たせて学習することで「まずはこの次元で表現しようとして、もし難しければ無理してでも新たに別の次元を使って表現していく」というようなスタイルでベクトル学習が行える。なるほどと思える目的関数。

そして、驚いたのがその性能のよさ。word2vecやGloVeを筆頭に代表的な単語ベクトルと、類似度タスク、アナロジータスク、単語補完、極性分類で比較している。Semantic analogyが少々苦手なようだが、基本的にはかなり匹敵したり類似度タスクや極性分類では勝ったりしている(対抗馬のベクトルはデフォルトのハイパーパラメータを使って学習しているのでその辺のご愛嬌はあるとはいえ)。ユニークな学習方法として袂を分かちた手法として立派な結果だ。

ただ、specificな文脈を表現するためにはより多くの次元を使うというようなコンセプトを述べていたけど、図3でanimalとhorseとelephatを比較しているときにはどうにもanimalが各次元に渡って大きい絶対値を持っているように見える。要は、性能がよくなったのは良いのだけど、元のコンセプトを支持するような結果がどうにも薄いように感じた。
論文で性能評価に使われているベクトルはスパース性もかなり低いので、そのせいで良いストーリーになっていないのかもしれない。スパース性を高めて解釈を容易にすることもできたが、おそらくは類似度タスクやアナロジータスクの性能が下がるのでそっちは犠牲にした、というような形だろうか。

group lassoについての参考: PFI海野さん