ブログではないです

ブログでなくはないです

Learning to Compute Word Embeddings on the Fly [Bahdanau+, arXiv'17]

https://arxiv.org/abs/1706.00286

概要

Bahdanauの新作。従来の統計的テキスト処理では未知語はUNKトークンに変換された上で共通のものとして扱われるが、そこをWordNetの単語の定義文をエンコード(各単語ベクトルの平均 or LSTMの最終ステート)した補助ベクトルを加えて補うことで未知語についても意味が獲得できるよね、という話。QA (SQuAD), Entailment (SNLI), 言語モデルの3タスクで評価。

基本的な未知語処理のモデルは下図の通りで、それぞれのタスクのベースラインとなるモデルにおいて文をエンコードする際通常のLSTMなどの代わりにこのエンコーダを使うだけ。 また、本研究ではmulti-word expressionについては取り扱っていない。

補助ベクトルとして(1)定義文からなるベクトル表現を用いた場合 (2)定義文の代わりに単語の文字列情報を入れる (“word” という単語に “w o r d” という定義文を与える) 場合 (3)大規模な外部データで事前訓練したGLoVeを用いた場合 の3種類で比較。

f:id:jack_and_rozz:20170905164942p:plain:w400

QAについては[Xiong+ ICLR'17] のモデルがベース。コンテキスト文と質問文をそれぞれエンコードした後それらのベクトル表現をこねこねしてquestion-document representationと呼ばれるものを作り,そこから2つの出力層を使って回答スパンの開始と終了位置を求めるのだとか。 こねこねする部分が微妙に複雑でなんでこんな計算にしてるのか元論文読まないといまいち意図が把握できない。最近のQAこんなんばっかりだ。

f:id:jack_and_rozz:20170905201445p:plain:w300

結果は上の表の通り。devセットの評価では未知語について文字ベースでスペル情報を入れると大きく改善、肝心の辞書情報の方の寄与はやや低め。(ただtestセットでは逆転しているので1~3%程度ならこの精度帯だと誤差?) また、結局一番良いのはGLoVeを用いたときで、それすらも現時点でのSQuADの公式サイトのランキングを見るとまだまだ上位陣 (EM: ~78%)には及ばない。そもそもベースラインがしょぼい。QAでSOTAを取ることが目標というわけではないのだろうけど。
これらを全部同時にやった時の場合は実験しなかったのだろうか?まあまだarXiv版だからこれから色々追加実験するのかもしれない。 他のタスクについても性能向上への寄与は同じような感じ。

また、Future workとして (1) 定義文中の未知語はどうするのか? (2) cyclicな定義はどうするのか(右の反対が左、左の反対が右とか) を上げている。 前者については同様の処理を繰り返す(つまり定義文中の未知語についてもその定義文を用いる)ことが自然だと考えられるが、計算量やメモリの観点からそれを素直にやるのは辛そうだとのこと。この2つは上手いこと解決できたら面白いと思う。

感想

GLoVeによる初期化を"data-rich scenerios" と言っているが、低頻度語・未知語について定義文を得るのと大量のunlabeled dataを得るの、どちらが簡単かなあ? wordnetに定義として登録されてるレベルのちゃんとした表現はむしろ問題になる低頻度語・未知語ほど手に入りにくくなるんじゃないかとも思うので、新しめのエンティティについても 定義文らしいものが早期に記述されるであろうWikipediaのデータを用いた疑似定義文でも有効だよ、ということを実験したほうが良かったのでは。 *1

また、単語の定義文を使うといってもある単語に紐づく lexicon / synsetは複数あるためそこのWSDが必須になると思うのだがそこの処理についての詳しい記述が見当たらなかった気がする・・・?どうしているんだろう。

*1:と思ったらそれもfuture workにあった。データの作成が面倒だったとかそういう・・・?