ichou1のブログ

主に音声認識、時々、データ分析のことを書く

音声認識メモ(DeepSpeech)その6

前回の続き。

プリエンファシスは必要か?

ジェット機」という音声のスペクトログラム。
左が「pre-emphasis なし」、右が「pre-emphasis あり」

f:id:ichou1:20200813074451p:plainf:id:ichou1:20200813074501p:plain

レーニング時の学習セット(ATR503)

f:id:ichou1:20200810104733p:plainf:id:ichou1:20200810104743p:plain

コーパス(その1)

f:id:ichou1:20200810104843p:plainf:id:ichou1:20200810104852p:plain

最初の「ジェット機」に関しては、プリエンファシスで特徴量が変わってしまっているように見える。
(高い周波数帯での反応はノイズだろうか)

他の2つは、プリエンファシスで期待どおりに高周波数が強調されている(1000Hzより低い周波数の反応が弱くなっている)


プリエンファシスなしのモデルだと?

「プリエンファシスなし」でモデルをトレーニングしてみる。
lossが「0.01」を切るまでモデルをトレーニング。

認識結果

テストデータ1

ちいさなうなぎやに、ねっきのようなものがみなぎる。

['sil', 'sil', 'sil', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'ch', 'ch', 'ch', '_', '_', '_', '_', '_', 'i', 'i', 'i', 'i', 'i', 'i', 'i', 'i', 'i', '_', '_', '_', 's', 's', 's', 's', '_', '_', '_', '_', '_', '_', '_', 'a', 'a', 'a', '_', '_', '_', '_', 'n', 'n', 'n', '_', '_', '_', 'a', 'a', 'a', 'a', '_', '_', 'u', 'u', 'u', '_', '_', '_', '_', '_', '_', '_', 'n', 'n', 'n', '_', '_', 'a', 'a', 'a', 'a', '_', '_', '_', '_', '_', '_', '_', '_', 'g', 'g', 'g', 'i', 'i', '_', '_', '_', '_', '_', 'e', '_', '_', '_', '_', 'a', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'n', 'n', 'i', 'i', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'pau', 'pau', 'pau', 'pau', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'n', 'e', 'e', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'Q', 'Q', '_', '_', '_', '_', '_', 'k', 'k', '_', '_', 'i', 'i', '_', '_', '_', '_', '_', '_', 'n', 'n', 'n', 'o', '_', '_', '_', '_', '_', '_', '_', 'y', 'y', 'y', 'y', 'o', 'o', 'o', '_', '_', '_', '_', 'o', 'o', '_', '_', '_', '_', '_', '_', '_', 'n', 'n', '_', '_', '_', 'a', 'a', '_', '_', '_', 'm', 'm', 'm', 'o', 'o', '_', '_', '_', '_', '_', '_', '_', '_', 'n', 'n', 'o', 'o', '_', '_', '_', '_', '_', 'g', 'g', '_', '_', '_', '_', '_', 'a', 'a', '_', '_', '_', '_', '_', '_', '_', 'm', 'm', 'i', 'i', 'i', '_', '_', '_', '_', 'n', 'n', '_', '_', '_', '_', 'a', 'a', 'a', '_', '_', '_', '_', '_', '_', '_', '_', 'g', 'i', 'i', 'i', '_', '_', '_', '_', '_', '_', '_', '_', 'r', 'r', 'u', 'u', 'u', 'u', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'sil',

"うなぎやに"のところで、'y'の音素が'e'になってしまっている。
(「プリエンファシスあり」と同じ結果)

テストデータ2

どろぼうでもはいったかと、いっしゅんぼくはおもった。

['sil', 'sil', 'sil', 'sil', '_', '_', '_', '_', 't', 'o', 'o', 'o', 'o', '_', '_', '_', '_', 'r', 'r', 'r', 'o', 'o', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'b', 'o', 'o', 'o', '_', '_', '_', '_', 'o', 'o', 'o', 'o', '_', '_', '_', '_', '_', '_', '_', '_', 'd', 'e', 'e', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'm', 'm', 'm', '_', '_', '_', '_', '_', '_', '_', 'h', 'h', 'h', 'h', 'h', '_', '_', '_', 'a', 'a', 'a', '_', 'i', 'i', 'i', 'i', '_', '_', '_', '_', 'Q', 'Q', 'Q', '_', '_', '_', '_', '_', '_', 't', 't', '_', '_', 'a', 'a', '_', '_', '_', '_', 'k', 'k', 'k', 'k', '_', '_', '_', 'a', 'a', 'a', '_', '_', '_', '_', '_', '_', '_', 't', 't', 'o', 'o', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'pau', 'pau', 'pau', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'i', 'i', 'i', 'i', 'i', '_', '_', '_', '_', 'Q', 'Q', 'sh', 'sh', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'u', 'u', '_', '_', '_', 'N', 'N', 'N', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'b', 'o', 'o', 'o', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'k', 'k', 'k', 'u', 'u', '_', '_', '_', '_', '_', '_', 'w', 'w', '_', 'a', 'a', 'a', 'a', 'a', 'a', 'o', '_', '_', '_', '_', 'o', 'o', 'o', '_', '_', '_', '_', '_', '_', '_', 'm', 'm', 'o', 'o', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'Q', 'Q', 'Q', '_', '_', '_', '_', '_', '_', '_', '_', 't', 't', '_', '_', '_', 'a', 'a', 'a', 'a', 'a', 'a', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'sil', ..., 'sil']

"どろぼうでも"のところで、'd'の音素が't'になっている。
また、'm'-'o'となってほしいところで、'o'が欠落している。
(「プリエンファシスあり」と同じ結果)

「プリエンファシスなし」でもモデルは成立することを確認。

音声合成からのアプローチ

「World」を使って音声の特徴を推定し、補正してみる。
スペクトログラムを眺めていて、「低い音」に補正した方が認識しやすくなると予想。

「F0 scaling」と「Formant shift」のパラメータを変えていくつか試したところ、予想に反して、「高い音」に補正した音声に対する認識結果が一番、好ましかった。

['sil', 'sil', 'sil', 'sil', 'sil', 'sil', 'sil', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'sh', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'I', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 't', 't', 'k', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'I', 'I', 'I', 'I', 'I', 'I', 'I', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', 'sil', ..., 'sil']

この時のパラメータは以下のとおり。

  • F0 scaling: 2.0
  • Formant shift: 1.2


音声合成後のスペクトログラムをプロット。
左がオリジナル。右が音声合成後。

f:id:ichou1:20200816104355p:plainf:id:ichou1:20200816102645p:plain
f:id:ichou1:20200816104355p:plainf:id:ichou1:20200816102636p:plain