ブログではないです

ブログでなくはないです

Towards an Automatic Turing Test: Learning to Evaluate Dialogue Responses [Lowe+, ACL'17]

http://aclanthology.coli.uni-saarland.de/pdf/P/P17/P17-1103.pdf

概要

学会中に発表聞きながら書いていたので短め。追記するかも。
How NOT to evaluate your dialogue system[Liu+, EMNLP'16] の著者の一人。 上記の論文中でBLEUなどの翻訳用のmetricやどちらの応答が良いか選ぶなどといった、現在の対話の自動評価手法が人間の人手評価との相関が無いことを検証していた。 結論としては人手評価のデータ (応答への1-5のスコアなど) を集め、それを用いて評価用のモデルを学習することが信頼性を担保しつつ、対話モデルの評価を低コストに行う手法であるとの事。そして今回は汎用ドメインTwitter)のデータを用いて実際にそれをやってみたよ、という話。面白かった。

f:id:jack_and_rozz:20170805074228p:plain:w400

Learning to generate one-sentence biographies from Wikidata [Chisholm+, EACL'17]

https://aclweb.org/anthology/E17-1060

概要

Wikipediaは多くの場合その記事に対応するWikidata item (他エンティティとの関係ラベルやある属性の値などの知識グラフ) を持つことを利用して、 ある人物についてWikidataから値を抽出したテンプレート (“TITLE mathias tuomi SEX OR GENDER male DATE OF BIRTH 1985-09-03 …”) からWikipediaの該当記事の第一文目を生成するタスク(Biography generation)。自分の研究でWikipedia/Wikidataを使ってみようかと思っているので参考に。

提案手法はアテンションを用いたseq2seqに,出力文を用いてもう一度入力文を復元するループ構造を加える事で入力文を復元できるだけの情報を出力文が持つように制約をかけたautoencoder的なseq2seq。 どこかで見たことあるような・・・。ちゃんと読んでないけどNIPSのdual learningとかもこんなのじゃなかったっけ。

学習の際decodeした時点で誤差の伝播が途切れるので同時に繋げて学習はしていないそうだけど、最終的な損失はどうなっているんだろう?入力→出力と出力→入力のを単に足しているだけ?その辺ちゃんと書いてなかった気がする。 

しかし結果としてはプレーンなattention seq2seqと比べてBLEUが8近く上昇。 翻訳ならとんでもない改善だけどBLEUがどの程度上がるとどうなのかということがタスクによって違うからなんとも。

感想

Wikipediaの各エンティティについて、Wikidataと組み合わせることで扱いやすい属性値と関連するテキストが同時に手に入るというのはなるほどと思った。 恐らくこの研究の新規性というのはWikipediaとWikidataのデータの性質を上手く使って構造化されたデータとテキストデータのマップを行った所にあると思うのだけど、 そのような性質を持つデータはWikipedia以外にあまりイメージできないのでどういう状況でこの研究の、というよりこのタスクについての知見は意味を持つんだろうという気もする。(エンティティの属性値だけあってそれについてのテキストを生成したい状況って何?)

こういうループバック的なモデルはこのタスクや翻訳のように入出力間の1対1対応が比較的強いような場合については良い制約として働くだろうけど、 例えば対話応答のように入出力間の1対1対応が全然取れないような場合ではむしろどうなんだろう、という気もする。

この研究とは関係ない話になってしまうがそもそも対話のように一対多関係にある入出力であっても無理やり一対一写像として学習しようとしているのが今のNNモデルだ、という意見は以前からあってその辺りのどの程度データそのものの入出力関係が多様なのかという定量的な評価指標って無いのだろうか。

ACL'17 まとめ

聴講&ポスターを見ていて気になった論文をセッションごとに。読んで記事書いたら随時リンクを更新。 全体感想なんかもあとで。

Quastion Answering

Dialogue

Information Extraction

Semantics

  • Skip-Gram - Zipf + Uniform = Vector Additivity (Gittens+)

Outstanding Papers

Poster, Workshop, etc.

  • Building a Non-Trivial Paraphrase Corpus using Multiple Machine Translation Systems (Suzuki+)
  • [NMT1st] Stronger Baselines for Trustable Results in Neural Machine Translation
  • [CoNLL'17] Named Entity Disambiguation for Noisy Text (Eshel+)

An End-to-End Model for Question Answering over Knowledge Base with Cross-Attention Combining Global Knowledge [Hao+, ACL'17]

Question answering over knowledge base (KB-QA) に関する研究。タスクとしては [Unger+, ‘14] が先駆け?タスクの定義の細かい所が分かっていないのだが単なるQAタスクでも手がかりとしてKBを使っていたらKB-QA? 他タスクの手がかりとしてKBを使う、という発想自体がこの研究の新規性というわけではないが実際にNNベースでそれをやっている研究を読んだのは初なので読んでみた。

ここではQAのデータセットとして WikiQuestion , KBとしてFreeBaseを使ってKBのエンティティから解答候補を選ぶモデルになっているが、そもそも解答がKBに無いような場合はどうするんだろう。どのKBを使うかも含めての無差別級的な評価が普通なんだろうか?

提案モデルの概要図は以下。 前提として、KBはFreebaseを使っているため (subject, relation, object) のtripleの集合の形で与えられる。 計算時間を削減するために質問文中の topic entityを見つけて(それもFreebase APIから出来るらしい)、そこから2-hop以内で辿れるentityのみを解答候補とする。 そうして絞り込んだそれぞれの回答候補について、answer entity, answer relation, answer type, answer context*1 の4つのaspect (図のFrance-Parisの例が分かりやすい) それぞれについてembedding ({ \displaystyle { e_e, e_r, e_t, e_c } })を用意しており、concatするわけではなくattentionもそれぞれのaspectについて計算したものを最後に足す方式。

f:id:jack_and_rozz:20170803015433p:plain:w400

論文としてのメインは下図のCross-Attention。 名前の通り (1) A-Q attention と (2) Q-A attention の2段階からなる。 [Hermann+ ‘15] のre-reading mechanismを参考にしたとか。

f:id:jack_and_rozz:20170803015859p:plain:w400

(1) A-Q attention: 通常NNベースのQAタスクだと質問文ベクタは一度RNNなりでエンコードしたもので固定するのに対して、解答候補 { \displaystyle e_i} ごとに質問文ベクタ{ \displaystyle q_i} を構築するのが A-Q attention. そうして計算した質問文ベクタ { \displaystyle q_i} と entityのあるaspectのembedding { \displaystyle e_i \in { e_e, e_r, e_t, e_c } } について内積を取って和を取ったそれぞれのスコア { \displaystyle S (q, e_i) } を計算する。

(2) Q-A attention: (1)で計算した各aspectごとのスコアをattentionによって重み付けしたもの { \displaystyle S (q, a) = \sum_{e_i \in {e_e,e_r,e_t,e_c}} \beta_{e_i} S (q, e_i) } が最終的な質問文{ \displaystyle q}と解答候補{ \displaystyle a}のペアに対するスコアとなる。 今度は質問文を固定して解答候補のそれぞれのaspectに重み付けすることで{ \displaystyle \beta_{e_i}}を得るわけだが、その際の質問文を表すベクトルは単純に各タイムステップの隠れ層の平均を取る。

A-Q attentionは解答候補の性質によって質問文のどこを見るかを変える、Q-Aは逆に質問文の性質によって解答候補のどこを見るかを変えるモデルなわけだけど、両方やる必要ある?(本質的には時系列データの畳み込みが難しいところにattentionの採用理由があるわけなんだからA-Q attentionだけで良くない?)という気もする。

訓練時は正例1つと、解答候補中からk個負例を選んでヒンジロスを取る。質問文のトピックによってはそもそも解答候補がk個もない場合もあるので、その場合はランダムに他のトピックまで解答候補を拡張。テストの際、解答が1つとは限らないのでスコアがマージンを超えたentityのセットを解答とする。

また、グラフ構造を利用するためにKBについてTransEをKB-QAと交互にマルチタスク形式で学習 (Global)。TransEについても同様にヒンジロスを目的関数とする。

結果は以下の通り。[Bordes+, ‘15] からちょっとだけ改善。 cross-attentionの寄与は微妙な所・・・。 むしろKBの構築をマルチタスクでやることの方が筋も良さそうだし効果も出ているからそっちを推せばいいのに、という気もする。

f:id:jack_and_rozz:20170805012728p:plain:w200 f:id:jack_and_rozz:20170805012732p:plain:w210

紹介しておいてなんだがこういうattentionの範囲をどんどん広げていくタイプのモデルは計算量が増える上に、系列データの単一ベクトルへの圧縮を諦めているようであまり好みではない。あちこちのタスクでattentionによって大きく改善が得られているというのはその通りなので現実的に即効性のある考えではあるのだけど・・・。

*1:注釈に “Answer context is the 1-hop entities and predicates which connect to the answer entity along the answer path"と書いていたのだがイマイチ分からなかった。英語得意な人おしえて・・・

KB系 (link prediction) まとめ

最近KB周りがマイブームなので実装の参考も兼ねて KB + Text => Great KB な論文を多読してみた とそこから辿れる少し前の論文を斜め読み。 基本的には (subject, relation, object) からなるtripleをグラフの2ノード間のラベル付きエッジとみなし、それぞれのノード・エッジのembeddingを元にそこにリンクが存在するか否かを推定するLink Predictionタスク。論文による違いは多くの場合tripleに対するスコア関数と、外部情報(グラフ構造や品詞による制約etc)をどう程度使うか。 データセットは大体FreeBase(FB15k, FB15k-237, FB20k..)とWordNet

ところでFB15kなんかは配布されている形ではentityが全部 /m/05qtj みたいなidの形になっている上に、すでにWikidataに移行してしまっているため具体的なentity名への変換APIがもう使えなくなってしまっている (Wikidataの記事との対応を取ったdumpはあるがFB15kの8割ちょいくらいしか網羅できていない)のだが、グラフ構造だけで完結する話はともかく他タスクと絡めて使いたい場合はどうしているんだろう・・・。

A Review of Relational Machine Learning forKnowledge Graphs [Nickel+, IEEE'16]

IEEEのinvited paper。長い。分野の相場観があまり分かってなかったので読んだ。 特によく分かってなかった損失周りをどうするのが一般的なのかについて、既読の論文でもそうなっていたようにクロスエントロピー + L2正規化もしくは sigmoidを用いてスコアを確率にした上で { \sum_i \displaystyle 1 - p(triple_{neg_i}) + p(triple_{pos_i})} に同じく正規化項を加えたものが一般的なようだ(この場合正例と負例の数は同じにする)。

またあまり気にしていなかった負例の作り方についても少し議論があり、正例以外のtripleを全て負例とする、つまり完全にランダムに3つの要素を選択して(正例にない)負例を作るよりも (subject, relation, object)のうちsubject or object とrelationの2つは固定して1つだけ入れ替えることで、比較的plausibleな負例を作るというアプローチもあるとのこと。

Representing Text for Joint Embedding of Text and Knowledge Bases [Toutanova+, EMNLP'15]

グラフ間のrelationのtextualな要素に注目した研究。例えば 「設立」 という単語に関係するグラフであってもそのrelationとしてはco-founded, founder_of, with_founders_of, helped_establishなどたくさん存在する。そうしたrelationのうち低頻度のものは学習が難しくなるが、他のrelationにも出てくる"founder"という単語からなんとなくそのrelationの意味は推測出来る。

そこでConvと呼ばれる提案手法では例えばtripleを “SUBJECT co-founder of OBJECT” という文だとみなし,係り受け解析を行った結果の “SUBJECT { \displaystyle \rightarrow_{appos}} co-founder { \displaystyle \rightarrow_{prep}} of { \displaystyle \rightarrow_{pobj}} OBJECT” というトークン列をCNNでエンコードして得たベクトルからスコアと確率を得る。 従来のスコア関数で推測した確率による損失との重み付け和に対して最適化することで従来手法との共存が可能であり、既存のスコア関数であるmodelF, modelE, distMultなどに対して実験。結果はfiltered(後述)の条件でFB15k-237に対して最高でMRRが0.424, HITS@10が61.1。

確率と損失関数周りがよく分かっていない。彼らはtripleの集合{ \displaystyle \tau}のtriple{ \displaystyle (e_s, r, e_o) \in \tau}に対して

確率を { \displaystyle p(e_o | e_s, r ; \Theta) = {{e^{f(e_s, r, e_o; \Theta)}} \over {\sum_{e' \in Neg_{(e_s, r, ?)}} e^{f(e_s, r, e' ; \Theta))}}} }
損失を { \displaystyle L(\tau, \Theta) = -\sum_{(e_s, r, e_o \in \tau)} log p (e_o | e_s, r; \Theta) -\sum_{(e_s, r, e_o \in \tau)} log p (e_s | e_o, r; \Theta)}
としている。

確率について、負例全部を使うと計算が辛くなるので既存研究(Chang+‘14], [Yang+, '15], [Toutanova+, '15], [Chen+, '15])にならってentityのtypeによって少なくともその関係を持ちうるものに絞っている。ところで確率の分母ってこれで良いんだろうか・・・?(別に総和が1になっている必要は無いからNegのスコアを下げられるならなんでもいい?) 損失関数について、この形だと実質relationが常に双方向のグラフであるとして扱う事になると思うのだがそれは大丈夫なのか?(FreeBaseのrelationって全てそういうラベルなんだっけ?)

Translating Embeddings for Modeling Multi-relational Data [Bordes+, NIPS'13]

前述した論文で評価の際の条件として出て来るraw, filteredの設定について引用がここにあったので確認を兼ねて。 テストの際にはあるtripleに対しsubject, relationを固定した状態で全通りのobjectについてスコアリングし、実際のobjectが何位に来ているかの MRR (Mean Reciprocal Rank) やHITS@k (k位以内に正解がいる割合) で評価する。その際に、いまテストしているtripleとは異なる正解の(trainやvalidに存在した)tripleに対して高いスコアを付けてしまう事があるが、それをちゃんと抜くか抜かないかがraw/filteredの違いらしい。 ちなみにあまり分かっていないのだがどうしてランキング系の評価はMean Rankより MRRが好まれるのだろう・・・?逆順位って直観的にどの程度良いのか分かりにくくないか?

Learning Symmetric Collaborative Dialogue Agents with Dynamic Knowledge Graph Embeddings [He+, ACL'17]

https://nlp.stanford.edu/pubs/he2017collaborative.pdf

概要

それぞれが異なる知識を持つ対話エージェントについての研究。タスクが面白く、2つのエージェントは自分の友人のリスト(友人の名前、学校、会社などが書かれている)を渡される。 その中に共通する友人が存在しそれが誰かを対話によって情報交換をしながら特定する、というタスクをクラウドソーシングによって人間に解かせた上で、それを学習データとして用いている。 全体的にモデルがわちゃわちゃしているし正直論文が超読みにくいけどやってることの新しそう感が凄い。

渡される情報や対話は下図のような感じ。 一行をitem, 各セルをentity (or attiribute) と呼ぶ。

f:id:jack_and_rozz:20170717172411p:plain:w250

モデル

タイトルにDynamic Knowledge Graph Embeddingとあるように、DynoNetと呼ばれる提案手法では入力として与えられたリストをグラフとして処理し、相手のentityへの言及を元にグラフを動的に更新した上で、自身の知識グラフにattentionを貼る形で発話生成をする。 研究室の論文紹介でスライド作ってしまって力尽きたので詳しい数式を追っていくのは省略。

f:id:jack_and_rozz:20170717172655p:plain

AutoExtend: Extending Word Embeddings to Embeddings for Synsets and Lexemes [Rothe+, ACL'15]

http://www.aclweb.org/anthology/P15-1173

概要

一回ちゃんと書いたやつが保存し忘れで消えてしまったので簡単にモデルの構成だけメモ。訓練済みのword embeddingsとWordnetのデータを使ってsynsetとlexemeについてもembeddingsを獲得するという研究。モデルの概要図は以下。

f:id:jack_and_rozz:20170711154620p:plain:w600
全体としてはlexemeを介して word <-> synset 間の変換を行うautoencoder的なモデルになっている。

以下、論文中の数式のうち重要なところを追っていく。(式番号は論文準拠) 単語{ \displaystyle w^{(i)}}についてsynset { \displaystyle s^{(j)}} に属するlexemeを{ \displaystyle l^{(i, j)}} (存在しない場合は{ \displaystyle l^{(i, j)}} = 0) とした時,wordとsynsetはそれぞれlexemeの集合なので
(1) { \displaystyle w^{(i)} = \sum_j l^{(i, j)}}
(2) { \displaystyle s^{(j)} = \sum_i l^{(i, j)}}

とする。その上でword -> lexemeに変換する行列を{ \displaystyle E^{(i, j)}} とおく。 (ここでは計算量削減のためEを対角行列としている)
(3) { \displaystyle l^{(i, j)}  = E^{(i, j)} w^{(i)} }

すると (2), (3) 式より
(5) { \displaystyle s^{(j)} = \sum_i E^{(i, j)} w^{(i)} }
となり,この式を単語とsynset全体に拡張するとシンプルなテンソル積の形で書ける。 (7) { \displaystyle S = \textbf E \otimes W}
S, W はsynset / word embedding を並べた行列,{ \displaystyle \textbf E}{ \displaystyle E^{(i, j)} } を並べた4階のテンソル

これがAutoextendのEncoderにあたり、Decoder側については逆にsynset -> word の変換を同様に考えると
(14) { \displaystyle \overline{W} = \textbf D \otimes S}
と、synset -> wordの変換もまたテンソル積の形で書ける。全体としては
(17) { \displaystyle \min_{\textbf E, \textbf D} || |\textbf D \otimes \textbf E \otimes W - W|| }
の形でautoencoderのようなencode -> decode でWを復元するモデルとなっている。 このようにモデルを設計した上で最終的な目的関数として

  1. wordをencode + decodeして元に戻した時の誤差を小さくする項 { \displaystyle ||  D^{(d)} E^{(d)} w^{(d)} - w^{(d)} ||}
  2. word -> lexeme と synset -> lexemeの誤差を小さくする項 { \displaystyle || E^{(i, j)} w^{(i)} - D^{(j, i)} s^{(j)} ||}
  3. 上位語・同義語などの関係があるsynsetどうしを近づける項 { \displaystyle || RE^{(d)} w^{(d)} ||}

をハイパーパラメータ{ \displaystyle \alpha, \beta, 1-\alpha-\beta }で重み付け和を取って最小化する形で{ \displaystyle E^{(i,j)}, D^{(j,i)} }の訓練を行う。

1. の{ \displaystyle D^{(d)}, E^{(d)}, w^{(d)}}{ \displaystyle D^{(j, i)} E^{(i, j)} w^{(i)}}{ \displaystyle d }次元目を集めたもの。({ \displaystyle D^{(j, i)} E^{(i, j)}} については{ \displaystyle d}番目の対角成分) { \displaystyle D^{(j, i)} E^{(i, j)}}は対角行列なので各成分を独立に計算できるためこのような形になっている。

3. は1つのlexemeしか所属しないようなsynsetについてもちゃんとembeddingを獲得する事を目的とした項で、 { \displaystyle R} は関係のある2つのsynsetのペアを1行として縦に並べたもの。例えばAがBの上位語である、という情報はAに相当する列を1, Bに相当する列を-1, それ以外は0である1行で表現される。つまりこの例だと{ \displaystyle RE^{(d)} w^{(d)}}{ \displaystyle ||s_a - s_b|| } を計算していることになる。
しかし論文を読む限りこのやり方だとペアの間にある関係ごとの違いは一切考慮されておらず、何かの関係があれば問答無用で近いsynsetとなるような制約になってしまっていると思うのだけど・・・?