4

pocketphinx を使用して、単純な音声からテキストへのマッピングを試みています (。文法は次のように非常に単純です。

public <grammar> = (Matt, Anna, Tom, Christine)+ (One | Two | Three | Four | Five | Six | Seven | Eight | Nine | Zero)+ ;

例えば:

Tom Anna Three Three

収量

Tom Anna 33

私は音響モデルを適応させ (私の外国語訛りを考慮に入れました)、その後、まともなパフォーマンス (~94% の精度) を得ることができました。約 3 分のトレーニング データセットを使用しました。今、私は同じことをしようとしていますが、マイクに向かってささやきます. 精度は、トレーニングなしで最大 50% に大幅に低下しました。アクセントのトレーニングで、私は〜60%を得ました. ノイズ除去や音量を上げるなど、他の考えを試しました。ドキュメント全体を読みましたが、パフォーマンスを向上させるためにどの方向に進むべきかをよりよく知ることができるように、誰かがいくつかの質問に答えることができるかどうか疑問に思っていました.

1) チュートリアルでは、hub4wsj_sc_8k 音響モデルを適応させています。「8k」はサンプリングパラメータだと思います。sphinx_fe を使用する場合は、「-samprate 16000」を使用します。16k サンプリング レートのデータを使用して 8k モデルをトレーニングするために意図的に使用されましたか? 8k サンプリングのデータが使用されていないのはなぜですか? パフォーマンスに影響はありますか?

2) sphinx 4.1 では (pokesphinx と比較して) WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar などの異なる音響モデルがあります。それらのモデルはポケットフィンクスで使用できますか? 16k サンプリングの音響モデルは、通常、16k サンプリング レートのデータでパフォーマンスが向上しますか?

3) トレーニングにデータを使用する場合、通常のスピーキング モード (私のアクセントのみに適応するため) またはささやきモード (ささやきと私のアクセントに適応するため) を使用する必要がありますか? 私は両方のシナリオを試してみましたが、結論を引き出すための違いに気付かなかったと思いますが、ポケットフィンクスの内部構造がわからないので、何か間違っている可能性があります。

4) 次のスクリプトを使用して、チュートリアルから適応トレーニングとテスト データを記録しました。

for i in `seq 1 20`; do 
       fn=`printf arctic_%04d $i`; 
       read sent; echo $sent; 
       rec -r 16000 -e signed-integer -b 16 -c 1 $fn.wav 2>/dev/null; 
done < arctic20.txt

Control-C を押すたびに、このキープレスが記録されたオーディオで異なり、エラーが発生することに気付きました。オーディオをトリミングすると、代わりに他のエラーを修正したり、発生させたりするのに役立つ場合があります。各録音には、話す前後に数秒の間隔を空ける必要がありますか?

5) 観測カウントを蓄積するときに、パフォーマンスを改善するためにいじることができる設定はありますか?

6) 半連続モデルと連続モデルの違いは何ですか? ポケットフィンクスは連続モデルを使用できますか?

7) sphinx4 の「mixture_weights」ファイルは、pokesphinx-extra で取得したものと比較してはるかに小さいことに気付きました。違いはありますか?

8) ホワイト ノイズを除去する別の組み合わせを試しました (「sox」ツールキットを使用、たとえば sox noise.wavfiltered.wav noisered profile.nfo 0.1)。最後のパラメータによっては、少し改善される場合もあれば (~3%)、悪化する場合もあります。ノイズを除去するのは良いことですか、それともポケットスフィンクスが行っていることですか? 私の環境では、音声がささやき声を録音したときに、より多くのインパックを持つことができると思われるホワイト ノイズしかありません。

9) 音量 (ゲイン) だけを上げても、ほとんどの場合、パフォーマンスが少し悪くなるだけであることに気付きました。避けるべきですか?

10) 全体として、さまざまな組み合わせを試してみましたが、ノイズのみを除去した場合に得られた最良の結果は ~65% であり、わずか (5%) の改善にとどまりました。以下にいくつかの統計を示します。

//ORIGNAL UNPROCESSED TESTING FILES
TOTAL Words: 111 Correct: 72 Errors: 43
TOTAL Percent correct = 64.86% Error = 38.74% Accuracy = 61.26%
TOTAL Insertions: 4 Deletions: 13 Substitutions: 26


//DENOISED + VOLUME UP
TOTAL Words: 111 Correct: 76 Errors: 42
TOTAL Percent correct = 68.47% Error = 37.84% Accuracy = 62.16%
TOTAL Insertions: 7 Deletions: 4 Substitutions: 31


//VOLUME UP
TOTAL Words: 111 Correct: 69 Errors: 47
TOTAL Percent correct = 62.16% Error = 42.34% Accuracy = 57.66%
TOTAL Insertions: 5 Deletions: 12 Substitutions: 30

//DENOISE, threshold 0.1
TOTAL Words: 111 Correct: 77 Errors: 41
TOTAL Percent correct = 69.37% Error = 36.94% Accuracy = 63.06%
TOTAL Insertions: 7 Deletions: 3 Substitutions: 31


//DENOISE, threshold 0.21
TOTAL Words: 111 Correct: 80 Errors: 38
TOTAL Percent correct = 72.07% Error = 34.23% Accuracy = 65.77%
TOTAL Insertions: 7 Deletions: 3 Substitutions: 28

私がデータをテストするためだけに行っていたこれらの処理。トレーニング データを同じ方法で処理する必要がありますか? やってみたと思いますが、ほとんど違いがありませんでした。

11) これらすべてのテストで、ARPA 言語モデルを使用しました。JGSFの結果を使用すると、通常ははるかに悪い結果になります(最新のポケットフィンクスブランチがあります)。何故ですか?

12) 各文の最大数は '999' で名前は 3 つまでであるため、JSGF を修正し、繰り返し記号 '+' を括弧内の内容を手動で繰り返すことで置き換えました。今回はARPAにかなり近づいた結果。正規表現のように繰り返しの最大数を伝える文法の方法はありますか?

13) ARPA モデルを使用する場合、すべての可能な組み合わせを使用して生成しました (辞書は固定されており、非常に小さいため: ~15 単語) が、テストしても、Tom Anna などの不正な結果が返されることがあります (必要な数はありません)。ARPA モデルを使用して何らかの構造を強制する方法はありますか?

14) 辞書はこれらの ~15 語のみに制限する必要がありますか、それとも完全な辞書は速度にのみ影響し、パフォーマンスには影響しませんか?

15) ささやき声の認識を改善するには、辞書 (音素) を変更する必要がありますか? (私は専門家ではありませんが、私たちがささやくとき、いくつかの言葉が違うように聞こえるかもしれませんか?)

16) 精度を向上させるためのその他のヒントは本当に役に立ちます!

4

1 に答える 1