如果大家使用搜狗输入法的语音识别可能会发现在我们说我一句话之后,语音识别会返给你多个结果,这些结果之间只有微小差异(很多时候是发音相同的替代词)。绝大多数时候,输入法给出的结果就是我们需要的,但是偶尔也会出现候选结果中的才是我们需要的。你可能会好奇这些候选结果是如何产生的,在本文中我就给大家简单介绍一下。

one best

最初的语音识别结果只有一个,也被称为one best,即一个最优结果。语音识别解码器通过声学模型和语言模型对用户输入的语音进行打分,输出一个得分最高的结果。其基本公式为: 


P=argmaxWN1∈WP(WN1|X)



其中,

X=x1,x2,⋯,xT 表示输入的观察向量时间序列, WN1=w1,w2,⋯,wN 表示词典中词组成的词串。上述公式的含义就是:给定一段语音特征序列,输出可能性最大的词串组合,所以语音识别是一个带有回溯的最优化搜索问题。 


根据Bayesian公式,条件概率可以变为: 



P(WN1|X)=P(X|WN1)P(WN1)P(X)



由于P(X)与求解无关,上面公式可以变为: 



P=argmaxWN1∈WP(X|WN1)P(WN1)



上述公式分为三部分,arg max其实就是解码器,

P(X|WN1) 是声学模型, P(WN1) 是语言模型。解码器是语音识别的核心,它调用声学模型和语言模型,采用维特比算法获得最优的词序列。one best即是通过回溯最优得分得到的最优路径。

lattice

在实际的语音识别系统中,最优路径不一定与实际字序列匹配,我们一般希望能够得到得分最靠前的多条候选路径,即N-best。为了紧凑地保存候选路径,防止占用过多内存空间,我们一般采用lattice(又叫词图)来保存识别的候选序列。lattice本质上是一个有向无环(directed acyclic graph)图。图上的每个节点代表一个词的结束时间点,每条边代表一个可能的词,以及该词发生的声学得分和语言模型得分。 

voicestaion300 与team连接 voice network type_语音识别


在生成one best结果时,只需要从最优结果处回溯,但是为了生成lattice,我们需要保留更多信息。具体就是在生成每一个hist的时候保留多个候选alt,这样在回溯best hist的时候也访问alt来生成lattice。可以认为原始hist是有效信息在节点上的lattice,而上图中的lattice有效信息都在边上。 

在lattice上从左向右的任何一条路径,就构成一个识别结果,路径上每条边的声学得分相加,再加上路径对应的语言得分,就是整条路径的得分,通常取得分最大的前 N 条路径对应的词串作为识别的 N-Best 结果输出。上面lattice的生成用的语言模型往往不够精确,通常还需要在lattice上用更大的语言模型进rescore。

lattice剪枝

原始lattice可能会非常庞大,上图给出的只是一个很小的lattice,这时我们可以对lattice进行剪枝但是不影响最终的准确率。一种剪枝方法是对lattice进行前后向打分,计算每条边的后验概率,然后删除后验概率很低的边。对上图进行剪枝后获得下图: 

voicestaion300 与team连接 voice network type_语音识别_02


相比原图,上面的lattice简化了不少,但是最重要的信息并没有丢失。通过计算后验概率,我们还可以很容易地知道每条边在整个lattice中的重要性。

confusion network

混淆网络是一种特殊的lattice,由原始lattice经过变换生成。它要求lattice中的每条路径都必须经过所有的节点。如下图所示: 

voicestaion300 与team连接 voice network type_语言模型_03


简单描述一个近似于srilm中采用的混淆网络生成算法:首先进行前后向概率打分计算每条边的后验概率;其次根据后验概率对lattice进行剪枝;再次从原始lattice中选择一条得分最高的路径当作初始混淆网络(路径中的节点即为混淆网络中的节点);最后就开始逐步将其他的边对齐添加到上述初始混淆网络中。特别地,如果在添加某条边到某节点中时发现已经有边指向该边并且也添加到该节点之后,则创建一个新的节点,让之前的边都指向新节点,要添加的边则从新节点指向之前的老节点。 

相比于lattice,我们可以很容易从混淆网络中获取one best结果,只需要从每一段中选择后验概率最大的边即可。混淆网络作为lattice的简化版,会引入原始lattice中不存在的路径。但是通常情况下,用混淆网络获取的one best结果要好于原始的one best。混淆网络还有一个好处,我们可以很容易获取每个时刻相互竞争的词有哪些,怀疑苹果自带的输入法即采用了混淆网络来修改候选词。