知识准备
群
非空,上定义二元运算 :满足已下条件:
(1)封闭性 有
(2)结合律 有
(3)幺元有
(4)逆元使得
则称为群
若只满足条件(1)(2)则为半群
环
具有两个二元运算的非空集合,满足:
(1)是阿贝尔群
(2) 为半群
(3)有
语音处理常用的半环
WFST符号化表示
composition algorithm
:记录composition之后的状态集
:是一个队列,保存遇到的所有状态
代码1-2:初始化,都初始为的笛卡尔乘积
代码3-16:对队列中的状态进行遍历操作
代码4-5:从中取出一个状态对
代码6-8:判断这个状态对是不是初始状态,如果是,则更新composition之后的初始状态,更新初始状态的权重
代码9-11:判断是否是终止状态
代码12-16:遍历所有从出发的转移,如果这两条的转移满足的输出等于的输入,那么就可以合并
代码13-15:判断合并后的转移的终点状态是不是新的状态(不在里面),如果是新的状态则加入,并插入队列中
代码16:产生新的转移,加入composition之后的转移集合
determination
首先定义了一个weighted subset:
大概的意思是:
determination algorithm
代码1-3:将(初始状态,)对(即,带权状态)插入队列
代码5-6:从中取出一个带权状态集合
代码7-16:对中各个带权状态对应状态出发转移的所有输入进行操作
代码8:更新新的状态的权值,把中每一个状态对的权值与该状态对出发转移上的权值做,然后再进行
代码9:更新状态,是中的状态对应的所有转移
代码10:产生新的转移,加入集合
代码11:判断这个状态是不是新的状态
代码12:把加入新的状态集
代码13:判断这个状态对集合中的状态有没有终止态
代码14-15:将这个状态加入终止态集合中,并更新其权值
代码16:把状态插入队列中
WFST-determination例子演示
weight-pushing
主要分两步,第一步:计算potential值,第二步:更新权值,起始,终止状态的权值
计算potential:
计算potential
代码1-7:初始化V[q],如果是终止状态就赋值终止状态的权值,否则赋值
代码14:从终止状态开始往前,表示以为终点的转移(个人理解...)
代码15:比较当前状态到终点的最短路径与 哪个小(tropical semiring下),R表示从到终点的最短路径
代码18:如果是出现新的状态插入队列中
(不知道有啥用。。。没看懂,这个算法解读仅供参考吧)
第二步更新:
分别更新开始状态的权重,中间状态的弧的权重,结束状态的权重
WFST-weight-pushing 例子
minimization
最小化是建立在确定化和weight-pushing的前提下,把整个图再次精简,使状态数最小。
对一个WFST进行最小化操作分为两个步骤:
- 对WFST进行确定化操作(det),再进行Weight-Pushing操作。
- 使用经典的最小化算法对WFST进行最小化,常用的有Hopcroft算法。
参考资料:
1.WFST详解
2.WFST核心算法
3.Speech recognition with weighted finite-state transducers
网友评论