新手语音入门(四): 传统语音识别技术简介 | 隐马尔可夫链 | 声学/语言模型 | WFST解码

网友投稿 1157 2022-05-30

隐马尔可夫链HMM模型自从1980年代被用于语音识别以来,一直都是实际语音识别系统的主流方法。

1. 声学模型

1.1 隐马尔可夫链模型HMM与声学模型

根据上一篇博文中提到的,

P

(

X

W

)

P(X|W)

P(X∣W)对应的是声学模型,首先需要考虑的是,语音和文本的不定长关系使得二者的序列之间无法一一对应。隐马尔可夫链模型正好可以解决这个问题。

图1 隐马尔可夫链模型(I、E表示开始和结束时间)

比如

P

(

X

W

)

=

P

(

x

1

,

x

2

,

x

3

w

1

,

w

2

)

P(X│W)=P(x_1,x_2,x_3 |w_1,w_2)

P(X│W)=P(x1 ,x2 ,x3 ∣w1 ,w2 )可以表示成上面隐马尔可夫链的形式,图中

w

w

w是HMM的隐含状态,

x

x

x是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(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(w_1)

P(w1 )和状态转移概率(

P

(

w

2

w

1

)

P(w_2 |w_1)

P(w2 ∣w1 )、

P

(

w

2

w

2

)

P(w_2 |w_2))

P(w2 ∣w2 ))可以用常规的统计方法从样本总计算出来,主要的难点在于HMM发射概率(

P

(

x

1

w

1

)

P(x_1 |w_1)

P(x1 ∣w1 )、

P

(

x

2

w

2

)

P(x_2 |w_2)

P(x2 ∣w2 )和

P

(

x

3

w

2

)

P(x_3 |w_2)

P(x3 ∣w2 ))的计算上,所以声学模型问题进一步细化到HMM发射概率(Emission Probabolity)的学习上。

另外需要解决的一个问题是,文本的基本单位粒度大小。对于语音来说,帧的粒度可以通过调节处理窗口的宽窄来控制。对于文本,字词级别的粒度过于宽泛笼统,因此如图,我们将其分解:

图2 Phone、Triphone、Senone三者之间的关系(#N、#

N

3

N^3

N3、#3

N

3

N^3

N3表示数量级)

字词是由音素(Phone)组成的;音素的上下文不同,同一个音素就有了不同的变异体,比如

/

l

d

s

i

l

/

/l-d-sil/

/l−d−sil/与

/

u

d

l

/

/u-d-l/

/u−d−l/,我们将其记为三音素(Triphone)。

每个三因素又可以用一个独立的三状态HMM来建模,因此文本方面的基本单位编程微小的HMM状态。由于很多三音素并未在语料中出现或数量不多,并且最终可以通过决策树共享三音素的状态,所以对于共有N个音素的语言,最终保留下来的三音素状态数量远小于

3

N

3

3N^3

3N3,一般为几千个,一般把他们定义为Senones,而每一帧与每一个Senone的对应关系表示为三音素HMM的发射概率

P

(

x

i

s

j

)

P(x_i |s_j)

P(xi ∣sj ),其中

s

j

s_j

sj 表示第

j

j

j个Senone,与之对应的帧(

x

i

x_i

xi )的跨度通常取为25ms,帧间步移常取10ms。其中Senone是借助数学模型定义出来的音素变种,没有直接的听觉感受。音素“/sil/”无实际发音,仅表示静音、自间停顿或无意义的声音,#

N

N

N是Phone的个数,#

N

3

N^3

N3、#3

新手语音入门(四): 传统语音识别技术简介 | 隐马尔可夫链 | 声学/语言模型 | WFST解码

N

3

N^3

N3分别是Triphone、Senone的可能数量级。

Sentence到Word,Word到Phone,Phone到Triphone,每个Triphone都用HMM建模,将所有相关的HMM按发音顺序首尾相连组成的HMM长链则表示Sentence.

所有

P

(

X

W

)

P(X|W)

P(X∣W)就是这条HMM长链产生观测序列X的概率。因为Phone的个数是固定的,系统中所有的Triphone HMM所构成的基本集合也是固定的,不同

w

w

w对应的长链不同则在于长链所包含的Triphone不同,但他们所使用的字典是相同的。

用p表示Phone、c表示Triphone,可知一个p可以对应多个c,

P

(

X

W

)

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

>

l

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>l

