加权有限状态机在语音识别中的应用

WFST在语音识别中的应用,要从Mohri的《Weighted Finite-State Transducers in Speech Recognition》这篇论文开始说起。首先看下面简单的WFST图,它是一个有向图,状态转移弧上有输入符号、输出符号以及对应的权重值。下图中的输入符号和输出符号相同,当然在多数情况下它们是不相同的,在语音识别中,输入可能是发声的声韵母,输出是一个个汉字或词语。

WFST的基本操作

WFST是基于半环代数理论的,详细的半环理论可以看上面Mohri的论文或者找其它资料学习。简单的一个半环代数结构定义为

,它包含元素集合K,两个基本操作和两个基本单元。半环必须满足以下定理:

在语音识别中经常使用的有Log半环和热带半环:

⊕log is defined by: x ⊕log y = −log(e−x + e−y).

合并操作

合并操作用于将两个WFST合并成,合并可以用于存在多个WFST时,将它们合并到一个WFST,用于语音识别中。如下,将A和B

组合操作

组合操作用于合并不同层次的WFST,用于将前一个WFST的输出符号同后一个WFST的输入符号做合并,生成由前一个WFST的输入符号到后一个WFST输出符号的状态机。假设WFST A中有一条转移弧,输入x,输出y,权重是a;WFST B中有一条转移弧,输入是y,输出是z,权重是b,那么A和B的组合后,就会生成一条输入是x,输出是z,权重为ab。下图为对a和b做组合操作

确定化操作

确定化操作用于去除WFST的冗余,对于WFST的每一个状态,它的每一个状态对于同一个输入符号,只有一个转移弧。确定化的加权有限状态器的优势在于它的非冗余性,对于确定化的加权有限状态器,一个给定的输入符号序列最多只有一条路径与其对应,这样可以降低搜索算法的时间和空间复杂度。下图为对a做确定化操作,得到b

权重推移

权重前推操作将转移弧的权重都向加权有限状态器的初始状态推移,这样在采用搜索算法去找到最大或者最小路径时,可以在早期就丢弃一些不可能的路径。下图为对a做权重前推操作,得到b

WFST在语音识别中的应用

在语音识别中,隐马尔可夫模型(HMM)、发音词典(lexicon)、n-gram语言模型都可以通过WFST来表示。对于语音识别,其目标函数是:

其中p(O|W)为声学模型,p(W)为语言模型。将上述公式贝叶斯展开:

其中V是音素序列,P(V|W)表示单词W的发音概率。另外,P(O|V,W)的概率只与V有关,P(O|V,W) = P(O|V)

在语音识别中,通常会对概率取log运算,所以上式等同于下面:

基于上述公式,可以将语音识别分成三个部分,如下:

表达式

知识源

权重意义

WFST表示

-logP(W)

语言模型

wG(W→W)

G

-logP(V/W)

发音词典模型

wL(V→W)

L

-logP(O/V)

声学模型

wH(O→V)

H

采用知识源的方式替换上述的公式,得到:

一个完整的语言识别加权有限状态转换器可以表达为:

。在引入音素窗后,上式在H后增加音素窗的变化

通常N的组成由后往前进行,先进行LG的组合,再进行CLG的组合,最后进行HCLG的组合,即N = Min(H C Min(Det(L * G)))。

语言模型G

在语音识别中,语言模型用n-gram模型表示,常用的有bigram、trigram。n-gram模型与一个(n-1)阶马尔可夫链相似,所以可以用WFSA来表示。如下是一个简单的语言模型”start it”和“stop it”转成WFSA的示例:

发音词典模型L

发音词典模型表示一个单词有哪些音素序列串构成。当用WFST来表示L模型时,输入是音素串,到达终止状态时,输出一个相对应的单词。

上下文相关音子模型C

上下文相关音子模型用于将三音子序列转换为音素序列,这通常很容易构造,只需要输入三音子串,输出其central音素即可。

声学模型H

声学模型用HMM来进行建模,对于输入的MFCC特征,通过GMM或者DNN计算出当前帧对应的HMM发射态的概率。

将上述的HCLG通过组合以及相关的操作后,得到一个完整的解码图,配合GMM或者DNN模型去计算每一帧对应HMM状态的概率,采用Viterb或者beam-search算法,可以得到完整语音对应权重最小的文本,即为最后的解码结果。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

李炼的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能

Net类的设计和神经网络的初始化

? NVIDIA 深度学习学院 带你快速进入火热的DL领域 正文共4898个字,2张图,预计阅读时间28分钟。 闲言少叙,直接开始 既然是要用C++来实现,那...

1706
来自专栏人工智能LeadAI

C++实现神经网络之一 | Net类的设计和神经网络的初始化

闲言少叙,直接开始 既然是要用C++来实现,那么我们自然而然的想到设计一个神经网络类来表示神经网络,这里我称之为Net类。由于这个类名太过普遍,很有可能跟其他人...

2985
来自专栏Flutter入门

Android OpenGL ES(四)-为平面图添加滤镜

之前我们通过YUV数据格式的处理知道,只要保留Y的数据,就是灰度的图片。但是OpenGL中处理的是RGB格式的数据,我们要如何去取得灰度图呢? 我们可以通过公...

1593
来自专栏人工智能LeadAI

基于协同过滤的推荐引擎(理论部分)

记得原来和朋友猜测过网易云的推荐是怎么实现的,大概的猜测有两种:一种是看你听过的和收藏过的音乐,再看和你一样听过这些音乐的人他们喜欢听什么音乐,把他喜欢的你没听...

3135
来自专栏有趣的Python

16- OpenCV+TensorFlow 入门人工智能图像处理- Hog特征识别小狮子

3095
来自专栏AI科技评论

干货 | 攻击AI模型之DeepFool算法

AI 科技评论按:本文为“兜哥带你学安全”系列之三,首发于AI科技评论,未经许可不得转载。

1233
来自专栏机器之心

资源 | 一个Python特征选择工具,助力实现高效机器学习

项目地址:https://github.com/WillKoehrsen/feature-selector

1102
来自专栏开心的学习之路

基于协同过滤的推荐引擎(理论部分)

记得原来和朋友猜测过网易云的推荐是怎么实现的,大概的猜测有两种:一种是看你听过的和收藏过的音乐,再看和你一样听过这些音乐的人他们喜欢听什么音乐,把他喜欢的你没听...

3339

用Python的长短期记忆神经网络进行时间序列预测

长短期记忆递归神经网络具有学习长的观察序列的潜力。

1.8K8
来自专栏Hadoop数据仓库

HAWQ + MADlib 玩转数据挖掘之(六)——主成分分析与主成分投影

一、主成分分析(Principal Component Analysis,PCA)简介         在数据挖掘中经常会遇到多个变量的问题,而且在多数情况下,...

1746

扫码关注云+社区