PyTorchを使った話者識別のための推論モデルの性能を評価するコードを作成する
評価に使うデータはTalkBankにあったライセンス的に制限のなさそうな以下を使うことにした。
4名での会話動画、2名での会話音声のデータで、.chaファイルが付随している。
この.chaファイルにはどの区間誰が喋っているのかというデータが記録されているため、Pythonでパースして正解ラベルを作成するつもり
*G3M: nan tte yutt(e) otta ? 37791_38953
こんな感じのレコードが存在してて、37.791sec - 38.953secの区間は人物:G3Mがしゃべっているということになる。(発話内容が「nan tte yutt(e) otta ?」)
今回は発話内容は使わず、音声スペクトラムを使った識別モデルを構築するので、人物IDと発話区間のデータを収集する。
この.chaファイルをパースするソフトがTalkBankで配布されていたが、使い方がよくわからず、今回使いたい用途だとPythonでパースした方が早いという結論づけた
CLANというソフト。↓↓
使い方解説してくれてるページもあったが、用途に合わず
単語の出現頻度とか集計するなら簡単にできそうだった
性能評価は認証性能で使われてる
- False Reject Rate
- False Accept Rate
を使う予定。
- 方法1: テスト用の入力データは話者単独で発話している区間だけとし、そのFRA, FARを算出する
- 方法2: テスト用の入力データに話者が混在する発話も採用し、
- (1) 混在している場合(A,B)は、AもしくはBと識別すればPass、他の人と識別すればFalseとする
- (2)-1 混在している場合(A,B) は、既存の誰かに識別されればFail、既存の誰でもないと識別されればPass
- (2)-2 混在している場合(A,B) は、既存の誰かに識別されればFail (Pass判定はしない)
学術的にはどの評価方法が適切なのだろうか?
方法1かな?
実世界的には方法2 (2)-1で評価したいが。
性能評価は認証性能で使われてる
- False Reject Rate
- False Accept Rate
を使う予定。
- 方法1: テスト用の入力データは話者単独で発話している区間だけとし、そのFRA, FARを算出する
- 方法2: テスト用の入力データに話者が混在する発話も採用し、
- (1) 混在している場合(A,B)は、AもしくはBと識別すればTrue、他の人と識別すればFalseとする
- (2)-1 混在している場合(A,B) は、既存の誰かに識別されればFail、既存の誰でもないと識別されればTrue
- (2)-2 混在している場合(A,B) は、既存の誰かに識別されればFail (True判定はしない)
学術的にはどの評価方法が適切なのだろうか?
方法1かな?
実世界的には方法2 (2)-1で評価したいが。
学術的な評価方法および評価フレームワークについては、以下が提供してくれていた
Diarazation Error Rate (DER)で評価するのが一般的なようである
DERの考え方として、話者分離(識別)では以下のフローで識別を行う
今回実装している話者識別については、3秒区切りで判定するという処理の関係上、端数となる区間は除去している。つまり、最初のVoice Activity Detectionで失敗していることになる。
このことはDERのdetection missedとしてカウントされて反映される。
ほしいのは判定した区間において、その判定の正/偽だけなので、DERの中でもconfusion(つまり誤った識別)の部分だけを使用することにする
評価コードの実装ができたので、このスクラップはClose