yoheikikuta / paper-reading

Notes about papers I read (in Japanese)
156 stars 4 forks source link

[2019] Avoiding Reasoning Shortcuts: Adversarial Evaluation, Training, and Model Development for Multi-Hop QA #44

Open yoheikikuta opened 4 years ago

yoheikikuta commented 4 years ago

論文リンク

https://www.aclweb.org/anthology/P19-1262/

公開日(yyyy/mm/dd)

2019/07

概要

A -> B -> C というような multi-hop な論理的推論を必要とするデータセットで HotpotQA というものがあるが、そのデータにはそれなりの割合で、その段階的推論をスキップする shortcut があることを発見した。この shortcut があるとモデルは単純な質問文の該当箇所を一個マッチングをするくらいで答えを導くことができてしまう(single-hop で解けてしまう)。 そのことを示すために、その shortcut をモデルが使おうとすると混乱するような(しかし答えは変えないような)adversarial document を追加することでモデルの性能が落ちてしまうことを明らかにした。 また、この adversarial document を使って adversarial training をするだけでは adversarial examples に対しては性能が十分には上がらないことを発見。 2-hop QA により明示的に対応できるように control unit を追加したモデルを提案して、性能が上がることを示した。

主にデータセットの提供だが、コードは https://github.com/jiangycTarheel/Adversarial-MultiHopQA

yoheikikuta commented 4 years ago

これも NLP における adversarial examples を調べてみるの一環で ACL2019 の論文を眺めてたら見つけたもの。軽く読んだ感じ、adversarial examples を使ってデータセットが本来提供したいタスクとしての性質を満たしてないものがあることを暴く、という感じで面白そうだと感じた。

yoheikikuta commented 4 years ago

この論文で対象にするのは multi-hop QA である。

まず、多くの QA のデータセットは single-hop QA となっている。 single の意味は、質問に対する答えを出すのに必要な証拠が一つの文章内(もしくは一つのパラグラフ内の近いところ)にまとまっているということだ。 例としては以下を挙げている。このような問題では質問とコンテキストを sky - sky, color - blue のようにマッチングさせることで正しく答えることが可能になる。

Q: “What’s the color of the sky?”, Context: “The sky is blue.”, Answer: “Blue”

しかしこれは簡単な問題設定であり、人間が質問に答えるときはもっと複雑な論理的推論というか証拠を鎖のようにつなぎ合わせたりすることがある。 それを模すために multi-hop QA を謳うデータセットが出ていて、自分は知らなかったが QAngarooHotpotQA などがある。 この論文では HotpotQA を解くことに取り組む。このデータの例としては以下。

Q: What was the father of Kasper Schmeichel voted to be by the IFFHS in 1992?

Golden Reasoning Chain Docs: Kasper Peter Schmeichel (] ; born 5 November 1986) is a Danish professional footballer who plays as a goalkeeper ... . He is the son of former Manchester United and Danish international goalkeeper Peter Schmeichel. Peter Bolesław Schmeichel MBE (] ; born 18 November 1963) is a Danish former professional footballer who played as a goalkeeper, and was voted the IFFHS World's Best Goalkeeper in 1992 and 1993.

Distractor Docs: Edson Arantes do Nascimento (] ; born 23 October 1940), known as Pelé (] ), is a retired Brazilian professional footballer who played as a forward. In 1999, he was voted World Player of the Century by IFFHS. Kasper Hvidt (born 6 February 1976 in Copenhagen) is a Danish retired handball goalkeeper, who lastly played for KIF Kolding and previous Danish national team. ... Hvidt was also voted as Goalkeeper of the Year March 20, 2009, second place was Thierry Omeyer ...

A: World's Best Goalkeeper

これは元データの形とは異なる形式なので、軽く調べておく。 まず HotpotQA は distractor setting と fullwiki setting の 2 パターンがある。前者は答えとは関係ある情報と関係ないけどモデルが間違えそうな情報の両方を含んだ 10 パラグラフを context として質問に答えるもの。後者は wikipedia 全体から答えを導ける情報を取ってきて答えるという感じになっているっぽい(デフォルトではデータ提供側が関連文章を一つの質問につき 10 パラグラフずつ与えているが、それは答えを含んだり含まなかったりするので自分で情報を集めるのが推奨とのこと)。

この論文では distractor setting のみをターゲットにする。 上で挙げた例は、10 個のパラグラフのうち、答えを導くのに必要なものを Golden Reasoning Chain Docs と言っていて、モデルを惑わせる情報を Distractor Docs と言っている。これはわかりやすく並べて書いただけで、実際のデータでは明示的に分けられてないし順番もどうなっているか分からない。

