【論文読みと動作確認を少々】"Beyond Accuracy: Behavioral Testing of NLP Models with CheckList" 

## NLPモデル版CheckListの提案。バグが早期に見つけられるようになる..??

### 0.はじめに
この記事はMicrosoft ResearchのMarco Tulio Ribeiro他による[Beyond Accuracy: Behavioral Testing of NLP Models with CheckList(ACL 2020 のベストペーパー)](https://arxiv.org/abs/2005.04118)とその[github](https://github.com/marcotcr/checklist)を一部試した内容について書いてみました。

この論文ではNLPタスクのデバッグ用CheckListを提案しています。
**CheckListの一部を使用すると、経験の少ないユーザーがわずか2時間でSOTA[^1]モデルの重大なバグを見つけることができる**効果があったようです。
[^1]: SOTAモデルとして**BERT-base,RoBERTa-base**を利用

またこのCheckListはブラックボックスな商用モデル[^2]の比較（どのクラウドサービス使おうかな）にも使えます。
[^2]: 商用モデルとして**Microsoft’s Text Analytics, Google Cloud’s Natural Language, Amazon’s Comprehend**を利用

以下の順番で説明します。
**1. CheckListの簡単な紹介**
**2. githubを動かして日本語版のCheckList用の文章が生成できそうか(google colab利用)**
**3. 所感**

### 1.CheckListの簡単な紹介

実はSansanの高橋さんが書かれたブログ[【Techの道も一歩から】第33回「文献紹介：Beyond Accuracy: Behavioral Testing of NLP Models with CheckList」](https://buildersbox.corp-sansan.com/entry/2020/10/26/110000)で丁寧に解説されているので、ざっくりと説明します。
CheckListの種類は**3**種類です。

#### 1.1 Minimum Functionality test(MFT,最小機能テスト)
穴埋めの文章のように、部分的に単語が抜けたテンプレートを用意し、単語を色々変えて正しく予測できるかを確認します。
具体的に以下の極性判定で用いた場合の例を見るとわかりやすいです。

![MFT.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684711/4c6bf132-b728-e4b4-8ce4-bed24319b29e.png)

テンプレートは***I {NEGATION} {POS_VERB} the {THING}.***で、

* {NEGATION} = {"can't",didn't}
* {POS_VERB} = {"say I recommend","love"}
* {THING} = {"food","flight"}

の単語をそれぞれ挿入しています。本来***negative***と判定して欲しいところを予測では***pos,neutral***と
間違えています。

#### 1.2 Invariance test(INV,不変性テスト)
タイプミスや、単語の一部（地名などの固有表現抽出）の入れ替えや追加を行っても推論結果が変わらないかを確認します。
以下具体例です。

![INV.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684711/631def3a-33d4-0c1b-a182-b13f9a1080ca.png)

1文目では***Chicago***から***Dallas***に変更した結果、***pos***から***neutral***に推論結果の極性が変わってしまった例です。

#### 1.3 Directional Expectation test(DIR,方向性期待テスト)
INVと似ていますが、期待するような結果を出力するかを確認します。
negativeな文章に否定的な文章を加えてもnegativeと推測するかや、neutralの単語の前に否定形(*not*)があってもneutralのままか、などを確認します。

以下、具体例です。
![DIR.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684711/9069e9b7-58fc-8719-2fa5-1b4eb992aa7d.png)

1文目は***AmericanAir service wasn't great.***が*negative*な文章です。それに***You are lame.***(あなたは時代遅れだ。)を追加すると*neutral*と極性が変わり誤判定をするようになってしまいました。

### 2.githubを動かして日本語版のCheckList用の文章が生成できそうか(google colab利用)
冷静に考えると、CheckList用の文章を用意するのは結構大変です。
この論文の[github](https://github.com/marcotcr/checklist)を見てみると、RoBERTaを用いた文章生成をサジェストしてくれそうです。

![suggestion1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684711/654d7262-acba-b282-12ef-b7e5ff2a3c30.png)

更に読み進めるとMultilingual suggestionsとして、ポルトガル語の事例が載っています。
![suggestion2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684711/da3c7adc-d269-5e4b-52fd-b79d847f3ad2.png)

これは・・・ **日本語版の文章も文章生成してくれるのでは・・・（三点リーダー症候群）**

#### 2.1 日本語版のsuggestion検証
google colablatoryを用いて検証をしてみました。
インストールはgithubの通りに実行すればできました。

* **例1)** 
![output1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684711/ea6e4eac-1355-ce9b-e114-01e4c2df413e.png)


<font color="blue">**こ、これは...**</font>

* **例2)**
![output2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684711/1cea0f31-60fd-bcf5-b83b-5c4c180504a2.png)


<font color="blue">**こ、こいつは...微妙そうだ...**</font>

ちなみに、マルチリンガルのレキシコン（語彙）を利用して英語文の中で指定した国特有の人名や国名を挿入することもできるようです。
以下はgithubで***german***を選択した例です。
![suggestion3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684711/99e7bf86-9706-6bf1-9ec3-f6efc4038528.png)

こういう事例を見ると、日本語版を試したくなります。

* **例3)**
![output3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684711/7ddbe101-987d-1b2b-69a9-5d41509e0878.png)

<font color="blue">**男性名や地名のバリエーションを増やす時に利用できるかも。**</font>

* **例4)**
![output4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684711/8e4b19fe-00db-29dd-230f-9f7fa25ccf2b.png)

<font color="blue">**女性名も違和感のない名前が生成される。**</font>

### 3.所感

日本語の文章生成の結果はやや微妙でしたが、CheckListにより、

* ベンチマークをしてどのクラウドサービスを使うか判断材料の一つになる。
* 学習モデルの弱点に早めに気づける


などのメリットがあると感じました。

論文中には、文章の最後にURL `http://...`や`@...`を追加したとたん誤判定になる事例や、
性別や人種に関するバイアスにも触れており興味深かったです(詳細はぜひ元論文を読んでください)。

<font color="Red">***※誤った記述があればご指摘頂けると嬉しいです！***</font>

### -参考文献 -
ありがとうございました！

* [元論文:"Beyond Accuracy: Behavioral Testing of NLP Models with CheckList" ](https://arxiv.org/abs/2005.04118)
* [CheckListのgithub](https://github.com/marcotcr/checklist
* [【Techの道も一歩から】第33回「文献紹介：Beyond Accuracy: Behavioral Testing of NLP Models with CheckList」](https://buildersbox.corp-sansan.com/entry/2020/10/26/110000)