🚀 会話における感情認識 (ERC)
会話における感情認識(ERC)は、テキストモダリティを用いて発話の感情を正しく分類することを目的としたプロジェクトです。本プロジェクトでは、MELDとIEMOCAPの2つのデータセットを用いて実験を行っています。
🚀 クイックスタート
詳細については、こちらをご覧ください。
デモビデオを見る!
✨ 主な機能
- テキストモダリティを用いた会話における感情認識
- EmoBERTaモデルを用いた高精度な感情分類
- 過去と未来の発話を考慮した感情認識
📦 インストール
前提条件
- x86 - 64のUnixまたはUnixライクなマシン
- Python 3.8以上
- システムのPythonと混同しないように、仮想環境(conda、virtualenvなど)で実行することを強く推奨します。
multimodal-datasets
リポジトリ(サブモジュール)
pip install -r requirements.txt
EmoBERTaのトレーニング
まず、train - erc - text.yaml
でハイパーパラメータとデータセットを設定してから、このディレクトリで以下のコマンドを実行します。仮想環境で実行することをおすすめします。
python train-erc-text.py
これにより、train - erc - text - hp.py
と train - erc - text - full.py
が呼び出されます。
💻 使用例
基本的な使用法
python train-erc-text.py
高度な使用法
python train-erc-text.py
📚 ドキュメント
テスト分割での結果(重み付きf1スコア)
モデル |
条件 |
MELD |
IEMOCAP |
EmoBERTa |
過去と未来の発話なし |
63.46 |
56.09 |
|
過去の発話のみ |
64.55 |
68.57 |
|
未来の発話のみ |
64.23 |
66.56 |
|
過去と未来の発話の両方 |
65.61 |
67.42 |
|
→ 話者名なし |
65.07 |
64.02 |
上記の数値は、5つのランダムシードでの実行結果の平均値です。
もっと詳しいトレーニングとテストの詳細を見たい場合は、./results/
を確認してください。
学習済みのチェックポイントなどをダウンロードしたい場合は、ここからダウンロードできます。かなり大きなzipファイルです。
デプロイメント
Huggingface
以下のモデルをHuggingfaceで公開しています。
これらはそれぞれRoBERTa - baseとRoBERTa - largeをベースにしています。[MELDとIEMOCAPの両方のデータセット](utterance - ordered - MELD_IEMOCAP.json)で学習されています。公開したモデルは話者情報を考慮せず、一度に1つの発話のみを分類します(例:"I love you")。
Flaskアプリ
Flask RESTfulサーバーアプリをDockerコンテナとして、またはPythonスクリプトとして実行できます。
- Dockerコンテナとして実行する(推奨)
4つのイメージがあります。必要なものを選んでください。
docker run -it --rm -p 10006:10006 tae898/emoberta-base
docker run -it --rm -p 10006:10006 --gpus all tae898/emoberta-base-cuda
docker run -it --rm -p 10006:10006 tae898/emoberta-large
docker run -it --rm -p 10006:10006 --gpus all tae898/emoberta-large-cuda
- Python環境で実行する
この方法はDockerの方法よりも推奨度が低いです。
まず
pip install -r requirements - deploy.txt
を実行してください。
app.py
はFlask RESTfulサーバーです。使い方は以下の通りです。app.py [-h] [--host HOST] [--port PORT] [--device DEVICE] [--model-type MODEL_TYPE]
例えば:python app.py --host 0.0.0.0 --port 10006 --device cpu --model-type emoberta-base
クライアント
アプリが実行されたら、サーバーにテキストを送信できます。まず必要なパッケージをインストールしてください:pip install -r requirements - client.txt
、そして client.py を実行します。使い方は以下の通りです。
client.py [-h] [--url-emoberta URL_EMOBERTA] --text TEXT
例えば:
python client.py --text "Emotion recognition is so cool!"
以下のような結果が得られます。
{
"neutral": 0.0049800905,
"joy": 0.96399665,
"surprise": 0.018937444,
"anger": 0.0071516023,
"sadness": 0.002021492,
"disgust": 0.001495996,
"fear": 0.0014167271
}
🔧 技術詳細
本プロジェクトでは、EmoBERTaモデルを用いて会話における感情認識を行っています。トレーニングにはMELDとIEMOCAPの2つのデータセットを使用しており、過去と未来の発話を考慮することで高精度な感情分類を実現しています。
📄 ライセンス
本プロジェクトはMITライセンスの下で公開されています。
トラブルシューティング
問題を見つけて解決する最良の方法は、GitHubのissueタブを見ることです。必要なものが見つからない場合は、自由にissueを作成してください。私たちはすぐに対応します。
コントリビューション
コントリビューションは、オープンソースコミュニティを学び、刺激を受け、創造する素晴らしい場所にしています。あなたが行うすべてのコントリビューションは、大いに感謝されます。
- プロジェクトをフォークする
- あなたの機能ブランチを作成する (
git checkout -b feature/AmazingFeature
)
- ルートリポジトリディレクトリで
make style && quality
を実行して、コード品質を確保する
- あなたの変更をコミットする (
git commit -m 'Add some AmazingFeature'
)
- ブランチにプッシュする (
git push origin feature/AmazingFeature
)
- プルリクエストを作成する
引用
論文はこちらをご覧ください。
@misc{kim2021emoberta,
title={EmoBERTa: Speaker-Aware Emotion Recognition in Conversation with RoBERTa},
author={Taewoon Kim and Piek Vossen},
year={2021},
eprint={2108.12009},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
著者