ようやく例の具体的な話に入るが、この質問に対して答えるには Kasper Schemeichel - (son_of) -> Peter Schemeichel - (voted_as) -> World's Best Goalkeepr という 2-hop の情報が必要になる、というのが問題の触れ込みだ。なのでモデルには高い reasoning ability が必要だと。

yoheikikuta commented 4 years ago

と言われるとなんかそんな感じがしてしまうが、質問を改めて読むと、 What was xxx voted to be by the IFFHS in 1992 であり、これは実は golden reasoning chain docs の最後の ... was voted the IFFHS World's Best Goalkeeper in 1992 and 1993. をみるだけで答えられてしまう!

これを論文では reasoning shortcut と呼んでいて、本質的に 2-hop が 1-hop になってしまっているのでタスクが意図したいことが実現されてないと指摘している。 まあおっしゃる通りだけど、そこまで気をつけてちゃんとデータを準備するなんてめちゃくちゃ大変だよなぁ(別にこの論文ではデータセットを批判しているわけではない。念のため)。

この論文が面白いのは、この shortcut ができるのは distractor に voted to be by the IFFHS in 1992 な別の人がいないからだと考えて、それなら shortcut できないようにそういう情報を付与して適切な 2-hop QA に戻してやろうと試みてそれに成功した点にある。

それを adversarial Doc と言っていて、先ほどの例ならば以下を加えることにしている。

R. Bolesław Kelly MBE (] ; born 18 November 1963) is a Danish former professional footballer who played as a Defender, and was voted the IFFHS World's Best Defender in 1992 and 1993.

これを加えると voted to be by the IFFHS in 1992 な人(ただし goalkeeper でなくて defender)が登場するので、single-hop 的なマッチングだけに頼っていると、答えが IFFHS World's Best Defender になってしまったりするという寸法である。

このように、この論文では phrase レベルでの摂動(単語置き換え)によって adversarial examples (これをデータに加えても論理的には元々の答えは変更を受けない)を作り出す。 これを dev-set として評価すると普通に学習したモデルの性能は著しく落ちることを示した。 また、これを train-set として adversarial training をしても性能は回復するがまだ不十分であることを発見し、2-hop 用に recurrent control unit というものを使ったモデルを作成してそれならば性能を担保できることを示した。

yoheikikuta commented 4 years ago

データの作り方はざっくり言うと、crowd worker が二つの document を与えられて答えるのに reasoning が要求されるような質問を考え、bigram TF-IDF で近いものを Wikipedia から集めてきて distractor として加える、という感じ。

distractor がうまくいかないのは二つのパターンが考えられる。


重要な点として、HotpotQA には Are Leo and Kate of the same age? のような比較の質問があり、これは Leo is one-year older than Kate のような文章があれば shortcut になるが、そのような文は Wikipedia にはほぼないのでこういう比較の質問の場合は手を加えずにそのまま使うとのこと。dev-set には 21% ほどこういうのがあるらしい。

yoheikikuta commented 4 years ago

adversarial examples をどうやって作っていくか。

