Open3

音声の感情表現を定量的に評価する方法を調べる

kale_corekale_core

Wav2Vec 2.0の音声感情認識を試す

訓練済みモデルを使って感情の予測を行うサンプルコードがある(Prediction)
https://github.com/m3hrdadfi/soxan

本家はクローンしての使用することを想定している
今回はpipでインストールできるようになっているフォークを使った
https://github.com/VonSquiggles/soxan

pip install git+https://github.com/VonSquiggles/soxan.git

Hugging Faceの海を探し、以下のモデルにたどり着いた
https://huggingface.co/Bagus/wav2vec2-xlsr-japanese-speech-emotion-recognition/tree/main

config.jsonのid2labelの内容から
怒り、喜び、平常、哀しみの4つの感情が扱えるようだ
しかしどのデータセットでファインチューニングされたかわからない
5エポックでEvalのlossは7.49
このあたり、どれだけの精度かいまいち感覚がわからない

サンプルの主な修正箇所は以下

- from src.models import Wav2Vec2ForSpeechClassification, HubertForSpeechClassification
+ from soxan.models import Wav2Vec2ForSpeechClassification, HubertForSpeechClassification

- model_name_or_path = "path/to/your-pretrained-model"
+ model_name_or_path = "Bagus/wav2vec2-xlsr-japanese-speech-emotion-

- HubertForSpeechClassification.from_pretrained(model_name_or_path).to(device)
+ # model = HubertForSpeechClassification.from_pretrained(model_name_or_path).to(device)

pathに手元の音声ファイルをいくつか指定して確認した
サンプルは少ないが言えないが結構、大味な評価をしている気がする
例えばイメージとしては人間でも判断が難しいところを
ang : 98%とsad : 0.2%など
不得意なパターンでは感情を取り違えてしまうとかはあるのかもしれない
もしあいまいな評価がかえってくる場合には
平常時と他の感情との比をとるなどの工夫がいるか
音声の感情表現を評価できることに期待

kale_corekale_core
from speechbrain.pretrained.interfaces import foreign_class

# Windows はサポートされていない
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(out_prob, score, index, text_lab, sep="\t")