Closed8

PyTorchを使った話者識別のための推論モデルの性能を評価するコードを作成する

ihsinokyihsinoky

評価に使うデータはTalkBankにあったライセンス的に制限のなさそうな以下を使うことにした。

4名での会話動画、2名での会話音声のデータで、.chaファイルが付随している。
この.chaファイルにはどの区間誰が喋っているのかというデータが記録されているため、Pythonでパースして正解ラベルを作成するつもり

ihsinokyihsinoky
*G3M:    nan tte yutt(e) otta ? 37791_38953

こんな感じのレコードが存在してて、37.791sec - 38.953secの区間は人物:G3Mがしゃべっているということになる。(発話内容が「nan tte yutt(e) otta ?」)

今回は発話内容は使わず、音声スペクトラムを使った識別モデルを構築するので、人物IDと発話区間のデータを収集する。

ihsinokyihsinoky

この.chaファイルをパースするソフトがTalkBankで配布されていたが、使い方がよくわからず、今回使いたい用途だとPythonでパースした方が早いという結論づけた

CLANというソフト。↓↓
https://talkbank.org/software/

使い方解説してくれてるページもあったが、用途に合わず
http://sugiura-ken.org/wiki/wiki.cgi/exp?page=CLAN

単語の出現頻度とか集計するなら簡単にできそうだった

ihsinokyihsinoky

性能評価は認証性能で使われてる

  • 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で評価したいが。

ihsinokyihsinoky

性能評価は認証性能で使われてる

  • 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で評価したいが。

ihsinokyihsinoky

DERの考え方として、話者分離(識別)では以下のフローで識別を行う

今回実装している話者識別については、3秒区切りで判定するという処理の関係上、端数となる区間は除去している。つまり、最初のVoice Activity Detectionで失敗していることになる。
このことはDERのdetection missedとしてカウントされて反映される。

ほしいのは判定した区間において、その判定の正/偽だけなので、DERの中でもconfusion(つまり誤った識別)の部分だけを使用することにする

ihsinokyihsinoky

評価コードの実装ができたので、このスクラップはClose

このスクラップは2023/03/05にクローズされました