Open AkihikoWatanabe opened 3 years ago
既存のニューラルモデルでは、生データ、あるいはそこから推論された事実に基づいて言語を生成するといったことができていない(e.g. 金融, 医療, スポーツ等のドメインでは重要)。 たとえば下表に示した通り、"edge"という単語は、スコアが接戦(95-94=1 -> スコアの差が小さい)であったことを表現しているが、こういったことを既存のモデルでは考慮して生成ができない。
これを解決するために、演算(operation)とニューラル言語モデルを切り離す(事前に計算しておく)といったことが考えられるが、 ① 全てのフィールドに対してoperationを実行すると、探索空間が膨大になり、どの結果に対して言及する価値があるかを同定するのが困難(言及する価値がある結果がほとんど存在しない探索空間ができてしまう) ② 演算結果の数値のスパンと、言語選択の対応関係を確立させるのが困難(e.g. スコアの差が1のとき"edge"と表現する、など) といった課題がある。
①に対処するために、事前にraw dataに対して演算を適用しその結果を利用するモデルを採用。どの演算結果を利用するかを決定するために、gating-mechanismを活用する。 ②に対処するために、quantization layerを採用し、演算結果の数値をbinに振り分け、その結果に応じて生成する表現をguideするようなモデルを採用する。
モデルはrecord encoder(h{i}^{ctx}を作る)、operation encoder(h{i}^{op}を作る)、operation result encoder(h_{i}^{res}を作る)によって構成される。
record encoderは、wisemanらと同様に、index (e.g. row 2), column (e.g. column Points), value (e.g. 95)のword embeddingを求め、それらをconcatしたものをbi-directional RNNに入力し求める。
operation encoderでは、operation op_{i}は、1) operationの名称 (e.g. minus) 2) operationを適用するcolumn (e.g. Points), 3) operationを適用するrow (e.g. {1, 2}などのrow indexの集合)によって構成されており、これらのembeddingをlookupしconcatした後、non-linear layerで変換することによってoperationのrepresentationを取得する。3)operationを適用するrowについては、複数のindexによって構成されるため、各indexのembeddingをnon-linear layerで変換したベクトルを足し合わせた結果に対してtanhを適用したベクトルをembeddingとして利用する。
operation result encoderは、scalar results(minus operationにより-1)およびindexing results (argmax operationによりindex 2)の二種類を生成する。これら二種類に対して異なるencoding方法を採用する。
scalar resultsに対しては、下記式でscalar valueをquantization vector(q{i})に変換する。qutization vectorのlengthはLとなっており、Lはbinの数に相当している。つまり、quantization vectorの各次元がbinの重みに対応している。その後、quantization vectorに対してsoftmaxを適用し、quantization unit(quantization vectorの各次元)の重みを求める。最後に、quantization embeddingと対応するquantization unitの重み付き平均をとることによってh{i}^{res}を算出する。
Q. 式を見るとW_{q}がscalar resultの値によって定数倍されるだけだから、softmaxによって求まるquantization unitの重みの序列はscalar resultによって変化しなそうに見えるが、これでうまくいくんだろうか・・・?序列は変わらなくても各quantization unit間の相対的な重みの差が変化するから、それでうまくscalar値の変化を捉えられるの・・・か・・・?
indexing resultsについては、h_{i}^{res}をシンプルにindexのembeddingとする。
context vectorの生成方法が違う。従来のモデルと比較して、context vectorを生成する際に、レコードをoperationの両方をinputとする。
operationのcontext vector c{t}^{op}とrecordsのcontext vector c{t}^{ctx}をdynamic gate λ{t}によって重み付けし最終的なcontext vectorを求める。λ{t}は、t-1時点でのデコーダのhidden stateから重みを求める。 c{t}^{op}は次式で計算され: c{t}^{scl, idx}は、 よって計算される。要は、decoderのt-1のhidden stateと、operation vectorを用いて、j番目のoperationの重要度(β)を求め、operationの重要度によって重み付けしてoperation result vectorを足し合わせることによって、context vectorを算出する。 また、recordのcontext vector c{t}^{ctx}は、h{j}^{res}とh{j}^{op}と、h{j}^{ctx}に置き換えることによって算出される。
人手でESPN, ROTOWIRE, WIKIBIOデータセットのReferenceに対して、factを含むtext spanと、そのfactの種類を3種類にラベル付した。input factsはinput dataから直接見つけられるfact, inferred factsはinput dataから直接見つけることはできないが、導き出すことができるfact、unsupported factsはinput dataから直接あるいは導き出すことができないfact。wikibioデータセットはinferred factの割合が少ないため、今回の評価からは除外し、ROTOWIRE, ESPNを採用した。特にESPNのheadline datasetがinferred factsが多かった。
wiseman modelをOpAttがoutperformしている。また、Seq2Seq+op+quant(Seq2Seq+copyに対してoperation result encoderとquantization layerを適用したもの)はSeq2Seq+Copyを上回っているが、OpAttほとではないことから、提案手法のoperation encoderの導入とgating mechanismが有効に作用していることがわかる。
採用するoperationによって、生成されるテキストも異なるようになっている。
3人のNBAに詳しいEnglish native speakerに依頼してtest dataに対する生成結果にアノテーションをしてもらった。アノテーションは、factを含むspanを同定し、そのfactがinput facts/inferred facts/unsupported factsのどれかを分類してもらった。最後に、そのfactが入力データからsupportされるかcontradicted(矛盾するか)かをアノテーションしてもらった。 提案手法が、より多くのinferred factsについて言及しながらも、少ない#Cont.であることがわかった。
チーム間のスコアの差が、5つのbinのに対してどれだけの重みを持たせたかのheatmap。似たようなスコアのgapの場合は似たような重みになることがわかる。ポイント差の絶対値が小さい場合は、重みの分布の分散が大きくなるのでより一般的な単語で生成を行うのに対し、絶対値が大きい場合は分散が小さくなるため、unique wordをつかって生成するようになる。
pointのgapの大きさによって利用される単語も変化していることがわかる。ポイント差がちいさいときは"edge"、大きいときは"blow out"など。
生成テキストのtimestepごとのgateの重みの例。色が濃ければ濃いほど、operation resultsの情報を多く利用していることを表す。チームリーダーを決める際や(horford)勝者を決める際に(Hawks)、operation resultsの重みが大きくなっており、妥当な重み付けだと考察している。
https://aclanthology.org/D18-1422.pdf