Open3
音声の感情表現を定量的に評価する方法を調べる
Wav2Vec 2.0の音声感情認識を試す
訓練済みモデルを使って感情の予測を行うサンプルコードがある(Prediction)
本家はクローンしての使用することを想定している
今回はpipでインストールできるようになっているフォークを使った
pip install git+https://github.com/VonSquiggles/soxan.git
Hugging Faceの海を探し、以下のモデルにたどり着いた
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%など
不得意なパターンでは感情を取り違えてしまうとかはあるのかもしれない
もしあいまいな評価がかえってくる場合には
平常時と他の感情との比をとるなどの工夫がいるか
音声の感情表現を評価できることに期待
以下の記事で試されているspeechbrainも使えそう
こちらもWav2Vec 2.0をベースとしている
日本語でどれだけの精度かが気がかりなところ
少し試してみようとしたらエラー
Windowsはサポートしていないそう
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")