IBM 製基盤モデル Slate と Watson NLU の性能比較（sentiment classification タスク）

# この記事の内容
watsonx.ai でリリースされた IBM 製基盤モデルである Slate と Watson NLU で sentiment classification タスクにおける性能比較と考察を行いました。

# Slate について
Slate は [IBM が提供を発表](https://jp.newsroom.ibm.com/2023-05-16-Blog-195370-01 "blog")している基盤モデルの中で encoder アーキテクチャーのモデルで、ラベル付きデータセットを用いて以下のような NLP タスクに対応させることができます。
・Entity extraction
・Text classification
・Sentiment classification（document, sentence, target）
当記事では sentiment classification（sentence）タスクを対象としています。

# Slate の学習と推論の実行方法
[前回の記事](https://qiita.com/Tomoyuki_Hori/items/09b3501ce014f2f4f2e8 "article")を参考にしました。


# Watson NLU の学習と推論の実行方法
[公式ドキュメント](https://cloud.ibm.com/docs/natural-language-understanding?topic=natural-language-understanding-classifications "document")を参考にしました。
ちなみに Watson NLU の custom sentiment model は 2023/6/3 に廃止されているため、今回は custom classification model を使用しました。

# データセットの準備
[WRIME](https://github.com/ids-cv/wrime "link")という日本語の感情分析のためのデータセットを使用しました。
短い日本語文とそれに対して5種類の感情極性（-2:強いネガティブ, -1:ネガティブ, 0:ニュートラル, 1:ポジティブ, 2:強いポジティブ）のうちいずれかがラベル付けされています。
今回は -2:強いネガティブ, 0:ニュートラル, 2:強いポジティブ の値がラベル付けされているサンプルのみを使用し、negative, neutral, positive の3クラス分類で検証を行いました。
また、データセットは Train, Dev, Test 用に分けられています。
```text:今回使用するデータの例
明日から学校開始。また早起きしないと。,neutral
天気もいいし、花粉のシーズンも終わったようだし、布団が干せて嬉しいなあ。,positive
あらら、163人のうち79人が発症は厳しいね。６日から５日間の営業停止処分て、その間の寮生の過ごし方、食事のお世話はどうなるのだろうかな？,negative
...
```

# 評価方法
・Slate, NLU それぞれで Train 用データセットを使用してモデルを学習し、Test 用データセットに対する分類結果を求めます。（今回 Dev 用データセットは使用しません。）
・[sklearn の roc_auc_score メソッド](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html "link")を使用して ROC curve の AUC score を one vs rest, one vs one それぞれで（macro 平均で）求めて結果を比較します。
・また、今回は多クラス分類問題のため、top-1 の結果のみを採用した際の性能を観察するために、予測結果の confidence に対する閾値を変動させ、変化する accuracy ごとの棄却されなかったサンプル（有効なサンプル）の割合も可視化して比較します。

# 結果
### AUC score
以下の表のような結果となりました。
・one vs rest の AUC score では NLU の方が僅かに高いスコアとなりました。
・一方で one vs one の AUC score では Slate の方が高いスコアとなりました。
|model|AUC score（ovr）|AUC score（ovo）|
|:-----------|------------:|------------:|
|Slate|0.838|**0.845**|
|NLU|**0.840**|0.839|

### accuracy ごとの有効なサンプルの割合
##### accuracy（micro平均）ごとの有効なサンプルの割合
![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564348/dfa038c5-d968-f4fe-0d48-8934b304eec7.png)

##### accuracy（macro平均）ごとの有効なサンプルの割合
![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564348/fed87320-c2d3-bedf-23d4-846f72786050.png)

accuracy ごとの有効なサンプルの割合を可視化しました。
グラフが右上にあるほど性能が高いことを表しています。
・micro 平均の accuracy では概ね slate の方が良い性能となっています。
・macro 平均の accuracy では slate の方がはるかに高い性能となっています。

# まとめと考察
・以上の結果から、sentiment classification タスクにおいては概ね slate の方が高い性能を得られることがわかりました。
・データ全体の平均から求めた性能（class imbalance の影響有）である AUC score（ovr）や accuracy（micro 平均）については slate, NLU で大きな性能差はありませんでした。
・一方でクラスごとの平均から求めた性能である AUC score（ovo）や accuracy（macro 平均）では slate の方が NLU の性能を大きく上回っていました。
・今回の3クラス分類問題でサンプルの半数以上は neutral が正解ラベルとなっており NLU は slate よりもその偏りの影響を大きく受けていたと考えられます。
・今回のような sentiment classification タスクにおいては NLU よりもまずは Slate を試してみるのが良さそうです。

# 参考
https://jp.newsroom.ibm.com/2023-05-16-Blog-195370-01

https://qiita.com/Tomoyuki_Hori/items/09b3501ce014f2f4f2e8

https://cloud.ibm.com/docs/natural-language-understanding?topic=natural-language-understanding-classifications

https://github.com/ids-cv/wrime

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html