窃窃私语时语音识别简单

时间:2012-07-30 14:03:01

标签: voice-recognition cmusphinx

我正在尝试使用pocketsphinx进行简单的语音到文本映射(。语法非常简单,例如:

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

e.g:

Tom Anna Three Three

产量

Tom Anna 33

我改编了声学模型(考虑到我的外国口音),之后我获得了不错的表现(准确度达到了94%)。我使用了约3分钟的训练数据集。 现在我正试着做同样的事情,但是对麦克风说悄悄话。无需培训,准确率大幅下降至约50%。通过口音训练 我得到了~60%。我试过其他想法,包括去噪和提高音量。我阅读了整个文档,但想知道是否有人能回答一些问题,所以我可以 更好地了解我应该在哪个方向上提高绩效。

1)在教程中你正在调整hub4wsj_sc_8k acustic模型。我猜“8k”是一个采样参数。使用sphinx_fe时,请使用“-samprate 16000”。是否故意使用16k采样率的数据训练8k模型?为什么没有使用8k采样数据?它对性能有影响吗?

2)在sphinx 4.1中(与pocketsphinx相比),存​​在不同的声学模型,例如WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar。这些模型可以与pocketsphinx一起使用吗?具有16k采样的acustic模型通常具有更好的性能,数据具有16k采样率?

3)当使用数据进行训练时,我应该使用正常说话模式(仅适应我的口音)或低语模式(以适应耳语和我的口音)?我想我尝试了两种情况并没有注意到任何结论,但我不知道pocketphinx内部因此我可能做错了。

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时,这个按键在录制的音频中都是不同的,导致错误。修剪音频somtimes有助于纠正或导致 而是其他错误。有没有要求每个录音在讲话之前和之后都有几秒钟?

5)当累积观察计数时,我是否可以修改任何设置以提高性能?

6)半连续模型和连续模型有什么区别? pocketphinx可以使用连续模型吗?

7)我注意到sphinx4的'mixture_weights'文件比你在pocketsphinx-extra中得到的文件要小得多。这有什么不同吗?

8)我尝试了去除白噪声的不同组合(使用'sox'工具包,例如sox noisy.wav filtered.wav noisered profile.nfo 0.1)。取决于最后一个参数 有时它会有所改善(约3%),有时甚至更糟。消除噪音是好事还是pocketphinx做的事情?我的环境很好 是否只有白噪声,我猜在音频录音的时候会有更多的声音。

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结果时通常情况更糟(我有最新的pocketsphinx分支)。那是为什么?

12)因为每个句子的最大数字是'999'且不超过3个名字,我修改了JSGF并通过手动重复括号中的内容来替换重复符号'+'。这次结果更接近ARPA。语法中是否有任何方法可以告诉正则表达式中的最大重复次数?

13)当使用ARPA模型时,我通过使用所有可能的组合生成它(因为字典是固定的并且非常小:约15个字)但是然后测试我仍然接收到非法的结果,例如汤姆安娜(没有任何必要的号码)。有没有办法使用ARPA模型强制执行某些结构?

14)字典是否应仅限于那些~15个单词或者只是完整字典只会影响速度而不影响性能?

15)修改字典(音素)是否可以在窃窃私语时提高识别率? (我不是专家,但是当我们低声说我猜一些话可能听起来不一样?)

16)任何其他提示如何提高准确性将非常有帮助!

1 个答案:

答案 0 :(得分:0)

关于窃窃私语:当你这样做时,声波没有有意义的非周期性部分(由于你的声带正常共振而产生的振动,而不是在低语时)。您可以通过将手指放在喉咙上同时大声说“aaaaaa”,然后只是低声说话来试试这个。

AFAIR声学建模非常依赖于采用声音的频谱来检测峰值(共振峰)并将它们与手机(如元音)联系起来。

受过教育的猜测:当窃窃私语时,光谱主要是白噪声,由口腔位置(舌头,嘴巴张开等)略微塑造,这对人类来说已经足够了,但远远不足以使偷看区别于计算机。