🚀 ロベルタベースの感情分析モデル
このモデルは、go_emotions データセットを用いて、roberta-base から多ラベル分類のために学習されました。ONNX形式のバージョンも利用可能で、推論速度やメモリ使用量の最適化が期待できます。
✨ 主な機能
- 多ラベル分類: 入力テキストに対して複数の感情ラベルを予測します。
- ONNX形式対応: 推論速度の向上とメモリ使用量の削減が可能です。
- 高い精度: データセットに基づく評価で良好な結果を示しています。
📦 インストール
本READMEにはインストール手順が記載されていないため、このセクションは省略されます。
💻 使用例
基本的な使用法
from transformers import pipeline
classifier = pipeline(task="text-classification", model="SamLowe/roberta-base-go_emotions", top_k=None)
sentences = ["I am not having a great day"]
model_outputs = classifier(sentences)
print(model_outputs[0])
📚 ドキュメント
概要
このモデルは、roberta-base を go_emotions データセットで多ラベル分類のために学習したものです。ONNX形式のバージョン(INT8量子化ONNXバージョンも含む)は、https://huggingface.co/SamLowe/roberta-base-go_emotions-onnx で入手可能です。これらのバージョンは推論が高速で、特に小さなバッチサイズでの性能が良く、推論に必要な依存関係のサイズを大幅に削減し、モデルの推論をより多プラットフォームで可能にします。量子化バージョンの場合は、推論のみが必要な場合、モデルファイル/ダウンロードサイズを75%削減しながら、ほぼすべての精度を維持します。
モデルに使用されたデータセット
go_emotions はRedditデータに基づいており、28のラベルを持っています。これは多ラベルデータセットで、任意の入力テキストに対して1つまたは複数のラベルが適用される可能性があります。したがって、このモデルは多ラベル分類モデルで、任意の入力テキストに対して28の「確率」浮動小数点出力を生成します。通常、各ラベルの予測には0.5の閾値が確率に適用されます。
モデルの作成方法
モデルは、AutoModelForSequenceClassification.from_pretrained
を使用して、problem_type="multi_label_classification"
で3エポック、学習率2e-5、重み減衰0.01で学習されました。
推論
Huggingface Transformersでこのモデルを使用する方法は複数あります。おそらく最も簡単なのはパイプラインを使用することです。
評価 / メトリクス
モデルの評価は以下の場所で利用可能です。
- https://github.com/samlowe/go_emotions-dataset/blob/main/eval-roberta-base-go_emotions.ipynb

