语音识别工具Sphinx4
开源框架:https://cmusphinx.github.io/wiki/download/
1、CMU Sphinx开源语音识别框架
Sphinx4主要由三个基本模块构成:FrontEnd,Decoder,Linguist。
FrontEnd接受信号的输入并且转化为特征序列。Linguist把任何类型的标准语言模型,字典的发音信息以及一些声学模型的结构信息转换为一个SearchGraph。在Decoder 中的SearchManager负责用FrontEnd产生的特征以及Linguist生成的SearchGraph进行实际的decoding工作,产生结果。
Linguist
Linguist是由三个可插拔的组件构成:LanguageModel,Dictionary,AcousticModel。
1)LanguageModel提供了单词上得语言结构。主要有2种典型的实现:graph-driven grammars和stochastic N-Grammodels。graph-driven grammars代表一个有向图,图的节点代表一个单词,链接代表发生单词转换的概率。stochastic N-Gram models提供了在给定前n-1个单词时,该单词发生的概率。
2)Dictionary提供单词的发音。这些发音把单词分成一个AcousticModel里面unit的序列。
3)AcousticModel提供了语音单元与一个HMM模型的映射关系。HMM是一个有向图,节点代表一个HMM状态,链接代表一个状态转移概率。每一个HMM状态都可以对一个特征得分(实际的实现在HMMState类里面)。Sphinx4现在提供一个单独的AcousticModel实现,能够载入并使用Sphinx3 trainer生成的模型。
4)SearchGraph是由LanguageModel所代表的语言结构以及AcousticModel的拓扑结构(基本发声单元的HMMs)。Linguist也会使用词典(Dictionary)把LanguageModel的单词映射成AcousticModel元素的序列。
SearchGraph是一个有向图,每一个节点叫做SearchState,可以分为emitting或non-emitting状态。Emitting状态能够对语音特征进行打分;而non-emitting状态仅仅代表了高层的语言结构,例如单词,音素,这些不能够直接对语音特征进行打分。链接代表了状态间的转移概率。
原文链接:https://blog.csdn.net/RFC2008/article/details/7057902
2、部署Sphinx4构建语音识别服务
下载源码:https://sourceforge.net/projects/cmusphinx/files/sphinx4/5prealpha/
使用源码原因:再识别中文音频时,出现数组越界问题,需要修改源码完成测试,修改数组长度:100 --> 1024
3、使用cmuclmtk语言模型制作工具
- 准备将用于生成语言模型的参考文本。结果应该是由句子的开始和结束标记限定的句子集:<s>和</s>。文本内容如下面例子:
<s> 小蝌蚪 </s>
<s> 找 </s>
<s> 妈妈 </s>- 生成词汇文件
text2wfreq < kd.txt > kd.wfreq
wfreq2vocab < kd.wfreq > kd.vocab- 使用以下命令生成语言模型:
text2idngram -vocab kd.vocab -idngram kd.idngram < kd.txt
idngram2lm -idngram kd.idngram -vocab kd.vocab -arpa kd.lm- 生成CMU二进制形式(BIN):
sphinx_lm_convert.exe -i zh_cn.lm -o zh_cn.lm.bin
sphinx_lm_convert.exe -i zh_cn.lm.bin -ifmt bin -o zh_cn.lm -ofmt arpa