带你认识传统语音识别技术
摘要:隐马尔可夫链 HMM 模型自从 1980 年代被用于语音识别以来,一直都是实际语音识别系统的主流方法。
本文分享自华为云社区《新手语音入门(四): 传统语音识别技术简介| 隐马尔可夫链| 声学/语言模型 |WFST解码》,作者:黄辣鸡。
隐马尔可夫链 HMM 模型自从 1980 年代被用于语音识别以来,一直都是实际语音识别系统的主流方法。
1、声学模型
1.1 隐马尔可夫链模型 HMM 与声学模型
根据上一篇博文中提到的,P(X|W)P(X∣W)对应的是声学模型,首先需要考虑的是,语音和文本的不定长关系使得二者的序列之间无法一一对应。隐马尔可夫链模型正好可以解决这个问题。
![](https://static001.geekbang.org/infoq/a5/a5de26a0be0390fc64c3c65fa6e391a0.png)
图 1 隐马尔可夫链模型(I、E 表示开始和结束时间)
比如 P(X│W)=P(x_1,x_2,x_3 |w_1,w_2)P(X│W)=P(x1,x2,x3∣w1,w2)可以表示成上面隐马尔可夫链的形式,图中 ww 是 HMM 的隐含状态,xx 是 HMM 的观测值,隐含状态数与观测值数目不受彼此约束,这便解决了输入输出的不定长问题,并有:
P(X│W)=P(w_1)P(x_1 |w_1)P(w_2 |w_1)P(x_2 |w_2)P(w_2 |w_2)P(x_3 |w_2)P(X│W)=P(w1)P(x1∣w1)P(w2∣w1)P(x2∣w2)P(w2∣w2)P(x3∣w2)
其中,HMM 的初始状态概率 P(w_1)P(w1)和状态转移概率(P(w_2 |w_1)P(w2∣w1)、P(w_2 |w_2))P(w2∣w2))可以用常规的统计方法从样本总计算出来,主要的难点在于 HMM 发射概率(P(x_1 |w_1)P(x1∣w1)、P(x_2 |w_2)P(x2∣w2)和 P(x_3 |w_2)P(x3∣w2))的计算上,所以声学模型问题进一步细化到 HMM 发射概率(Emission Probabolity)的学习上。
另外需要解决的一个问题是,文本的基本单位粒度大小。对于语音来说,帧的粒度可以通过调节处理窗口的宽窄来控制。对于文本,字词级别的粒度过于宽泛笼统,因此如图,我们将其分解:
![](https://static001.geekbang.org/infoq/32/3208f6ad3ba0f2ad0326277a6db2cccf.png)
图 2 Phone、Triphone、Senone 三者之间的关系(#N、#N^3N3、#3N^3N3 表示数量级)
字词是由音素(Phone)组成的;音素的上下文不同,同一个音素就有了不同的变异体,比如/l-d-sil//l−d−sil/与/u-d-l//u−d−l/,我们将其记为三音素(Triphone)。
每个三因素又可以用一个独立的三状态 HMM 来建模,因此文本方面的基本单位编程微小的 HMM 状态。由于很多三音素并未在语料中出现或数量不多,并且最终可以通过决策树共享三音素的状态,所以对于共有 N 个音素的语言,最终保留下来的三音素状态数量远小于 3N^33N3,一般为几千个,一般把他们定义为 Senones,而每一帧与每一个 Senone 的对应关系表示为三音素 HMM 的发射概率 P(x_i |s_j)P(xi∣sj),其中 s_jsj表示第 jj 个 Senone,与之对应的帧(x_ixi)的跨度通常取为 25ms,帧间步移常取 10ms。其中 Senone 是借助数学模型定义出来的音素变种,没有直接的听觉感受。音素“/sil/”无实际发音,仅表示静音、自间停顿或无意义的声音,#NN 是 Phone 的个数,#N^3N3、#3N^3N3 分别是 Triphone、Senone 的可能数量级。
Sentence 到 Word,Word 到 Phone,Phone 到 Triphone,每个 Triphone 都用 HMM 建模,将所有相关的 HMM 按发音顺序首尾相连组成的 HMM 长链则表示 Sentence.
所有 P(X|W)P(X∣W)就是这条 HMM 长链产生观测序列 X 的概率。因为 Phone 的个数是固定的,系统中所有的 Triphone HMM 所构成的基本集合也是固定的,不同 ww 对应的长链不同则在于长链所包含的 Triphone 不同,但他们所使用的字典是相同的。
用 p 表示 Phone、c 表示 Triphone,可知一个 p 可以对应多个 c,P(X|W)P(X∣W)有类似如下的转换关系:
P(X│W)=P(x_1,…,x_t│w_1,…,w_l ),w_1={p_1,p_2,…} \ = P(x_1,…,x_t│p_1,…,p_m ),p_1=c_1,p_2=c_2,p_3=c_3,… \ = P(x_1,…,x_t│c_1,…,c_m ),c_1={s_1,s_2,s_3,…} \ = P(x_1,…,x_t│s_1,…,s_o ),o>n=m>lP(X│W)=P(x1,…,xt│w1,…,wl),w1=p1,p2,…=P(x1,…,xt│p1,…,pm),p1=c1,p2=c2,p3=c3,…=P(x1,…,xt│c1,…,cm),c1=s1,s2,s3,…=P(x1,…,xt│s1,…,so),o>n=m>l
根据上式,虽然声学建模的粒度细化了,但是问题仍是给定 HMM,求产生某个观测序列的概率,只是 HMM 更长一些而已,归根结底仍需要对发射概率 P(x_i|s_j)P(xi∣sj)建模。
总结:语音识别声学模型的设计正是一个从大到小、从宏观到微观的拆解过程,而语音识别的解码则是将过程逆转:从 Frame 到 Senone,从 Senone 到 Triphone,再到 Phone,最后到 Word 直至 Sentence.
1.2 GMM-HMM 模型
根据上文,HMM 中的发射概率 P(x_i|s_j)P(xi∣sj)的建模直接影响声学模型的好坏。
高斯混合模型(Gaussion Mixture Model,GMM)是最常用的统计模型,给定充分的子高斯数,GMM 可以拟和任意的概率分布,所以 GMM 成为首选的发射概率模型。
每个 GMM 对应一个 Senone,并用各自的概率密度函数(Probability Density Function,PDF)表示。
下图表示单个三音素的 GMM-HMM 结构:
![](https://static001.geekbang.org/infoq/23/23d5c2675c1a1ba829f39a8dd18fdce1.png)
图 3 一个三音素的 GMM-HMM 结构
GMM 把每帧看成空间中一个孤立的点,点与点之间没有依赖关系,所以 GMM 忽略了语音信号中的时序信息,并且帧内各维度相关性较小的 MFCC(Mel Frequency Cepstral Coeffcient)特征更有利于 GMM 建模。
GMM 训练完成后,通过比对每个 PDF,可以求出发射概率 P(x_i|s_j)P(xi∣sj),结合 HMM 的初始状态概率、状态转移概率,通过 HMM 计算公式计算得到 P(X|W)P(X∣W)。
1.3 DNN-HMM 模型
GMM 是生成式模型(generative Model), 着重刻画数据的内在分布,可以直接求解 P(x_i|s_j)P(xi∣sj),而 P(x_i|s_j) = P(s_i|x_j)P(x_j)/P(s_j)P(xi∣sj)=P(si∣xj)P(xj)/P(sj),因为 P(x_j)P(xj)省去不算,P(s_j)P(sj)可通过常规统计方法求出,问题被进一步归结为求取 P(s_i|x_j)P(si∣xj),这是典型的分类问题,也是判别式模型最擅长的,其中深度神经网络的表现最为突出。其中 P(s_i|x_j)P(si∣xj)是似然概率(Likelihood),P(s_j)是先验概率,P(s_i|x_j)是后验概率。
DNN 用于分类问题,属于监督学习,需要准备标签。由于语音训练集往往是语音与整条文本之间的对应关系,并未明确指出帧级别的标签。因此还需要使用额外的算法对数据集打标签,选择的方法是上文的 GMM。GMM 擅长捕捉已知数据间的内在关系,打出来的标签具有较高的可信度。下图展示了基本的 DNN-HMM 声学模型结构,语音特征作为 DNN 的输入,DNN 的输出则用于计算 HMM 的发射概率。
![](https://static001.geekbang.org/infoq/c9/c9fd34e5a6fa8a46f7bc066152094570.png)
图 4 DNN-HMM 经典结构
相较于 GMM-HMM 结构,DNN-HMM 与之唯一的不同是结构中的发射概率是由 DNN 而非 GMM 求出的。
2、语言模型
语言模型要解决的问题是如何计算 P(W),常用的方法基于 n 元语法(n-gram Grammer)或 RNN。
2.1 N-gram 语言模型
语言模型是典型的自回归模型(Autoregressive Model),给定次序列 W=[w_1,w_2,…w_m]W=[w1,w2,…wm],其概率表示为
P(W)=P(w_1,w_2,…,w_m) \ = ∏_{i=1}^mP(w_i | w_1,w_2…,w_{i-1}) \ ∝ ∏_{i=1}^mP(w_i | w_{i-n+1},w_{i-n+2},…,w_{i-1})P(W)=P(w1,w2,…,wm)=i=1∏mP(wi∣w1,w2…,wi−1)∝i=1∏mP(wi∣wi−n+1,wi−n+2,…,wi−1)
上式做出了“远亲不如近邻”假设,即所谓的 n-gram 模型,它假设当前词的出现概率只与该词之前 n-1 个词相关,且该式中各因子需要从一定数量的文本语料中统计计算出来,此过程即是语言模型的训练过程,且需要列出所有可能的 P(w_i |w_{i-n+1},…,w_{i-1})P(wi∣wi−n+1,…,wi−1)。
计算过程可以简化为计算语料中相应词串出现的比例关系,即
P(w_i│w_{i-n+1},w_{i-n+1},…,w_{i-1} )= \frac {count(w_{i-n+1},w_{i-n+2},…,w_i)}{count(w_{i-n+1},w_{i-n+2},…,w_{i-1})}P(wi│wi−n+1,wi−n+1,…,wi−1)=count(wi−n+1,wi−n+2,…,wi−1)count(wi−n+1,wi−n+2,…,wi)
其中 count 表示词串在语料中出现的次数,由于训练语料不足或词串不常见等因素导致某些词串未在训练文本中出现,可以使用平滑算法处理。
2.2 RNN 语言模型
可以由上述概率计算公式的子式看出,当前的结果依赖于之前的信息,因此可以天然使用单向循环神经网络进行建模。
常规做法是,利用句子中的历史词汇来预测当前词。
![](https://static001.geekbang.org/infoq/07/07d85cd067e959e97971ecbfbc294f46.png)
图 5 RNN 语言模型基本结构
如图 5 所示,为 RNN 语言模型的基本结构,其输出层往往较宽,每个输出节点对应一个词,整个输出层涵盖了语言模型所使用的词表,故其训练本质上也是训练器训练,每个节点的输出表示产生该节点词的概率,即 P(w_i |w_{i-n+1},…,w_{i-1})P(wi∣wi−n+1,…,wi−1),根据公式可以求出 P(W)P(W)。
3、解码器
我们语音识别最终目的是选择使得 P(W|X)=P(X|W)P(W)P(W∣X)=P(X∣W)P(W)最大的 WW,所以解码本质上式一个搜索问题,并可借助加权有限状态转换机(Weighted Finite State Transducer, WFST)统一进行最优路径搜索。
WFST 由状态节点和边组成,且边上有对应的输入、输出符号及权重,形式为 x:y/wx:y/w,表示该边的输入符号为 x,输出符号为 y,权重为 w,权重可以定义为概率(越大越好)、惩罚(越小越好)等,从起始到结束状态上的所有权重通常累加起来,记为该路径的分数,一条完整的路径必须从起始时间到结束时间。
![](https://static001.geekbang.org/infoq/47/47977ac4fdd6c49135c096e6966f66d8.png)
图 6 语言模型的 WFST 示例
上图是语言模型表示为 WFST 的示例。句子由词组成,对于 n-gram LM,可以将其表示为 WFST,并记为 G。可以看出 G 的输入符号和输出符号是相同的,均为词,其后的权重由语言模型中的概率值转换而来,据此图可知,句子“using data is better”的得分为 1+0.66+0.5+0.7=2.86, 句子“using intuition is worse”的得分为 1+0.33+1+0.3=2.63。
![](https://static001.geekbang.org/infoq/31/31bfa473f18d1d6efa435d6fc4058ea8.png)
图 7 发音词典 WFST 示例
上图是发音词典表示成 WFST 的示例。因为词是由音素组成,可以将其表示为 WFST,并记为 L。图中的ε是个占位符,表示没有输入或输出。根据此图,单词“data=/dey t ax/”的得分为 1+0.5+0.3+1=2.8,而单词“dew=/d uw/”的得分为 1+1=2,如果将权重定义为惩罚,则“dew”的可能性更大。
以此类推,定义输入 Triphone、输出为 Phone 的 WFST 为 C,定义输入为 Senone、输出为 Triphone 的 WFST 为 H,至此,我们得到 4 个 WFST,即 H、C、L、G。因为前者是输出是后者的输入,所有可以将他们融合成一个 WFST,这样就可以实现从 Senone 到 Triphone(H)、Triphone 到 Phone©、Phone 到 Word(L)、Word 到 Sentence(G),这就是解码图(Decoding Graph)。
最终解码时,只需要 GMM 或 DNN,就可以利用 HCLG 进行解码了,给定语音特征序列 X,可以通过 GMM 或 DNN 计算出 P(s_i|x_j)P(si∣xj),借助于 HCLG,P(W|X)∝P(X|W)P(W)P(W∣X)∝P(X∣W)P(W)的计算将变得简单,即将 W 路径上的权重相加(假设为惩罚),再减去个状态针对输入的发射概率得到的最终得分,该得分越小,说明该语音 X 转录为 W 的可能性越大。
参考:
1. 语音识别基本法 - 清华大学语音和语言技术中心[PDF]
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/c77f6e1ee4f0030ad4b76b1b6】。文章转载请联系作者。
评论