- 原文地址:An Introduction to Speech Recognition using WFSTs
- 原文做者:Desh Raj
- 译文出自:掘金翻译计划
- 本文永久连接:github.com/xitu/gold-m…
- 译者:sisibeloved
- 校对者:xionglong58, JackEggie
以前,个人博客文章都是关于深度学习方法或者它们在 NLP 中的应用。而从几周前,我开始研究自动语音识别(ASR)。所以,我如今也会发布一些语音相关的文章。html
ASR 的逻辑很是简单(就是贝叶斯理论,如同机器学习领域的其它算法同样)。本质上,ASR 就是对给定的语音波形进行转换,好比识别与波形对应的文本。假设 Y 表示从波形中得到的特征向量(注意:这个“特征提取”自己是一个十分复杂的过程,我将在另外一篇文章中详述),w 表示任意字符串的话,能够得出如下公式:前端
公式中的两个似然率是分开训练的。第一个份量,称为声学建模,使用包含话语和语音波形的平行语料库进行训练。第二个份量,称为语言建模,经过无监督的方式从大量文本中进行训练。android
虽然 ASR 训练从抽象层面看起来很简单,但实现它的实现却远要复杂得多。咱们一般会使用加权有限状态转换机(WFST)来实现。在这篇文章中,我将介绍 WFST 及其基础算法,并简要介绍如何将它用于语音识别。ios
若是你以前上过计算机理论课程(译者注:大多数人多是在编译原理这门课上学的),你可能已经了解了自动机的概念。从概念上来讲,有限自动机接受一种语言(一组字符串)做为输入。它们由有向图表示,以下所示。git
每一个自动机由一个开始状态,一个或多个最终状态,以及用于链接状态的带有标号的边组成。若是字符串在遍历图中的某个路径后以最终状态结束,则接受该字符串。例如,在上述 DFA(deterministic finite automata,肯定有限状态自动机)中,a、ac 和 ae 会被接受。github
所以接受器将任何输入字符串映射成二进制类 {0,1},具体取决于字符串是否被接受。而转换机在每条边上有 2 个标签 —— 输入标签和输出标签。加权状态转换机,则更进一步,具备对应于每一个边和每一个最终状态的权重。算法
所以,WFST 是从字符串对到权重和的映射。该字符串对由沿着 WFST 的任何路径的输入/输出标签造成。对于图中不可达的节点对,对应边的权重是无穷大。后端
实际上,绝大部分语言都有对应的实现 WFST 的库。在 C++ 中,OpenFST 是个较为流行的库,在 Kaldi 语音识别工具中也有用到。数据结构
原则上,咱们能够不使用 WFST 实现语音识别算法。可是,这种数据结构具备多种通过验证的结果和算法,可直接用于 ASR,而无需担忧正确性和复杂度。这些优势使得 WFST 在语音识别中几乎无可匹敌。接下来我会总结 WFST 上的一些算法。架构
顾名思义,合并是指将 2 个 WFST 组合造成单个 WFST 的过程。若是咱们有发音和单词级语法的转换机,这种算法将使咱们可以轻松地搭建一个语音转文字的系统。
合并遵循如下 3 个原则:
如下是一个合并示例:
对于边的权重来讲,“总和”的定义很重要。借助于半环的概念,WFST 能够接受广义上的“语言”。从基本概念上来说,它是一组具备 2 个运算符的元素,即 ⊕ 和 ⊗。根据半环的类型,这些运算符能够有不一样的定义。例如,在热带半环中,⊕ 表示取最小值,⊗ 表示相加。此外,在任意 WFST 中,一整条路径的权重之和等于沿路径的各条边的权重相 ⊗(注意:对于热带半环来讲这里的“相乘”意味着相加),多条路径的权重之和等于具备相同的符号序列的路径相 ⊕。
这里是 OpenFST 中对于合并的实现。
肯定自动机是每一个状态中每种标签只有一个转移的自动机。经过这样的表达式,肯定化的 WFST 消除了全部冗余并大大下降了基础语法的复杂性。那么,是否是全部 WFST 均可以肯定化呢?
孪生属性:假设有一个自动机 A,A 中有两个状态 p 和 q。若是 p 和 q 都具备相同的字符串输入 x,并有相同标签的循环 y,则称 p 和 q 为兄弟状态。从概念上讲,到该状态为止的路径(包括循环在内)的总权重相等,则这两个兄弟状态是孪生的。
当全部兄弟状态是孪生的时,这个 WFST 是能够被肯定化的。
这是我以前所说的关于 WFST 是 ASR 中使用的算法的有效实现的一个例子。有几种方法能够肯定化 WFST。其中一种算法以下所示:
该算法简化后的步骤以下:
因为这是一种本地算法,所以能够高效地在内存中实现。要了解如何在 OpenFST 中进行肯定化,请参阅此处。
尽管最小化不如肯定化那样重要,但它仍然是一种很好的优化技术。它用于最小化肯定的 WFST 中的状态和转移的数量。
最小化的步骤分为两步:
在 OpenFST 中,能够在这里找到最小化的具体实现。
下图(来自[3])展现了 WFST 优化的完整流程:
在语音识别中,多个 WFST 会被串行组合,顺序以下:
整体上,将转换机按 H o C o L o G 组合能够表示完整的语音识别的流程。其中每一个部分均可以单独改进,从而改善整个 ASR 系统。
WFST 是 ASR 系统的重要组成部分,这篇文章只是简要地对 WFST 做了介绍。在其它与语音相关的帖子中,我会讨论诸如特征提取,流行的 GMM-HMM 模型和最新的深度学习进展之类的事情。我也在阅读这些论文,以便更好地了解 ASR 多年来的发展历程。
若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。