Open yoheikikuta opened 5 years ago
adversarial example 系の話が結構好きだが、これまでは専ら画像のものだけを調べていて NLP のものはちら見する程度だった。 NLP でもそろそろ色々なパターンが出てきて面白いタイミングなのかと思って、いくつか調べたりしていた。
これは ACL2019 short paper で、ダイレクトに知りたい内容が書いてありそうだったので読んでみることにした。
テキストにおける adversarial 系の話は画像認識の場合と比べてちょっと違ったりするので、最初に言葉遣いというか注目しているポイントを書き出しておく。
2018 くらいまでに出た NLP adversarial examples で有名っぽいものを振り返っておく。
まず(NLP に限らず)adversarial example の分類として、white box (攻撃対象のモデルの情報が取得できる、有り体に言って loss の微分とか使える) と black box (入出力しか取得できない) がある。
それぞれの代表格(単に citation の数が多いという意味)は以下のものっぽい。
AddSent
は質問文を複製して架空の答えを準備しその答えが導けるような文章を追加することでモデルを惑わせる方法である。例は以下(原論文より引用)で、以下にもモデルが間違えそうな文章を最後に足して(青文字の文章)間違えさせている。
これらを踏まえて、より発展させた手法が色々出てきているという感じ。文字レベルじゃなくて単語レベルだったり black box で文字レベルにしたり、想像に難くない。
前置きが長くなったが、論文の内容に入っていく。
モチベーションはより「自然な」adversarial examples を作成したいというものである。 上の例で見たように、NLP における摂動は画像認識の場合と比べると難しい。例えば文字の置き換えをすれば語彙の誤りとして人間が知覚しやすいし、明らかに変な文を加えたりした場合も同様である。
したがって、
という条件を満たすような adversarial examples を作るというのは、色々な工夫を要求されるものになっている。
この論文では Probability Weighted Word Saliency (PWWS) という black box の手法を提案してそれをクリアーした、ということで以下その内容を見ていく。
問題設定は以下。
black-box と言いながら softmax の値全部にアクセスできるというのはなかなか厳しい条件だと思う。 実際にモデルが black box になっているシステムではそうはなっていない場合が多いので。この辺を念頭に入れてより現実的なものにしていくというのは一つの興味深い方向性かもしれない。
基本戦略としては以下。adversarial example を作るにも色々方法があるが、この論文では単語の置き換えをベースに作るようになっている。
そんなに難しいことはない。あとは類義語という時に、どういう基準で単語を選ぶか、が肝になってそれこそがこの論文の貢献ということになる。
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)は以下。 $ ΔPi^* $ は $ P(y{\text{true}} | x) - P(y_{\text{true}} | x_i^*) $ で i 番目の単語を置き換えたときの予測確率の差分である。この差分と word saliency (の softmax) の積で計算していて、この差分を掛けている分が probability weighted の所以である。
ここまで読んでアルゴリズムは理解した。 black-box と言いながらも入力に対して単語を unknown に置き換えたりせねばならず、これも実際のシステムではなかなか難しい(というか生のテキストを入れるだけの場合は実現不可能と言ってもいいと思う)。
画像と比べてまだまだ研究されていないという状況も読み取れるし、やれることも多そう。
あとは実験。
データは以下を使用。
攻撃対象となるモデルは以下を使用。
比較手法は以下。
各手法で置き換えた結果の classification accuracy を計測したものが以下。提案手法が優秀。 pos/neg くらいだったらがっつり落とせるけど、多クラス分類ではこんなもんなのかと知った(まあ一応 black box 手法ではあるので難しいことは難しいが)。
単語を大量に置き換えれば間違えさせることは簡単なので、どれくらいの単語を置き換えたのかというのも合わせてチェックしておく必要がある。それが以下。これも提案手法が良い結果だが、やはり置き換えの割合が思ったより多いなという印象。
さらに、元の文章の意味が変わってしまっていたらそれは人間でも間違えるよね、ということで人間による評価との比較もしている。これは一部のみの実施だが、結果は以下。 IMDB では確かにうまくいってるけど AG's news はそもそも人間には難しい問題っぽい(このデータは自分は触ったことないから実際のところはよく分からんけど、例を見るに確かにはっきり分類できないタイプの問題もありそう)。
実際に置き換えた結果の文章を眺めてみる。
まずは IMDB のもの。こういう意味的に同じ単語の置き換えだけで誤分類されると確かに摂動による adversarial examples って感じで面白い。
一方難易度が高かった Yahoo! Answers の場合。頑張って大量に置き換えてなんとか誤認識させられていることが分かる(しかし confidence はそうでもない)。
実験の細かいところでやや理解していないところもあるが、一通り読んで理解した。
NLP における adversarial example も色々進んできていることが垣間見れた一方で、まだまだ問題設定などを変えて調べられることも多そうで、トピックとしてはなかなか面白いかもしれない。
他の論文も読んでみようと思う。
論文リンク
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/