CMUSpinx - 创建语言模型

CMUSpinx - 创建语言模型

  • 语言模型
    • 关键词列表

语言模型

语言模型是语音识别中最重要的组件之一,它告诉解码器应该去识别哪些单词序列。语言模型有这么几种,一种是关键词列表,第二种是语法和统计语言模型,第三种是音节语言模型,功能和性能均有所差别。

关键词列表

Pocketsphinx支持关键词列表语言模型,这种模式支持用户给出一系列的关键词用作查询。这种模式的优点在于:你可以为每一个关键词指定一个阈值,阈值的大小与关键词的长度有关,关键词越长,阈值越大,从而便于在连续的语音中检测出关键词。除了关键词列表模型外,其他两种模型都是试图检测语法中的单词,即使你使用的单词并不在语法当中。一个典型的关键词列表如下:

oh mighty computer /1e-40/
hello world /1e-30/
other phrase /1e-20/

每一个关键词词组必须指定阈值,短的关键词,可以用短的阈值例如1e-1,长的关键词的阈值要大一点,最大不超过1e-50。如果一个关键词非常长,超过10个音节,在这种情况下,建议将该关键词分割成短的词组,分别用来识别。在语言模型中,我们需要基于以下两个因素调节阈值的大小:

  • 识别错误率;
  • 识别遗漏;
    最佳方式是用一段已经录制好的音频文,具体步骤如下:
  1. 找一段长的录音,这段录音包含你想要的关键词和其他一些声音。比如,你可以着一段电影原声,这段音频的时间大约1小时;
  2. 基于这个文件,运行以下命令来进行一个关键词识别,每次运行用不同的关键词阈值:
pocketsphinx_continuous -infile  -keyphrase  -kws_threshold  -time yes

这个命令会打印出许多log,其中一部分是检测到的关键词及其时间和可信度,你可以通过-logfn your_file.log选项来关闭多余的log输出。

  1. 从关键词检测的结果中查看有多少错误的检测以及遗漏的检测;
  2. 最终选择错误率最低的阈值来作为该关键词的阈值;

一般情况下,每个关键词具有3-4个音节可以达到比较好的准确率,太短的关键词容易产生混淆。只有PocketSphinx支持关键词列表,而Sphinx4并不支持。

下面我来实际操作一下,首先你需要准备一个音频文件,那么音频文件从哪里来呢?大家都会看电影对吧,你可以使用ffmpeg从电影文件中提取音频文件,运行命令如下:

ffmpeg -i input.rmvb -f wav -ar 16000 output.wav

然后呢,运行上面的命令遇到以下问题:

  1. 未指定hmm (声学模型);
  2. 未指定字典;
  3. 输入音频文件是双声道,需要转换为单声道。

首先,运行

ffmpeg.exe -i audio.wav -ac 1 mono.wav

将双声道转换为单声道,运行命令:

D:\sphinx\pocketsphinx>bin\Release\Win32\pocketsphinx_continuous.exe -infile d:\tools\ffmpeg\mono.wav -keyphrase "good choice" -kws_threshold 1e-20 -time yes -hmm model\en-us\en-us -dict model\en-us\cmudict-en-us.dict

log显示如下:
CMUSpinx - 创建语言模型_第1张图片

关闭log的显示,
在这里插入图片描述
CMUSpinx - 创建语言模型_第2张图片
如果把阈值设置为1e-30,结果如下:
CMUSpinx - 创建语言模型_第3张图片
如果设置为1e-15,那么结果如下:
CMUSpinx - 创建语言模型_第4张图片

你可能感兴趣的:(语音识别)