ブログではないです

ブログでなくはないです

Learning Distributed Representations of Texts and Entities from Knowledge Base [Yamada+, TACL'17]

https://transacl.org/ojs/index.php/tacl/article/view/1065/257

概要

ざっくり言うとword embeddingと同時にentity embeddingを学習するモデル (NTEE) を提案して、実際に学習したembeddingを色々なタスクで用いて評価したよ、という論文。

どう学習するかというとWikipediaのテキスト中のリンクをエンティティとみなして、あるテキストtにエンティティeが登場するか否かのモデルを最適化することによって モデルは具体的には以下の式の{ \displaystyle P(e|t)}を最適化する。{ \displaystyle v_e}がエンティティemb, { \displaystyle v_s}が文のベクトルで,文のベクトルをどう作るかというと文中の単語ベクトルの平均を取って変換を掛けるだけ。*1


実験

(1) Semantic Textual Similarity Semantic(2つの文の意味的な類似度のスコア計算), (2) Entity Linking, (3) Question Answering の3つのタスクによって提案モデルによって学習されたWord/Entity embeddingの評価を行う。具体的にはそれぞれのタスクのモデルにおけるembeddingの初期化をする際に、提案手法で学習したものを用いる場合と通常のskip-gramなどによるものを比較。 *2

(1) のタスクについては2つの文のベクトルさえ得られれば良いのでembeddingの学習の際のモデルと同様の構造でOK。
(2), (3)のタスクについてはどちらもテキストに対して回答となるエンティティを指定するタスクであり、 下図のような事前にテキストの表層などの手がかりから絞り込んだ回答候補(今回は100候補)のentity embeddingと、前述した方法で計算する文のベクトルからスコア付けをするモデルで解いている。 よくある分類問題のように全エンティティ数次元の確率分布を出力するようなモデルにしていないのはエンティティ数が膨大なのでソフトマックス計算のコストが大きいからということだろうか?

結果は以下の表の通り。どのタスクについても提案手法(NTEE)による改善が見られる。EL,QAタスクでは回答候補は文中に出現する単語とは違いエンティティなので別個にベクトルを用意すると改善するよ、というのは分かり易いが、一方で驚きなのがSTSタスクでは使うのは2つの文のベクトルだけ、つまりEL, QAタスクのようにentity embeddingは使うことはなく,entityを推定するタスクの中で学習したword embeddingを使うだけでこれだけの改善が得られているという事になる。 他タスクで学習したword embeddingを初期化に使うというのはある種のシーケンシャルに行うマルチタスクであるような気もするので、その際のサブタスクとしてエンティティ推定タスクは良さそうという話なのだろうか。


*1:2番めの式, 文のベクトルの計算について、活性化関数を挟む記述が無かったがこれだと無駄に線形変換してるだけにならないだろうか・・・?省略しただけ?

*2:learned representationを使う、ともNTEEを使う、とも記述があり、単語ベクトルの平均取った後の変換部分も共有しているかどうかは不明。

共参照解析の評価指標

以前読んだ共参照解析の話をはじめ最近の話で評価に用いられるconll 2012 shared taskの評価指標であるMUC,{ \displaystyle B^3}, { \displaystyle CEAF_e}辺りが馴染みがなかったので 自然言語処理シリーズの文脈解析を片手に調べた3.3節のメモ。この辺全く詳しくないのでなんか間違いがあるかも。

まず,多くの場合評価は同一エンティティを指す言及の集合に対して行われる。 個々の先行詞-言及のペアについてPrecision/Recallを出す方法も出来なくはないが,それだと例えば正解が { \displaystyle \{A_1 \leftarrow A_2,  B_1 \leftarrow B_2 \}} であった時,システムが { \displaystyle \{A_1 \leftarrow B_1,  B_1 \leftarrow B_2 \}} というリンクを推定した場合と{ \displaystyle \{B_1 \leftarrow A_1, A_1 \leftarrow B_2\}} というリンクを推定した場合で、どちらも{ \displaystyle A_1, B_1, B_2}の3つを同じエンティティに対する言及の集合だと考えているにも関わらず結果が異なってしまう。

MUC (Message Understanding Conference)

上記の問題を解決するために,MUCでは「正解データのそれぞれの集合を生成するのに必要となるリンクのうちいくつをシステムが生成したか」でRecallを,逆に「システムが生成したそれぞれの集合を生成するのに必要となるリンクのうちいくつが正解データに含まれていたか」でPrecisionを評価する。 p97の図が分かりやすい。

具体的にどう計算するかというと

{ \displaystyle Recall = { {\sum_{i=1}^{N_k} (K_i - p(K_{i}))} \over {\sum_{i=1}^{N_k} (K_i - 1)} }  }

{ \displaystyle Precision = { {\sum_{i=1}^{N_r} (R_i - p'(R_{i}))} \over {\sum_{i=1}^{N_r} (R_i - 1)} }  }

{ \displaystyle K_i , R_i}は正解データ / システム出力のi番目のエンティティに関する集合の要素(言及)数,{ \displaystyle p(K_i)}{ \displaystyle K_i}の要素をシステム出力における集合ごとにまとめたもの,{ \displaystyle p'(R_i)}{ \displaystyle R_i}の要素を正解データにおける集合ごとにまとめたもの(別々のクラスタだとみなした数),{ \displaystyle N_k , N_r}は正解データ / システム出力におけるエンティティの数。

Recallを例に式の意味を説明すると,{ \displaystyle K_i}個の要素があった時にそれら全てを繋いだグラフ(正解データ)を作るのに必要なエッジの数が { \displaystyle K_i - 1}本 (分母)で,そこからエッジが1本減るごとに細かいグラフに分かれる(分子)ので,逆に言うとグラフがどれだけ細かく分かれてしまっているかで足りないエッジの数が計算出来るということ。

しかしMUCはなるべく多くのリンクを出力したほうが良いスコアになりがちであったり,例えば正解データが{ \displaystyle K = \{\{a,b,c\} \{d,e,f,g\}\} }であったとして,システムの出力{ \displaystyle R_1 = \{\{a,b,c, d,e,f,g\}\} }{ \displaystyle R_2 = \{\{a,b,c\}, \{d,e,f,g,h\}\} }を比べた時に本来異なる2つのエンティティを同一の集合で考えてしまっている前者と,関係ないリンク({ \displaystyle h})が1つ紛れ込んでいるだけでそれ以外はほぼ完璧な後者が同じスコアになるなど問題点もあるため,{ \displaystyle B^3}やCEATが提案されたらしい。

{ \displaystyle B^3} (B-CUBED)

{ \displaystyle B^3}での計算式は以下の通り。

{ \displaystyle Recall = {\sum_{i=1}^{N_k}\sum_{j=1}^{N_r} {{|K_i \cap R_j|^2 } \over {K_i}}  \over {\sum_{i=1}^{N_k} K_i}}   }

{ \displaystyle Precision = {\sum_{i=1}^{N_k}\sum_{j=1}^{N_r} {{|K_i \cap R_j|^2 } \over {R_j}}  \over {\sum_{j=1}^{N_r} R_j}}   }

Recallを例にとると,正解データの各要素についてシステムの出力でも同一の集合に含まれるものの割合を計算({ \displaystyle \sum_{j=1}^{N_r} {{|K_i \cap R_j|} \over {\cdot}}  } まで)して各要素ごとのRecallを出し,その平均を取って全体のRecallとしている。*1

CEAF

MUCやB-CUBEDは正解データとシステム出力それぞれの集合だけが与えられればそれぞれの集合間の対応を気にせず*2に計算できるタイプの評価指標だったが、 CEAFはスコア計算時にスコアがよくなるように対応付けを取った上で計算をするタイプ。*3 { \displaystyle CEAF_e}{ \displaystyle CEAF_m}などいくつかバリエーションがある。

{ \displaystyle CEAF_m}はそれぞれのペアのRecall / Precisionの重み付き平均を取るだけ。 { \displaystyle CEAF_e}

類似度関数 { \displaystyle \phi_4 (K_i, R_j) = {{2 \times |K_i \cap R_j|} \over {K_i + R_j}} } を用いて, 全ペアの総和を { \displaystyle N_k}で割ったものがRecall, { \displaystyle N_r}で割ったものがPrecision となる。

*1:2乗しているように見えるのはRecallが{ \displaystyle \sum_{j=1}^{N_r} {{|K_i \cap R_j|} \over {R_j}}  }となる要素の数が{ \displaystyle |K_i \cap R_j|} 個あるからある種の重み付き平均を取っている。ここ理解するの苦戦した

*2:{entity0: {a,b}, entity1:{c}} と{entity0:{c}, entity1:{a, b}}を区別しない

*3:ここの対応付けをどう取っているのか分からなかった。まさか全通り試すの?

Evaluation Metrics for Machine Reading Comprehension: Prerequisite Skills and Readability [Sugawara+, ACL'17]

http://www.aclweb.org/anthology/P/P17/P17-1075.pdf

概要

Reading Comprehension(RC) タスクの目的の1つはモデルがどの程度文章を理解できるのかを測ることであり,コンテキストとなる文章を読んで関連する質問に答えられるかを問うことでそれを行う。
しかしあるデータセットに設定された問題が解けるということが本当にその文章を理解していることになるのか?(十分条件なのか?)と言われると実はそれはそうでもなく,例えば質問文とほとんど同じ文がコンテキストの中に表れる場合など,コンテキストを理解していなくても質問文とのマッチングを取るだけで解けるような問題が作れてしまう。逆に,文章が幼児向けのものであっても質問への回答には多くの推論や常識の把握が必要となるようなものも存在する。

そうした理由から,RCタスクにおいて必要となる能力を Prerequisite skills(共参照や常識、因果関係の把握など,質問に答えるために必要とされる能力)と Readability(文章の長さや単語の種類の多さなど,文章を読むために必要とされる能力)の2つに分けて考え,最近の主なデータセットについてアノテーションを行いその難しさと,またその2つの能力がどの程度相関するのかを分析している。基本的にRCタスクをやる人のモチベーションとしてはどちらかと言うとPrerequisite skillsの方を問いたいはずなので、Prerequisite skillsが高くReadabilityが低いデータセットほど使い勝手が良いということになるのかな。

対象のデータセットはQA4MRE, MCTest, SQuAD, Who-did-What (WDW), MS MARCO, NewsQAの6つ。 以前いろいろ読んだ CNN/DailyMail DatasetやCBTestについては,前者は回答の曖昧性が高い問題や共参照解析のミスが多いという理由,後者はRCタスクというより言語モデルタスクであるとの理由から*1 対象データセットに入っていない。

結果

個々のデータセットについての分析結果としてはQA4MRE, WDWあたりがPrerequisite skills, Readability共に高くかなり難しめのデータセット、 それ以外の4つについてはPrerequisite skillsは低め。ただその中でもMC Testは元が子供向けの文章であることからReadabilityがかなり低い。QA4MRE,WDW, MARCOについてはデータの作り方が原因となってか回答不能な問題が多い (10~27%) のが気になる所・・・。また目的の一つであったPrerequisite skills, Readabilityの相関関係については正直あんまり無さそう。まあ直感的にはReadabilityが高かろうが低かろうがPrerequisite skillsは質問文をどう作るかで大半が決まるわけでそりゃそうだよねという感じ。 また,質問に応えるために読む必要のある文の数も似たり寄ったり (1.04 ~ 1.18 sentence) で,今のRCタスクは大体必要な箇所の1文を読むだけで解けてしまうような問題ばかりだということらしい。(ただしコンテキスト文全体から必要箇所を探すための労力については別問題)

感想

面白かった。とりあえず新し目のデータセットで精度競争を繰り返すだけになりがちなRCタスクで、そのタスクが解けると何の能力があると言えるのか?をちゃんと分析しているあまりないタイプの研究。最近流行りのSQuAD, MS MARCOなんかはやはりAverage prerequisite skillsが低く,そうなると多分単純にコンテキストの狭い範囲と質問文とのマッチを適切に取れるかがかなり重要になるのだろう。ニューラルモデルでどうアテンションを取るかみたいな研究が大量発生するわけだ・・・ 逆にモデルに◯◯を理解させたいと思って新しい提案手法を考えても,使うデータセットによってはその能力を必要としない場合があるわけでちゃんとモデルの提案or評価時に実際のデータを意識しなきゃいけないなあという感想。

参考リンク

筆者のRC task overview のスライド
最近の主なQAのデータセット一覧

*1:ここの理由が良く分からなかった。関連研究で議論されているんだろうか

Dynamic Entity Representations in Neural Language Models [Ji+, EMNLP'17]

https://aclanthology.coli.uni-saarland.de/papers/D17-1195/d17-1195

概要

言語モデルとjointlyに共参照解析をして文章中のエンティティへの言及を元にその分散表現の更新を動的に行い,現在の隠れ状態に加えて最近登場したエンティティの分散表現を考慮することで性能を良くしましたという話。 slideshare解説スライド があった。

提案手法

ベースラインは普通のRNN言語モデル。提案手法ではこれに加えて,下図の

{ \displaystyle r_{t}} (エンティティであるかの 0/1)
{ \displaystyle e_{t}} (文章中に出てきたどのエンティティであるかのインデックス。{ \displaystyle r_{t}} = 0 なら{ \displaystyle \phi}が入る)
{ \displaystyle l_{t}} (複数語から構成されるエンティティについて、その単語を含めて残り何単語か)

を各タイムステップの隠れ状態から推定しながら単語を読み進めていく。

f:id:jack_and_rozz:20170929005541p:plain:w400

具体的なアルゴリズムとしては各時刻以下の処理を繰り返している。

  1.  { \displaystyle l_{t-1}} == 1 なら(次に読む所が複単語表現の途中でなければ) 前時刻の隠れ状態とrのembedddingを元に{ \displaystyle r_{t}}を推定 (eq. 3)

    1.1.  { \displaystyle r_{t}} == 0 なら(今読んでいる単語がエンティティの一部ではないなら) { \displaystyle L_{t}} = 0, { \displaystyle e_{t}} = { \displaystyle \phi} として3. へ

    1.2. { \displaystyle r_{t}} == 1 なら (eq.4) によってどのエンティティであるかを推定、新しく登場するエンティティならembeddingを追加 (eq.7) して現在注目しているエンティティを表す{ \displaystyle e_{current}} を選択。 *1

    1.3. (eq.5) によって{ \displaystyle l_{t}} (このエンティティを示す単語が後いくつ続くか) を推定。

2. { \displaystyle l_{t-1}} > 1 なら{ \displaystyle l_{t} = l_{t-1} - 1,    r_{t} = r_{t-1},   e_{t} = e_{t-1} } (残り単語数を減らすだけ)
3. 隠れ状態と{ \displaystyle e_{current}}を元に次時刻の単語を予測。 CFSMという段階的な推定を行うことで計算量を削減するソフトマックスを使用している。 (eq.6)
4. 次時刻の単語をRNNにフィード
5. { \displaystyle e_{current}}の分散表現を更新 (eq.8),1.2で使う全エンティティの分散表現リストにも更新を適用。

f:id:jack_and_rozz:20170929010556p:plain:w250
f:id:jack_and_rozz:20170929010558p:plain:w250
f:id:jack_and_rozz:20170929010601p:plain:w250
f:id:jack_and_rozz:20170929010603p:plain:w250
f:id:jack_and_rozz:20170929010606p:plain:w250
f:id:jack_and_rozz:20170929014740p:plain:w250

また,学習では各推定結果についての同時確率を最大化している。 (eq.9)
f:id:jack_and_rozz:20170929015525p:plain:w250

実験

実験では言語モデルのperplexity, 共参照解析に加えて Entity Prediction (下図におけるXXXXが何かを推定。XXXXの右側についての手がかりは使えない)で評価。

f:id:jack_and_rozz:20170929021330p:plain:w300

データセットは共参照解析にCoNLL 2012 shared task on coreference resolution(訓練データサイズは2802 documents, 1M tokens程度)を使用、
また Entity Predictionには InScript corpus(訓練データサイズは619 texts, 12.4 sentences / 24.9 entities / 217.2 tokens per a text on average)を使用。

結果、どのタスクについても改善。ただ言語モデルについてはベースラインが弱すぎる&あまり差分がない感。 Entity Predictionのaccuracyについてはhuman resultが77%強に対してタスク提案者の[Modi+, '17]の結果が63%弱,提案手法が74%強とかなり強そう。 ただHuman resultが77%ってちょっとタスクとしてアレなのでは?プレースホルダの右側が見えてないためそもそも曖昧性が高いような問題(XXXXが主語になっているような場合とか)があるんじゃないか?という気も。

感想

話としては結構好み。モデルも比較的意図がわかりやすい。実装が見たい(公開するといっていたがgithubに何もなかった)

{ \displaystyle l_{t}}の推定は左から順に読んでいく形式では難しいんじゃないか(ここからここまでがあるエンティティを表すフレーズだというのは文全体を見て初めて判断できることなんじゃないか) という気もすると思った。どちらかというと今読んでいる単語が前の単語と複合語をなしているかどうかの 0/1 判定の方が良かったんじゃないだろうか?

結局良くわからなかった点として、提案手法ではエンティティの数は動的に変化するので実際のエンティティのリストとの間でインデックスによる対応が取れないが、 訓練・テスト時にモデルが推定したエンティティと実際のエンティティとの対応をどう取っているのだろう?

*1:eq.4 の f(e) の項にあたる部分の意義がいまいち理解できていない。関連研究追う必要あり?

Gated Self-Matching Networks for Reading Comprehension and Question Answering [Wang+, ACL'17]

https://www.aclweb.org/anthology/P/P17/P17-1018.pdf

概要

SQuAD QAでSOTAを出しましたという論文。会場で発表を聞いていたけどネットワークが複雑で一回だと良く分からなかった。 改めてもう一度読んでも良く分からなかった。一応読んだのでメモ。

SQuADは文書と複数の質問が与えられ,回答となるそれぞれのスパンを文書から見つけるタスク(のデータセット)。train, devデータのみ配布されて、 testデータについては事前に配られず、公式サイト からテストを受けて結果だけを受け取る形式を取るそうな(どうやってるんだろう?) 公式サイトのトップにランキング形式で結果が乗るのがゲームっぽくて人気が出てるのも頷ける。

このタスクを解く際に元文書からどうやってスパンを取っているのかが分からなかった(SQuAD系列をちゃんと読んだことが無かった)ため試しに読んでみた。

モデル

f:id:jack_and_rozz:20170906233826p:plain:w400

モデルは上図。既存研究の積み重ねをフルに使っており,見ての通りとても複雑。図の下から順に,

  • (1. Question and Passage GRU Layer) Bi-RNNで質問文・元文書をwordとcharacter両方使ってエンコードしてベクトル列 { \displaystyle u_{t}^{Q} }, { \displaystyle u_{t}^{P} } を獲得

  • (2. Question and Passage Matching Layer) { \displaystyle u^{Q} } (質問文をエンコードしたベクトル列全体) をattention-poolingして { \displaystyle c_{t} }を獲得し,文書側のt番目のベクトル{ \displaystyle u_{t}^{P} }とconcatしてRNNに入力。それを文書の単語数と同じ回数だけ繰り返すことで{ \displaystyle v_{t}^{P} }を獲得。{ \displaystyle v_{t}^{P} }は文書のt番目の単語が質問文のどの単語とマッチしているかの情報を持ったベクトル。{ \displaystyle c_{t} }獲得の際のattentionには{ \displaystyle u_{t}^{P} }, { \displaystyle v_{t-1}^{P} } が使われる。(対象となる単語と前のマッチ結果を参考にしている)

この際に,RNNの更新時{ \displaystyle  [u_{t}^{P}, c_{t}]  } ではなく下式で表される { \displaystyle  [u_{t}^{P}, c_{t}]^{*} } を使うというのが提案手法その1。 意図としては文書中のある単語と質問文とのマッチ結果のうち、重要じゃないマッチについてはgateで弱めて入力している感じだろうか。

{ \displaystyle  [u_{t}^{P}, c_{t}]^{*} =   g_{t} \odot [u_{t}^{P}, c_{t}]}
{ \displaystyle g_{t} = sigmoid(W_{g} ) [u_{t}^{P}, c_{t}] }

  • (3. Passage Self-Matching Layer) 提案手法その2。 2. で得たマッチングのベクトルに対してもう一度attention-poolingしてBi-RNNに入力。やっている操作は 2. と同じで、アテンション先・アテンション元のベクトルが変わっているだけ。 正直この操作はよく意図が分からなかった。説明では2. でマッチ結果をgateすることによって重要な部分の情報しか残らなくなってしまうから,文書全体の文脈をもう一度獲得するためにself-matchingするんだ・・・と述べていたが、この操作で本当にそれをしたことになるのか?(そもそもattention-poolingする対象が2.のマッチング結果のベクトルなのだから、その時点で文書の細かい情報なんて無くなってしまっているんじゃないのか?)

  • (4. Output Layer) 回答スパンの初めと終わりを推定するレイヤ。気になっていた部分だが、 Pointer Networks [Vinyal+, NIPS'15] (attentionする時に隠れ層のweighted averageをとるのではなく推定した重みのargmaxを取るだけ。どこに強い重みがあるかのインデックスだけを得る) を使うのがトレンドらしい。 その際に使うのが3.でself-matchingを行って獲得したベクトル。

実験結果

f:id:jack_and_rozz:20170907001437p:plain:w350f:id:jack_and_rozz:20170907001441p:plain:w200

既存研究との比較とablation testの結果が上図。ablation testの結果を見るに提案手法(gating, self-matching)はそれなりの効果がありそう。 ただぶっちゃけこれNNにありがちな手当たり次第あちこち繋げてモデルの複雑度を上げたことで良くなっただけなんじゃないの感がある(失礼)

感想

精度競争が激しいタスクにはありがちだけどいまいち研究の大目標が掴めない感じの論文だった。モデルとかなんでこんなことになってしまったんだ・・・

また、重要なマッチングもそうじゃないマッチングも平等に残るのが嫌でゲート構造を導入したとのことだが、それは結局attentionの際に重みの総和を1にしていることに起因するわけで、Dynamic Entity Representation with Max-pooling Improves Machine Reading[Kobayashi+, NAACL'16]のbyway attention(attentionの際に"どれにもアテンションしない"に相当するベクトルを1つ用意する)とかを使えばいいんじゃないか、とも思った。 特に2つのテキストの単語に対応関係のあることが概ね保証されている翻訳と違って、QAなどのタスクではそもそもattentionする必要のない単語がしょっちゅう出てくるんだから。

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にあった。データの作成が面倒だったとかそういう・・・?

cloze-style QA まとめ

cloze-style QAタスク(センター試験のような、文章を読んだ上でその文章に関するクエリのプレースホルダに正解の単語を埋める形式のQA) について読んだやつまとめ。(ある程度読んだら追加)

CNN/Daily Mail QA Dataset

Teaching Machines to Read and Comprehend [NIPS'15] で公開されたデータセット。 このデータセットの面白いところは構築時点でcontext, query共にそれぞれのエンティティが@entity0, @entity1, ... といった形で置換されており、 この処理によってエンティティに関する事前知識を持っていた場合に記事を読まずに質問に答えることを不可能にしている。*1 データサイズとしてはCNNが380K記事、Daily Mailが879K記事前後。

Teaching Machines to Read and Comprehend [Hermann+, NIPS'15]

タスク・データセットの提案に加えて簡単な頻度ベースの選択モデルやFrame-semantic model, Word distance modelといったベースラインとNNベースのモデルを比較。

NNベースでやる場合は回答候補単語 (@entity0 とかのトークン) a, 文書d, クエリqに対して { \displaystyle p(a | d,q) \propto exp(W(a) g(d, q)) } の形で確率を計算。 文書とクエリから構築したベクトルと回答候補aのベクトルの内積になっている。

{ \displaystyle g(d, q)) } の作り方については
(Deep LSTM Reader) : 文書とクエリを区切り文字を使ってくっつけて一気に読む
(Attentive Reader) : クエリベクトルuと,uを用いて文書の各単語にアテンションを掛けたベクトルrの重み付け和を取る
(Impatient Reader) : クエリが1単語読まれる度にその時点でのクエリベクトル{ \displaystyle y_q (i)} と前回の文書ベクトルr(i-1),文書の各単語を用いてアテンションを掛けてr(t) を計算し直す
などをやっている。AttentiveとImpatientには結果(Accuracy) の差はあまりなくニューラルにして5%, アテンションを掛けてもう5%向上といった感じ。

Dynamic Entity Representation with Max-pooling Improves Machine Reading [Kobayashi+, NAACL'16]

以前言語処理学会で見て面白いなあと思っていた研究。[Hermann+, NIPS'15] では文書・クエリのベクトル表現の話が中心で回答候補のベクトルについては特に何もしていなかったが(というよりそれがこのタスクの重要なところじゃないの?という気がするけど)、それに対して文書から動的に対象となるエンティティのベクトル表現を構築することがメインテーマ。

提案手法の工夫は大きく分けて3つ。 

  1. (dynamic entity representation) まずあるエンティティeについて、eが{ \displaystyle \tau}番目の単語として登場するコンテクスト文cをbidirectional LSTMによって読んだときのベクトル表現を { \displaystyle {\textbf d}_{e,c} = tanh(W_{hd} [  {\textbf  h}_{c,T}^{\rightarrow}, {\textbf  h}_{c,1}^{\leftarrow}, {\textbf  h}_{c,\tau}^{\rightarrow}, {\textbf  h}_{c,\tau}^{\leftarrow} ] + {\textbf b}_d) } と表現する事で文脈を伴うエンティティの表現ができる。

  2. (max-pooling) 次に、複数回登場するエンティティについては以前の文脈を踏まえて理解したいため2回目以降に再登場するエンティティについてはこれまでの文脈c'におけるベクトル表現を集めてmax-poolingを取ったもの { \displaystyle {\textbf x}_{c, \tau} = W_{dx} {max-pooling}_{c' \in c} ({\textbf d}_{e, c'}) + {\textbf b}_x } を入力する。

  3. (byway) そのようにしてそれぞれの文脈におけるエンティティのベクトル表現を構築した後、同じくbidirectional LSTMによってエンコードした質問文によってアテンションを掛けることで最終的な文書全体でのエンティティのベクトル表現 { \displaystyle {\textbf v}(e; D,q) } を構築する。またその際に、出力文と入力文のそれぞれの単語(列)が概ね対応している翻訳と違って質問応答では候補エンティティがそもそも正解でない場合、アテンションの重みの総和は1になるようになっているけどどこに注目すれば良いのさ?という問題が起きる。そのため候補エンティティ1単語だけの文を擬似的に追加して、「どれにも注目したくない場合」 のアテンション候補を作っている。(理解が合っているかちょっと自信ない。)*2

結果としては dybanuc entity representation だけだと [Hermann+'15] とほぼ変わらず(62.3%)、 max-pooling と bywayどちらかだけ入れると 8% (!) 上昇、両方入れると 10%ほど上昇(72.0%)。w2vによる初期化もすると 72.9%で、 [Hill+, ICLR'16]のsingle-modelによる結果(68.4%) を超えてNAACL'16 の時点でSOTA。

A Thorough Examination of the CNN/Daily Mail Reading Comprehension Task [Chen+, ACL'16]

Hermannらのモデルのちょっとした改良によるSOTAと、データセットの詳細な分析。結論としてはこのデータセット微妙じゃないか?というもの。

Hermannらの論文に対するモデルの変更点はアテンションを取る時に質問とパラグラフの一文の重み付け和を取ったもののtanhを用いていたのに対して, ChenらのNNベースのモデルでは{ \displaystyle softmax(\textbf q^{\mathrm T} \textbf W_{s} \textbf p_{i}) } のようにbilinear termを用いてアテンションを取っている。2つの文の関係の強さをモデリングするのに重み付け和を取るのは不自然な感じがあったのでこの変更には納得感。

重要なのがデータセットの分析で、全体から100問サンプリングして人手で分類したところほぼ質問文と同じ文がパラグラフ中に出現するのが13%,質問文の言い換えが41%と半分以上はかなり簡単に解け(ニューラルモデルだとそれぞれ100.0%, 95.1%の正解率), 共参照解析のエラーが8%, 回答に曖昧性があるものが17%と,計25%が回答困難な問題で,現状のニューラルモデルはほぼ理想的な精度(72.4 ~ 75.8%)を達成しているとの結論。この研究を境にこのデータセット使った研究があまり見られなくなってる・・・。

Children's Book Test

The Goldilocks Principle: Reading Children's Books with Explicit Memoy Representations [Hill+, ICLR'16]

Memory Networkを用いた手法の提案と、Children's book test (CBT)というCNN/Daily Mail と似たデータセットの作成についての話が中心。
データセットの違いは回答候補の表層がマスクされていない(言語についての事前知識を使うことを許している)点と、データセット作成時にCoreNLPによる品詞解析やNERなどを行って回答候補を数種類(Named Entity, Noun, Verb, Preposition) に分けて、回答候補のタイプを揃えていること。

Memory Networkによるモデルではいくつかのウィンドウパターンを使ったメモリのとり方や,メモリへのアテンションの仕方などを数種類試行。訓練時にハードアテンションを用いるのが効くとか。 Memory NetworkとHierarchical RNN + attentionを比べた時,文についての状態ベクトルを作るにあたって,窓幅を取って単語embeddingの重み付け和を取る(Memory Network)より RNNなりでエンコードするようが自然に思えることから正直個人的には後者のほうが好きなのだけれどどうして前者が比較的持て囃されているのだろう。 今回のタスクで1文中に回答候補が複数出現した時のように,1文中の別々の事柄について別なメモリとして持てる事が嬉しい場合が多い、ということなのだろうか。

*1:しかしデータを眺めた所各文書間である単語に対するエンティティのIDは共通だったので、厳密にはある一つの文書だけを読んでエンティティを理解しているわけではない(訓練データの他の文書も参考にしている)気がするがそれは良いんだろうか?

*2:"we make an artificial occurrence for each entity with no contexts, which serves as a byway to attend when no other occurrences can be reasonably related to the query." と書いてあったのでそういうことだと思うんだけど・・・