まずは形式的な議論をしていく。 context-question-answer tuple (C, q, a) が元々のデータセットで shortcut を含むかもしれないものであるとき、目的は (C', q, a) で C' が、a が依然として正しい答えで、C' は元の文章に近くて、C' に shortcut がないもの、にすることである。 HotpotQA ではデータの作り方から明らかなように、C の中には二つの document からなる P が含まれていてこれには質問に答えるために必要な情報が全て含まれている。基本的な戦略としては、この P の単語を置き換えることで答えと同じ構造だけど答えには関係ないという文章を作って shortcut を潰そう、というものだ。 なので ξ を context と adversaries を混ぜる関数としたときに、(ξ(C, P'), q, a) を作っていく。 HotpotQA では多くの場合 p_2 ∈ P が a そのものを含む文章で p_1 がそれ以外のサポート文章になっているので、そういう構造を想定して以降の議論をしていく。

adversarial examples を作る提案手法は AddDOC という名前で、全体像は以下の通り。 左の supporting doc が上で言うところの P である(それ以外の文章はここには載せていない)。 代替の答えとタイトルを準備してそれを基に元々の答えを含んでいた document で置き換えをして adversarial examples を作っている。

もう少し詳しく各ステップを見ていく。

Step1

まず answer の stop word 以外の各単語に関して GloVe の意味で近い top 10 の単語を準備する。 その中から substring が 3 以上 overlap しているものを除外して最も近いものに置き換える。全部除外されてしまったら HotpotQA 全体の answer からランダムに置き換える。この置き換えは answer が複数単語の場合は一単語だけ置き換えをする。 オリジナルの p_2 の文章で answer (と answer に含まれる単語が文中に現れる場合はそれも同様に)を置き換えれば、answer 部分だけが変わった adversarial examples p'_2 が出来上がる。

Step2

Step1 だけを適用して adversarial examples を作ると質問に対する答えとして矛盾する二つのものを提供することになってしまう。上の例で言えば、質問の答えとして Mumbai と Delhi のどちらも正しくなってしまう。 そこで、この矛盾を解消するためにに手を加える必要がある。上の例で言えば title である Tata Consultancy Services を良い感じに置き換えて p_2 にそれを反映する必要がある。 これをするために、title を HotpotQA dev-set の title からランダムにサンプルして置き換えて、さらに p_1 の title が p'_2 に現れる場合はそれもサンプルして置き換える。 これは経験的に p_1, p_2 のタイトルが違いを関係付ける bridge の役割を果たしていることが多いということを知っているための処理とのこと。

Step3

Step1 と Step2 の置き換えを両方適用して最終的な adversarial examples p'_2 を構築する。 これで完成としたいところだが、ランダムに置き換えた title は他の context には全く現れない(ことがほとんど)なので、このような文章は無視することをモデルが認識すればやはり shotcut を作り得てしまう。 それを防ぐために、dev-set 全体から置き換えた title の元の文章を引っ張ってきてそれも context に加えるということもする。 追加する文章は non-supporting document を削除した上で実施するようにして、context が 10 個のパラグラフから成るという構造は変えない。

yoheikikuta commented 4 years ago

結構テクニカルだったのでちゃんと理解するのはまあまあ大変であった。 特徴としては adversarial examples ではあるけどモデルには全く依存しないまあまあ特殊なものだった。

それとめちゃくちゃに HotpotQA に依存した adversarial examples の作り方をしている。まあ問題設定上仕方ない部分もあるが、他の問題設定には適用できないような処理もたくさんある。

yoheikikuta commented 4 years ago

モデルの話をしていく。これも結構注意して読まないと複雑で理解できない。 まずは encoding と baseline の single-hop のモデル。

Encoding

まずは encoding に関してだが、これは character embedding と GloVe word embedding を highway network 的($ y = H(x, W_H)T(x, W_T) + x C(x, W_C) $ ) に merge する。 これは単語ごとに次元 v の representation を得るような変換をしている。context は $ x ∈ R^{J × v} $ で question は $ q ∈ R^{S × v} $ を得る。 そのあとに BiLSTM を適用して、$ h = BiLSTM(x) ∈ R^{J × 2d}, u = BiLSTM(q) ∈ R^{S × 2d} $ が encoding の部分。

Single-Hop baseline

bi-attention + self-attention model を採用している。 bi-attention というのは context-to-query のものと query-to-context のものがある。 前者は以下で求める。question と context の word 間の attention score を M を使って計算しているというのみ。

後者は以下で求める。同じように M を使うが、question の成分で最大のものを引っ張ってきて attention score を計算するようになっている。

こうして作られたそれぞれの特徴量を全部 concat して BiLSTM につなぎ、

以降を $ BiAttn(h^1, h^1) \rightarrow h^2 \rightarrow BiLSTM(h^2) \rightarrow h^3 \rightarrow \text{"yes", "no", text-span} $ の 3-way classifier とつないでいる。 これに加えて sentence-level で supporting fact を予測するというのを $ h^2 $ のあとに binary classification として入れて学習をするとのこと。

yoheikikuta commented 4 years ago
Proposed model

提案手法は 2-hop をちゃんと取り入れる形にしたい。基本的な戦略としては、query-to-context の方で、hop 毎に query のどの部分を重視するかで context をうまく表現するようにしたい。 そのために i 番目の hop に対して control unit c_i を導入して、以下のように cv を作って現在の hop で question のどの部分に注目するかを与える。

ここは目的に適うものとしてこういうものがいいと正直すんなりとは理解できない。まあこういうものなのだろうという程度に理解しておく。 これが得られれば (1)~(3) の h を $ h \odot c_i $ にして、attention score の計算の bias として以下のように使うことで注目のさせ方をコントロールする。

これを取り入れたモデルの全体像が以下の図になる。context 側の Bridge-entity supervision は後で説明するので一旦無視。 ここでの q_c は hop 毎に作られるはずなので 2 つ作る気がするんだけど、この辺りをどう取り扱っているのかがよく分からない。単純にもう一個作ってそれも concat させているのか?モデルの詳細の情報は GitHub の repository にはないっぽいし。

先送りにした Bridge Entity Supervision だが、導入した control unit の結果得られる cv とかに教師あり学習がないのでうまく機能させることはちと難しい。そこで、2 つの supporting documents をつなぐ bridge entity span を予測させるというタスクも解かせることでそれを解決したいとのこと。さっきの例で言えば Tata Consultancy Services が該当。 これで bi-attention layer で、質問の中の company that Sachin Warrier worked for as a software engineer の部分を first hop で control unit が注目するように仕向けるとのこと。

うーむ、この辺は入り組んでてちょっと理解できていない。 まあある程度の気持ちは分かったので、とりあえず現状はこのくらいで許してあげよう。

yoheikikuta commented 4 years ago

実験に入る。

adversarial examples の作り方は色々なパターンを準備している。 元のパラグラフは 10 個でそのうちの 2 個に答えに必要な情報が入っているので、adversarial doc として 4 もしくは 8 パラグラフ入れることにして、それもランダムに挿入するか後ろにくっつけるかで分けて、合計 4 個の adversarial dev-set を作成(Add8Docs-Prep など)。 training の方は Add4Docs-Rand を使うことにしている。fake title などは training set 全体の中からサンプルするようにしている。全部を置き換えるのではなくて、40% を選んで adversarial examples にして、それを元々の training-set に追加するという形にしている。

metric は EM (Exact Match) score を使っている。F1 score とは異なり答えのどれか(同じ意味で複数準備されてる場合がある)に完璧にマッチしていれば正解とカウントする。

GloVe は 300 次元で LSTM-RNN は 80 次元で control unit は 128 次元。Adam 使用。

メインの結果の一つは、adversarial examples 込みの学習データで学習して、adversarial examples の dev-set で評価をした以下の表。 + sp は supporting fact の sentence level での予測も入れているの意味。適度に adversarial examples をランダムに挿入してやるのが一番良い、ということがわかる。2-hop にした効果は 3 ポイントくらいで確かに効いていそう。

メインの結果のもう一つは、train と dev の adversarial examples を入れたり入れなかったりする結果。2-hop の方は control unit を除いたり、Bridge 予測を除いたりも試している。 まず、明らかに普通の学習データで学習したモデルは adv に弱いことが分かる。1-hop の場合は 16 ポイント近くも落ちていて、2-hop でも 13 ポイント落ちている。 adversarial training で regular の dev の場合は regular-regular よりも悪く、NLP で adversarial training で汎化性能を高めるという話とは逆行している。これは adversarial example がかなり特殊な形で作られていて、あくまで shortcut をつぶすためだけに作られているからという話だと思う(普通のデータでよく当てられるような方向に寄与しているわけではない)。 また、adversarial training をすると adversarial examples に対しても結構当てられるようになる。

この結果は面白くはあるが、2-hop にするとベースが上がっているという感じで、1-hop と定性的に大きな違いを出しているとまでは見えないかなぁという感じはする。 と思ったがこれはちょっと厳しい評価かもしれない。確かに 2-hop は効いてるのは間違いない。ただ adversarial を training なり dev なりに使った場合の性能の減少具合が 1-hop と 2-hop で大きく異なればもっと面白かったかな、というくらいの感想だ。

yoheikikuta commented 4 years ago

以下のような検証も実施している。

まずは人手での adversarial examples の検証。 これは adversarial examples を作ったことで元々の答えが矛盾するかもしれない(できるだけそうならないように作ってはいるが)ので、そのチェックである。ADD4DOCS-RAND で 50 件サンプルして、答えが矛盾するものは見つからなかったこと。

次にモデルの間違いの仕方の検証。 普通に学習して adversarial dev-set の場合、モデルの sentence-level で supporting fact 予測の間違いの 96.3% は adversarial doc を指していたとのこと。 一方で adversarial training-set で学習した場合は 95.4% だったらしい。これはもっと少なくなることを期待していたのだと思うが、この点についてのコメントは特にない。

最後にうまく adversarial examples が作れなかった場合の検証。 一つのパラグラフで答えの情報が全部含まれてしまっている場合は、提案手法では adversarial examples を作れない。具体的には以下のような例で、single-hop であることを変えられていない。数が多くなければ特に問題ではないと思うが、数に関しては言及なし(まあ全部目でチェックできないよなぁ)。

yoheikikuta commented 4 years ago

モデルの細部とかちょっと分かってない部分もあるが、一通り読んだ。

adversarial examples を使ってデータセットが目的である 2-hop の QA を提供できてないことを示す、というのは面白い着眼点だと思った。一方でかなりデータセット依存なので、作り方が相当特殊だったりしてなかなか一般的な知見として何か言うのは難しい面もある。ただそういうところを皮切りにモデルアーキテクチャの発展にも繋げているのは良いなと思った。