[2019] Generating Natural Language Adversarial Examples through Probability Weighted Word Saliency [paper-reading]
yoheikikuta opened this issue · 11 comments
論文リンク
https://www.aclweb.org/anthology/P19-1103/
公開日(yyyy/mm/dd)
2019/07
概要
NLP における adversarial example で自然なものを作るというもの。
black box で入力(特に単語に対応する index をいじれる)と出力(の softmax 値)にアクセスできるという設定で、スペルミスがなく文法誤りや元の意味をあまり変えないような adversarial examples を作ることを可能にした。
wordnet から類義語を持ってきて、word saliency (ある単語を unknown にしたときに正しいラベルを予測する確率がどれくらい減るか) と確率の差分 (ある単語を類義語に置き換えた時に、その置き換えによってどれくらい正しいラベルを予測する確率が減るか) を合わせた Probability Weighted Word Saliency (PWWS) を提案。比較手法よりも優秀な性能を発揮することを示した。
著者実装はこれ: https://github.com/JHL-HUST/PWWS/
adversarial example 系の話が結構好きだが、これまでは専ら画像のものだけを調べていて NLP のものはちら見する程度だった。
NLP でもそろそろ色々なパターンが出てきて面白いタイミングなのかと思って、いくつか調べたりしていた。
これは ACL2019 short paper で、ダイレクトに知りたい内容が書いてありそうだったので読んでみることにした。
テキストにおける adversarial 系の話は画像認識の場合と比べてちょっと違ったりするので、最初に言葉遣いというか注目しているポイントを書き出しておく。
- Generative Adversarial Networks
これは画像もテキストも同じで、基本的には Generator の network と discriminator の network が存在して、敵対的に学習する仕組みを備えるもの。 - Adversarial Examples
画像の場合もテキストの場合も、普通に学習したモデルを誤認識させるように入力データに摂動を加えて新たなデータを作るもの。しかし画像はピクセル値を連続値として扱えるのに対してテキストは離散なので、摂動をどう加えるかはだいぶ異なる。画像の場合は間違えさせることやそこから読み取れることなどを調べがちで、テキストの場合は以下に述べるような adversarial training と合わせて汎化性能を高めるための道具として使いがちな気がする。 - Adversarial Training
画像の場合は adversarial examples に対抗するための手段として使うくらいだし存在感は薄いけど、テキストの場合は上述のように汎化性能を高めるためにもよく使われる。元々テキストの場合は embedding space でちょっと摂動を加えて汎化性能を高めることができる、という話があってその流れを汲んでいるのかもしれない。
2018 くらいまでに出た NLP adversarial examples で有名っぽいものを振り返っておく。
まず(NLP に限らず)adversarial example の分類として、white box (攻撃対象のモデルの情報が取得できる、有り体に言って loss の微分とか使える) と black box (入出力しか取得できない) がある。
それぞれの代表格(単に citation の数が多いという意味)は以下のものっぽい。
- HotFlip
white box のケース。文字レベルのモデルによるテキスト分類において、loss を大きくするように文字を置き換えたり挿入したり削除したりして、誤認識を引き起こす。例は以下(原論文より引用)で、一文字置き換えることで分類クラスを異なるものに導いている。
- Adversarial Examples for Evaluating Reading Comprehension Systems
black box のケース。質問応答で間違った答えをさせるように入力文に摂動を加えるもの。いくつか提案していてそれぞれ攻撃対象のモデル依存性が違っているのだが、典型的なAddSent
は質問文を複製して架空の答えを準備しその答えが導けるような文章を追加することでモデルを惑わせる方法である。例は以下(原論文より引用)で、以下にもモデルが間違えそうな文章を最後に足して(青文字の文章)間違えさせている。
これらを踏まえて、より発展させた手法が色々出てきているという感じ。文字レベルじゃなくて単語レベルだったり black box で文字レベルにしたり、想像に難くない。
前置きが長くなったが、論文の内容に入っていく。
モチベーションはより「自然な」adversarial examples を作成したいというものである。
上の例で見たように、NLP における摂動は画像認識の場合と比べると難しい。例えば文字の置き換えをすれば語彙の誤りとして人間が知覚しやすいし、明らかに変な文を加えたりした場合も同様である。
したがって、
- 語彙の誤りなく
- 文法上のおかしさも少なく
- 元の分からの意味の変更も小さく
という条件を満たすような adversarial examples を作るというのは、色々な工夫を要求されるものになっている。
この論文では Probability Weighted Word Saliency (PWWS) という black box の手法を提案してそれをクリアーした、ということで以下その内容を見ていく。
問題設定は以下。
- 入力は単語 w_i が n 個から成る
- 予測対象は K クラス分類で、K 個の出力の確率値にアクセスできる(softmax の出力を全て使える)
black-box と言いながら softmax の値全部にアクセスできるというのはなかなか厳しい条件だと思う。
実際にモデルが black box になっているシステムではそうはなっていない場合が多いので。この辺を念頭に入れてより現実的なものにしていくというのは一つの興味深い方向性かもしれない。
基本戦略としては以下。adversarial example を作るにも色々方法があるが、この論文では単語の置き換えをベースに作るようになっている。
- 単語を類義語に置き換えたり Named Entity (NE) を似たような NE に置き換えることで adversarial examples を作る
- 類義語は wordnet から持ってくる
- NE は、辞書 D に対して、攻撃対象のクラス y_{true} に含まれる単語の辞書 D_{y_{true}} の差分である D - D_{y_{true}} の中で最もよく登場する NE を使うことで置き換えをする
そんなに難しいことはない。あとは類義語という時に、どういう基準で単語を選ぶか、が肝になってそれこそがこの論文の貢献ということになる。
NE をどうやって判断しているのかについては言及がないが、wordnet で使えるものだけを考えていて、そこで判断しているっぽいかな。wordnet では例えば noun.person
で人名が取れたりするので。
コードを読んでみたら spaCy で named entity recognition をしているというものだった。おk。
https://github.com/JHL-HUST/PWWS/blob/dfd9f6b9a8fb9a57e3a0b9207e1dcbe8a624618c/get_NE_list.py
単語の類義語や代替する NE のリストは手に入っても、どの単語から置き換えていくのが有効かという指針が必要になる。先行研究では word saliency という指標を導入しているものがあり、これはある単語を unknown にしたとき(大抵 NLP のモデルは unknown 用の index を保持しているので、対象単語の相当する index を unkown に置き換える)に正しいラベルを予測する確率がどれくらい差があるかを評価したものである。
この論文ではある単語の word saliency と、その単語を類義語に置き換えたらどれくらい正しいラベルを予測する確率が低くなるかを合わせた PWWS を提案している。
まずはアルゴリズムの全体像から。
まだ定義を見てないものが色々出てくるが想像はできる。
各単語で置き換え候補を見積もって、提案手法の基準で優先順位をつけて、高い順からモデルの予測が間違ったものになるまで置き換えていくという感じになっている。
細かい定義を見ていく。と言っても論文の式をべたべた貼っていくのみ。まあやむなし。
まず、各単語の word saliency の計算は以下。やっている計算は上で説明したもの。
ある単語 $ w_i $ の置き換え候補を見積もる方法は以下。正しいラベルを予測する確率の差分が最大になるように類義語の中から引っ張ってくるようになっている。
最後に優先順のための順位づけをする計算(これが PWWS)は以下。 $ ΔP_i^* $ は $ P(y_{\text{true}} | x) - P(y_{\text{true}} | x_i^*) $ で i 番目の単語を置き換えたときの予測確率の差分である。この差分と word saliency (の softmax) の積で計算していて、この差分を掛けている分が probability weighted の所以である。
ここまで読んでアルゴリズムは理解した。
black-box と言いながらも入力に対して単語を unknown に置き換えたりせねばならず、これも実際のシステムではなかなか難しい(というか生のテキストを入れるだけの場合は実現不可能と言ってもいいと思う)。
画像と比べてまだまだ研究されていないという状況も読み取れるし、やれることも多そう。
あとは実験。
データは以下を使用。
- IMDB (pos/neg 分類)
- AG's News (World, Sports, Business and Sci/Tech 分類)
- Yahoo! Answer (10 個のカテゴリ予測)
攻撃対象となるモデルは以下を使用。
- {word, character} based の CNN
- word based の Bi-directional LSTM
- word based の LSTM
比較手法は以下。
- Random: ランダムに類義語に置き換える
- Gradient: モデルの softmax 出力値の差分が大きくなるように類義語に置き換える(これは softmax 出力値を使ってるので、gradient と言っても black box の範疇)
- Traversing in word order: 単語順に wordnet の tree を traverse していって R(w, L) に則り置き換えを見つけるもの?ちょっとこれは説明がなくてよく分からん。
- Word Saliency: この論文で提案している確率の重み付けがない状態のもの
各手法で置き換えた結果の classification accuracy を計測したものが以下。提案手法が優秀。
pos/neg くらいだったらがっつり落とせるけど、多クラス分類ではこんなもんなのかと知った(まあ一応 black box 手法ではあるので難しいことは難しいが)。
単語を大量に置き換えれば間違えさせることは簡単なので、どれくらいの単語を置き換えたのかというのも合わせてチェックしておく必要がある。それが以下。これも提案手法が良い結果だが、やはり置き換えの割合が思ったより多いなという印象。
さらに、元の文章の意味が変わってしまっていたらそれは人間でも間違えるよね、ということで人間による評価との比較もしている。これは一部のみの実施だが、結果は以下。 IMDB では確かにうまくいってるけど AG's news はそもそも人間には難しい問題っぽい(このデータは自分は触ったことないから実際のところはよく分からんけど、例を見るに確かにはっきり分類できないタイプの問題もありそう)。
実験の細かいところでやや理解していないところもあるが、一通り読んで理解した。
NLP における adversarial example も色々進んできていることが垣間見れた一方で、まだまだ問題設定などを変えて調べられることも多そうで、トピックとしてはなかなか面白いかもしれない。
他の論文も読んでみようと思う。