P(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(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(x_i|s_j)

P(xi ∣sj )的建模直接影响声学模型的好坏。

高斯混合模型(Gaussion Mixture Model,GMM)是最常用的统计模型,给定充分的子高斯数,GMM可以拟和任意的概率分布,所以GMM成为首选的发射概率模型。

每个GMM对应一个Senone,并用各自的概率密度函数(Probability Density Function,PDF)表示。

下图表示单个三音素的GMM-HMM结构:

图3 一个三音素的GMM-HMM结构

GMM把每帧看成空间中一个孤立的点,点与点之间没有依赖关系,所以GMM忽略了语音信号中的时序信息,并且帧内各维度相关性较小的MFCC(Mel Frequency Cepstral Coeffcient)特征更有利于GMM建模。

GMM训练完成后,通过比对每个PDF,可以求出发射概率

P

(

x

i

s

j

)

P(x_i|s_j)

P(xi ∣sj ),结合HMM的初始状态概率、状态转移概率,通过HMM计算公式计算得到

P

(

X

W

)

P(X|W)

P(X∣W)。

1.3 DNN-HMM模型

GMM是生成式模型(generative Model), 着重刻画数据的内在分布,可以直接求解

P

(

x

i

s

j

)

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(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(x_j)

P(xj )省去不算,

P

(

s

j

)

P(s_j)

P(sj )可通过常规统计方法求出,问题被进一步归结为求取

P

(

s

i

x

j

)

P(s_i|x_j)

P(si ∣xj ),这是典型的分类问题,也是判别式模型最擅长的,其中深度神经网络的表现最为突出。其中

P

(

s

i

x

j

)

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的发射概率。

图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=[w_1,w_2,…w_m]

W=[w1 ,w2 ,…wm ],其概率表示为

P

(

W

)

=

P

(

w

1

,

w

2

,

,

w

m

)

=

i

=

1

m

P

(

w

i

w

1

,

w

2

,

w

i

1

)

i

=

1

m

P

(

w

i

w

i

n

+

1

,

w

i

n

+

2

,

,

w

i

1

)

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∏m P(wi ∣w1 ,w2 …,wi−1 )∝i=1∏m P(wi ∣wi−n+1 ,wi−n+2 ,…,wi−1 )

上式做出了“远亲不如近邻”假设,即所谓的n-gram模型,它假设当前词的出现概率只与该词之前n-1个词相关,且该式中各因子需要从一定数量的文本语料中统计计算出来,此过程即是语言模型的训练过程,且需要列出所有可能的

P

(

w

i

w

i

n

+

1

,

,

w

i

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

)

=

c

o

u

n

t

(

w

i

n

+

1

,

w

i

n

+

2

,

,

w

i

)

c

o

u

n

t

(

w

i

n

+

1

,

w

i

n

+

2

,

,

w

i

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语言模型

可以由上述概率计算公式的子式看出,当前的结果依赖于之前的信息,因此可以天然使用单向循环神经网络进行建模。

常规做法是,利用句子中的历史词汇来预测当前词。

图5 RNN语言模型基本结构

如图5所示,为RNN语言模型的基本结构,其输出层往往较宽,每个输出节点对应一个词,整个输出层涵盖了语言模型所使用的词表,故其训练本质上也是训练器训练,每个节点的输出表示产生该节点词的概率,即

P

(

w

i

w

i

n

+

1

,

,

w

i

1

)

P(w_i |w_{i-n+1},…,w_{i-1})

P(wi ∣wi−n+1 ,…,wi−1 ),根据公式可以求出

P

(

W

)

P(W)

P(W)。

3. 解码器

我们语音识别最终目的是选择使得

P

(

W

X

)

=

P

(

X

W

)

P

(

W

)

P(W|X)=P(X|W)P(W)

P(W∣X)=P(X∣W)P(W)最大的

W

W

W,所以解码本质上式一个搜索问题,并可借助加权有限状态转换机(Weighted Finite State Transducer, WFST)统一进行最优路径搜索。

WFST由状态节点和边组成,且边上有对应的输入、输出符号及权重,形式为

x

:

y

/

w

x:y/w

x:y/w,表示该边的输入符号为x,输出符号为y,权重为w,权重可以定义为概率(越大越好)、惩罚(越小越好)等,从起始到结束状态上的所有权重通常累加起来,记为该路径的分数,一条完整的路径必须从起始时间到结束时间。

图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。

图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(s_i|x_j)

P(si ∣xj ),借助于HCLG,

P

(

W

X

)

P

(

X

W

)

P

(

W

)

P(W|X)∝P(X|W)P(W)

P(W∣X)∝P(X∣W)P(W)的计算将变得简单,即将W路径上的权重相加(假设为惩罚),再减去个状态针对输入的发射概率得到的最终得分,该得分越小,说明该语音X转录为W的可能性越大。

参考:

语音识别基本法 - 清华大学语音和语言技术中心[PDF]

AI EI企业智能 EI智能体 SIS 语音通话

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:疯狂Java之学习笔记(14)-----------类、对象
下一篇:鸿蒙轻内核A核源码分析系列三 物理内存(2)
相关文章