4

我正在尝试使用pocketsphinx(。语法非常简单,例如:

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 中(与 pocketsphinx 相比)有不同的声学模型,例如 WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar。这些模型可以与pocketsphinx一起使用吗?具有 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)半连续和连续模型有什么区别?pocketsphinx 可以使用连续模型吗?

7) 我注意到 sphinx4 中的“mixture_weights”文件与您在 pocketsphinx-extra 中获得的文件相比要小得多。它有什么不同吗?

8)我尝试了不同的去除白噪声的组合(使用'sox'工具包,例如sox noise.wav filtered.wav noisered profile.nfo 0.1)。根据最后一个参数,有时它会有所改善(~3%),有时会变得更糟。消除噪音是好事还是pocketsphinx也这样做?我的环境很安静,只有白噪声,我猜当音频录制耳语时可以有更多的声音。

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 个单词),但随后测试我仍然有时会收到非法结果,例如 Tom Anna(没有任何必需的数字)。有没有办法使用 ARPA 模型来强制执行某些结构?

14) 字典是否应该仅限于大约 15 个单词,或者只是完整的字典只会影响速度而不影响性能?

15) 修改字典(音素)是提高耳语识别率的方法吗?(我不是专家,但当我们耳语时,我猜有些词可能听起来不同?)

16) 任何其他提高准确性的技巧都会非常有帮助!

4

1 回答 1

0

关于耳语:当你这样做时,声波没有有意义的非周期性部分(由声带正常共振产生的振动,但在耳语时没有)。您可以尝试将手指放在喉咙上,同时大声说出“aaaaaa”,然后轻声说。

AFAIR 声学建模在很大程度上依赖于获取声音的频谱来检测峰值(共振峰)并将它们与音素(如元音)相关联。

有根据的猜测:当耳语时,频谱主要是白噪声,略微受口腔位置(舌头、嘴巴张开等)的影响,这对人类来说已经足够了,但远远不足以让计算机可以区分偷看。

于 2016-04-18T12:33:23.123 回答