音声感情認識(Speech Emotion Recognition, SER)を試した時のメモです。長めの音声をバッチ処理したかったので、API を使わずに試す方法を探しました。
音声認識/音声合成フレームワーク動向などから探しています。
やらなかった案
1. PwC のライブラリのとこにあるやつ
Papers with Code には Speech Emotion Recognition のタスクページがあり、ライブラリ部分に実装が並んでいます。ただ、最近動いてないリポジトリが多く、今でも簡単に動くものかどうかが怪しく、やめました。
2. espnet/espnet の IEMOCAP モデル
2023 年 5 月現在、espnet/espnet の SLU (Spoken Language Understanding) results のコーナーに「Emotion Recognition」があるので、実装があるように見えます。(SLU results のコーナーにある理由はわかりません。)
実際、IEMOCAP レシピのページ を見ると「Emotional Labels: anger, happiness, sadness and neutral」での分類評価も記載があるのですが、その下の ASR 評価には pretrained モデルのリンクがあるのに対してそちらにはリンクがありません。pretrained モデルの公開はせずにスコアだけ載せたパターンのようなので、やめました。
3. Hugging Face で人気あるやつ
2023 年 5 月現在、Hugging Face の Audio Classification カテゴリで 2 位の倍以上のダウンロード数なのが、現在 1 位の ehcalabres/wav2vec2-lg-xlsr-en-speech-emotion-recognition です。
ただ、ローカルで動かすにはどうすればいいのかわからないという話題でスレッドが盛り上がっており、その割に解決されていなそうだったので、やめました。
組み込みアプリの利用が多いことが原因なのかどうなのか、ダウンロード数が多い理由はわかりません。
4. NVIDIA/NeMo の ASR
NVIDIA/NeMo 内の asr_evaluator ツールには emotion メタデータを取得する IF があるように見えます。が、実際に emotion を返す pretrained モデルを見つけることができず、将来的な機能追加だとみて、やめました。
5. PaddlePaddle/PaddleSpeech
学習方法勉強ノートブックみたいなのしか見つからなかったので、やめました。
6. coqui-ai/STT
なんもなさそうだったのでやめました。
やった案: speechbrain/speechbrain
Web で試せるアプリが動いていたので、実現可能性が高いと思い、やりました。アプリのソースを見ても、実行部分はほとんど speechbrain/speechbrain 側で吸収してくれていそうでした。
speechbrain/emotion-recognition-wav2vec2-IEMOCAP の説明にある以下のサンプルコード
from speechbrain.pretrained.interfaces import foreign_class
classifier = foreign_class(source="speechbrain/emotion-recognition-wav2vec2-IEMOCAP", pymodule_file="custom_interface.py", classname="CustomEncoderWav2vec2Classifier")
out_prob, score, index, text_lab = classifier.classify_file("speechbrain/emotion-recognition-wav2vec2-IEMOCAP/anger.wav")
print(text_lab)
を動かすだけで認識部分は動いたので、あとは長めの音声を渡す部分を作り、無事に試すことができました。
感想としては、ラジオ番組のようなテンション高めの会話だとずっとハッピーになってしまったりして、用途を選びそうでした。そもそも IEMOCAP のデータは英語しかないので、言語の違いも要因かもしれません。