ブログではないです

ブログでなくはないです

Improving Coreference Resolution by Learning Entity-Level Distributed Representations [Clark and Manning, ACL'16]

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

概要

C.Manningの研究室から出た共参照解析の論文で、[Lee+, EMNLP'17] に抜かれるまでCoNLL 2012 shared taskのSOTAモデル。概要としては従来のメンション間のスコアを算出して同一クラスタに属するかどうかを判断し、最後にリンクを辿ってクラスタを構築するモデルだと既に同一クラスタであると判断した他のメンションの情報が使えないことが問題となる。例えばテキスト中にClintonさんが2人居た時に "Bill Clinton" と "Clinton"が同一エンティティを指すかどうかは判断が難しいが、{Bill Clinton} と {Clinton, she} が同一であるかどうかの判断はすでに"Clinton" と "she" が同一であるという情報を使えば比較的容易である、という話。 そのためにタイトルにもEntity-Levelとあるように,個々のメンションを要素が1つのクラスタとみなしてスタートして,モデルが推定した結果をインクリメンタルに取り込んだ上で、entity-levelの(言い換えるとcluster-levelの)representationを計算しつつクラスタ同士をマージし続けるような形で共参照解析を行えるモデルにしようと言う話。

モデル

f:id:jack_and_rozz:20171228142917p:plain:w200
まず前提として、個々のメンションの抽出は別モジュールで既に行われているとする。その上で、モデルのコンポーネントは大きく分けて (1) Mention-Pair Encoder (2) Mention-Ranking Model (3) Cluster-Pair Encoder (4) Cluster-Ranking Model の4つ。 (1)のエンコーダは特筆することもなく2つのメンションのembeddingと周囲の単語、メンション間の距離などの特徴量を使ってFFNNに通して新たなrepresetantionを計算する。(2)でそれを使って、あるメンションmとある先行詞aの間のスコアを算出する。 (3)はクラスタのペアについてのエンコーダなので2つのクラスタに属するメンションの全通りの組み合わせに対してあれこれしてrepresentationを計算。詳しくは論文の図参照。

冒頭でメンションではなくクラスタとの比較をしよう、という趣旨を述べていたにも関わらずどうして(1), (2)が必要になるかというと、具体的には(4)での枝刈り&実行順序決め(簡単なものから実行するため)に用いる。モデルの実際の訓練・推定の流れはまず(1), (2)を事前訓練して従来のモデルと同じようにメンション単位でのスコアを算出できるようにした上で、(3), (4)の訓練時にMention-Ranking Modelでのスコアが高いメンションが属するそれぞれのクラスタどうしに対してCluster-Ranking Modelを適用して実際の共参照解析を行っている。

また,学習データとして持っているのは最終的に得られたクラスタだけで途中にどのような順番でクラスタクラスタのマージを行ったか、というラベルは陽に存在しないため,通常のneural-basedなモデルと違って最終的なクラスタ同士を比較するだけでは最適化が難しく、ここについてはDaumeのlearning-to-searchというアルゴリズムを使って解決している。

具体的にはまずモデルの現在のパラメータによって定まる方策 { \displaystyle \pi}を用いて最終状態までの状態の軌跡 {{ \displaystyle x_1, x_2, ... , x_N}} を得る。その上で、ある状態{ \displaystyle x_i}において取れる行動全て({ \displaystyle u \in \mathrm U(x_i) })に対して、その行動をした後最適(に近い)な行動をし続けた時の最終状態{ \displaystyle e}とその時の損失{ \displaystyle l(u) = L(e, y)}を損失関数{ \displaystyle L}と, reference policyと呼ばれる{ \displaystyle \pi_{ref}} を用いて獲得する。このreference policyについては,訓練時は当然正解とスコアの計算式を知っているのでそれが最も増えるような行動を選ぶようにする、と言ったように人工的に作る。その上で全ての{ \displaystyle \pi(u| x) l(u) } *1 の和を取って最適化を行うという流れ。

f:id:jack_and_rozz:20180329122223p:plain:w400

自分の理解をまとめると,まずある状態{ \displaystyle s}において次の行動{ \displaystyle u}がどれだけ有望かを計算する関数{ \displaystyle \pi (u, s)}を最適化するのが目的。ただ学習データとして存在するのは最終状態だけで行動の軌跡は無いため、状態{ \displaystyle s}で行動{ \displaystyle u}を取りその後ベストに近い行動を取り続けたら最終的なスコアがどうなるか、ということをreference policyを元に計算して,それを用いて各状態における行動選択のための方策を最適化しているのだと思う。*2 ゲームAIを学習する時にある一手分だけモデルの方策に従ってそこからモンテカルロ木探索をして最終スコアを元に最適化するのに近いような気がした。

*1:ここxじゃなくて{ \displaystyle x_i} では?

*2:とはいえreference policyに従って選ばれるある状態からの擬似的な最適行動の軌跡を使うのと、最終状態から遡って作られる擬似的な初期状態までの軌跡を使ってteacher-forcingするのってそこまで差があるだろうか?例えば共参照解析だったら同クラスタに所属するものの内、文書内で距離が近いものから順にやるとかでそう悪くない軌跡が作れると思うんだけど・・・。