Dynamic Entity Representations in Neural Language Models [Ji+, EMNLP'17]
https://aclanthology.coli.uni-saarland.de/papers/D17-1195/d17-1195
概要
言語モデルとjointlyに共参照解析をして文章中のエンティティへの言及を元にその分散表現の更新を動的に行い,現在の隠れ状態に加えて最近登場したエンティティの分散表現を考慮することで性能を良くしましたという話。 slideshareに解説スライド があった。
提案手法
ベースラインは普通のRNN言語モデル。提案手法ではこれに加えて,下図の
(エンティティであるかの 0/1)
(文章中に出てきたどのエンティティであるかのインデックス。 ならが入る)
(複数語から構成されるエンティティについて、その単語を含めて残り何単語か)
を各タイムステップの隠れ状態から推定しながら単語を読み進めていく。
具体的なアルゴリズムとしては各時刻以下の処理を繰り返している。
== 1 なら(次に読む所が複単語表現の途中でなければ) 前時刻の隠れ状態とrのembedddingを元にを推定 (eq. 3)
1.1. == 0 なら(今読んでいる単語がエンティティの一部ではないなら) = 0, = として3. へ
1.2. == 1 なら (eq.4) によってどのエンティティであるかを推定、新しく登場するエンティティならembeddingを追加 (eq.7) して現在注目しているエンティティを表す を選択。 *1
1.3. (eq.5) によって (このエンティティを示す単語が後いくつ続くか) を推定。
2. > 1 なら (残り単語数を減らすだけ)
3. 隠れ状態とを元に次時刻の単語を予測。 CFSMという段階的な推定を行うことで計算量を削減するソフトマックスを使用している。 (eq.6)
4. 次時刻の単語をRNNにフィード
5. の分散表現を更新 (eq.8),1.2で使う全エンティティの分散表現リストにも更新を適用。
また,学習では各推定結果についての同時確率を最大化している。 (eq.9)
実験
実験では言語モデルのperplexity, 共参照解析に加えて Entity Prediction (下図におけるXXXXが何かを推定。XXXXの右側についての手がかりは使えない)で評価。
データセットは共参照解析に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に何もなかった)
の推定は左から順に読んでいく形式では難しいんじゃないか(ここからここまでがあるエンティティを表すフレーズだというのは文全体を見て初めて判断できることなんじゃないか) という気もすると思った。どちらかというと今読んでいる単語が前の単語と複合語をなしているかどうかの 0/1 判定の方が良かったんじゃないだろうか?
結局良くわからなかった点として、提案手法ではエンティティの数は動的に変化するので実際のエンティティのリストとの間でインデックスによる対応が取れないが、 訓練・テスト時にモデルが推定したエンティティと実際のエンティティとの対応をどう取っているのだろう?
*1:eq.4 の f(e) の項にあたる部分の意義がいまいち理解できていない。関連研究追う必要あり?