概要
上記のノートブックで提供されているように、データセットのテスト分割を使用して多ラベル出力(各ラベルを2値化するために0.5の閾値を適用した28次元出力)を評価すると、以下の結果が得られます。
- 正解率: 0.474
- 適合率: 0.575
- 再現率: 0.396
- F1値: 0.450
ただし、多ラベルの性質(各ラベルは実質的に独立した2値分類)と、データセット内のラベルの表現が大きく異なることを考慮すると、各ラベルごとにメトリクスを測定する方が意味があります。
0.5の閾値を適用してモデル出力を2値化した場合、上記のノートブックに従って、各ラベルのメトリクスは以下の通りです。
ラベル |
正解率 |
適合率 |
再現率 |
F1値 |
MCC |
サポート |
閾値 |
admiration |
0.946 |
0.725 |
0.675 |
0.699 |
0.670 |
504 |
0.5 |
amusement |
0.982 |
0.790 |
0.871 |
0.829 |
0.821 |
264 |
0.5 |
anger |
0.970 |
0.652 |
0.379 |
0.479 |
0.483 |
198 |
0.5 |
annoyance |
0.940 |
0.472 |
0.159 |
0.238 |
0.250 |
320 |
0.5 |
approval |
0.942 |
0.609 |
0.302 |
0.404 |
0.403 |
351 |
0.5 |
caring |
0.973 |
0.448 |
0.319 |
0.372 |
0.364 |
135 |
0.5 |
confusion |
0.972 |
0.500 |
0.431 |
0.463 |
0.450 |
153 |
0.5 |
curiosity |
0.950 |
0.537 |
0.356 |
0.428 |
0.412 |
284 |
0.5 |
desire |
0.987 |
0.630 |
0.410 |
0.496 |
0.502 |
83 |
0.5 |
disappointment |
0.974 |
0.625 |
0.199 |
0.302 |
0.343 |
151 |
0.5 |
disapproval |
0.950 |
0.494 |
0.307 |
0.379 |
0.365 |
267 |
0.5 |
disgust |
0.982 |
0.707 |
0.333 |
0.453 |
0.478 |
123 |
0.5 |
embarrassment |
0.994 |
0.750 |
0.243 |
0.367 |
0.425 |
37 |
0.5 |
excitement |
0.983 |
0.603 |
0.340 |
0.435 |
0.445 |
103 |
0.5 |
fear |
0.992 |
0.758 |
0.603 |
0.671 |
0.672 |
78 |
0.5 |
gratitude |
0.990 |
0.960 |
0.881 |
0.919 |
0.914 |
352 |
0.5 |
grief |
0.999 |
0.000 |
0.000 |
0.000 |
0.000 |
6 |
0.5 |
joy |
0.978 |
0.647 |
0.559 |
0.600 |
0.590 |
161 |
0.5 |
love |
0.982 |
0.773 |
0.832 |
0.802 |
0.793 |
238 |
0.5 |
nervousness |
0.996 |
0.600 |
0.130 |
0.214 |
0.278 |
23 |
0.5 |
optimism |
0.972 |
0.667 |
0.376 |
0.481 |
0.488 |
186 |
0.5 |
pride |
0.997 |
0.000 |
0.000 |
0.000 |
0.000 |
16 |
0.5 |
realization |
0.974 |
0.541 |
0.138 |
0.220 |
0.264 |
145 |
0.5 |
relief |
0.998 |
0.000 |
0.000 |
0.000 |
0.000 |
11 |
0.5 |
remorse |
0.991 |
0.553 |
0.750 |
0.636 |
0.640 |
56 |
0.5 |
sadness |
0.977 |
0.621 |
0.494 |
0.550 |
0.542 |
156 |
0.5 |
surprise |
0.981 |
0.750 |
0.404 |
0.525 |
0.542 |
141 |
0.5 |
neutral |
0.782 |
0.694 |
0.604 |
0.646 |
0.492 |
1787 |
0.5 |
各ラベルの閾値を最適なF1メトリクスを与えるものに最適化すると、若干良いメトリクスが得られます。適合率を少し犠牲にして再現率を大幅に向上させることで、F1に有利な結果が得られます(この方法は上記のノートブックに示されています)。
ラベル |
正解率 |
適合率 |
再現率 |
F1値 |
MCC |
サポート |
閾値 |
admiration |
0.940 |
0.651 |
0.776 |
0.708 |
0.678 |
504 |
0.25 |
amusement |
0.982 |
0.781 |
0.890 |
0.832 |
0.825 |
264 |
0.45 |
anger |
0.959 |
0.454 |
0.601 |
0.517 |
0.502 |
198 |
0.15 |
annoyance |
0.864 |
0.243 |
0.619 |
0.349 |
0.328 |
320 |
0.10 |
approval |
0.926 |
0.432 |
0.442 |
0.437 |
0.397 |
351 |
0.30 |
caring |
0.972 |
0.426 |
0.385 |
0.405 |
0.391 |
135 |
0.40 |
confusion |
0.974 |
0.548 |
0.412 |
0.470 |
0.462 |
153 |
0.55 |
curiosity |
0.943 |
0.473 |
0.711 |
0.568 |
0.552 |
284 |
0.25 |
desire |
0.985 |
0.518 |
0.530 |
0.524 |
0.516 |
83 |
0.25 |
disappointment |
0.974 |
0.562 |
0.298 |
0.390 |
0.398 |
151 |
0.40 |
disapproval |
0.941 |
0.414 |
0.468 |
0.439 |
0.409 |
267 |
0.30 |
disgust |
0.978 |
0.523 |
0.463 |
0.491 |
0.481 |
123 |
0.20 |
embarrassment |
0.994 |
0.567 |
0.459 |
0.507 |
0.507 |
37 |
0.10 |
excitement |
0.981 |
0.500 |
0.417 |
0.455 |
0.447 |
103 |
0.35 |
fear |
0.991 |
0.712 |
0.667 |
0.689 |
0.685 |
78 |
0.40 |
gratitude |
0.990 |
0.957 |
0.889 |
0.922 |
0.917 |
352 |
0.45 |
grief |
0.999 |
0.333 |
0.333 |
0.333 |
0.333 |
6 |
0.05 |
joy |
0.978 |
0.623 |
0.646 |
0.634 |
0.623 |
161 |
0.40 |
love |
0.982 |
0.740 |
0.899 |
0.812 |
0.807 |
238 |
0.25 |
nervousness |
0.996 |
0.571 |
0.348 |
0.432 |
0.444 |
23 |
0.25 |
optimism |
0.971 |
0.580 |
0.565 |
0.572 |
0.557 |
186 |
0.20 |
pride |
0.998 |
0.875 |
0.438 |
0.583 |
0.618 |
16 |
0.10 |
realization |
0.961 |
0.270 |
0.262 |
0.266 |
0.246 |
145 |
0.15 |
relief |
0.992 |
0.152 |
0.636 |
0.246 |
0.309 |
11 |
0.05 |
remorse |
0.991 |
0.541 |
0.946 |
0.688 |
0.712 |
56 |
0.10 |
sadness |
0.977 |
0.599 |
0.583 |
0.591 |
0.579 |
156 |
0.40 |
surprise |
0.977 |
0.543 |
0.674 |
0.601 |
0.593 |
141 |
0.15 |
neutral |
0.758 |
0.598 |
0.810 |
0.688 |
0.513 |
1787 |
0.25 |
これにより、全体的なメトリクスが改善されます。
- 適合率: 0.542
- 再現率: 0.577
- F1値: 0.541
また、各ラベルのサポートの相対的なサイズで重み付けして計算すると、以下のようになります。
- 適合率: 0.572
- 再現率: 0.677
- F1値: 0.611
データセットに関するコメント
一部のラベル(例えば、gratitude)は独立して考えた場合、F1が0.9を超える非常に高い性能を示しますが、他のラベル(例えば、relief)は非常に低い性能を示します。
これは挑戦的なデータセットです。reliefのようなラベルは、学習データに非常に少ない例しかありません(4万件以上のうち100件未満で、テスト分割ではわずか11件)。
しかし、go_emotionsの学習データには、性能を制約すると考えられるいくつかの曖昧さや/またはラベリングエラーも見られます。データセットのデータクリーニングを行い、ラベリングの誤り、曖昧さ、矛盾、重複を減らすことで、より高性能なモデルが得られるでしょう。
📄 ライセンス
このモデルはMITライセンスの下で提供されています。