语音解码器核的操作是基于有限长的帧或者是utterances,每次处理一个utterance(一个utterance就是一个在Sphinx2 API函数uttproc_begin_utt和uttproc_end_utt之间处理的语音数据块,后面将会继续提到)。一个utterance可以达到一分钟。实际上,典型的大多数应用把一句话或者一个短语看作一个utterance,一句话和一个短语的时间通常比最大值60s要小的多。
基本识别:
Sphinix2的识别结构是跟当前使用的语言模型是N-字母型还是有限状态字母模型(但是,后面提到的API对两者来说是相同的)。
N-字母模型解码:
N-字母解码忠,每一个解码的utterance使用三个步骤,其中两个是可选的:
1、维特比词汇数搜索。它产生一个识别结果和一个“词格子”(word lattice)
2、根据上面产生的词个子进行一个可选的平整结构的维特比搜索。它产生一个新的识别结果和新的词格子,替换掉上面步骤的。
3、对词格子进行一个可选的全局最优路径搜索,又产生一个新的识别结果。
可选步骤通常只是为了提高识别的准确度。然而,第二个步骤(平坦结构的维特比搜索)可以显著提高反应时间。使用哪些步骤是在初始化阶段就配置好的,初始化之后,这几个步骤就对应用程序不可见了。它只接收上一个步骤的结果。然而,词格子由应用程序再进行搜索。
有限状态字母模型解码:
有限状态字母模型只有一个步骤,就是维特比搜索,而不像上面那样由几个可选步骤。
强制对齐和AllPhone识别模型
识别器可以根据输入语音和时间对齐教本进行时间对齐,为输入教本产生时间帧和显著的静态段。时间对齐只能再批模式下使用。后面将对它进行详细的介绍。
Sphinx2也可以用allphone模型来产生语音学识别而不是普通的单词结果。allphone识别API也能被用户编写的应用程序使用。不过,输入只能是预先录制好的文件。
注:识别引擎再初始化的时候配置为正常、强制对齐和allphone模式,不能在运行时进行切换。