走进语音识别中的WFST(四)

前一章说了WFST的determinzation这个算法,本章继续说说WFST中的优化操作,包括权重推移(weight pushing)和最小化操作(minimization)。

权重推移我们可以这么理解,我们有一双硕大的双手,然后对着WFST的尾巴一用力一推,然后权重就像波浪一样沿着各个路径被推向了前方,自行脑补~

效果图如下所示:
走进语音识别中的WFST(四)_第1张图片
(注意tropical半环和log半环不太一样)

在很多序列识别的问题中我们都是通过找到最小的cost来解决问题的,那么在WFST中我们同样就是通过找到最大或者最小的权重路径来解决问题的。
而pushing后权重都集中在前面可以降低整体的搜索时间因为我们会一步步的把我们不需要的路径排除掉,这样一开始就可以排除掉了很多种可能路径。

一般的权重推移算法包括两个步骤:
1 给每个状态计算一个potential,计算方式如下:
这里写图片描述
2 很据上面计算的potential和实际权重差值来修改转移路径上的权重值。

两步的伪代码如下所示(比较简单就不详细说了):
走进语音识别中的WFST(四)_第2张图片
走进语音识别中的WFST(四)_第3张图片

而minimization算法是在weight pushing之后再采用一个经典的最小化算法(比较著名的是Hopcroft算法,Revuz算法等,计算复杂度不同)就可以了伪代码如下所示:
走进语音识别中的WFST(四)_第4张图片

minimization可以让WFST中的状态数最少,效果图如下所示:
走进语音识别中的WFST(四)_第5张图片
左图是对上一章讲的确定化操作后进行了权重推移后的结果,可以看出权重推移后状态3和状态4到状态5的转移路径完全相同,所以可以把它们融合为一个状态(权重推移前是不等价的,故可以看出权重推移的必要性),右图是minimization后的结果。

ps:在youtube上发现了一个不错的讲解视频:
https://www.youtube.com/playlist?list=PLxbPHSSMPBeicXAHVfyFvGfCywRCq39Mp

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