语音识别中的WFST和语言模型

语⾳识别中的WFST和语⾔模型
导读
在语⾳识别系统中,有限加权状态转换机(Weighted Finite State Transducers, WFST)扮演着重要⾓⾊。本⽂主要介绍发⾳词典、语⾔模型和WFST的原理,以及在实践过程中的⼀些优化⽅法。
背景
⽬前的实际场景中的语⾳识别系统更多是基于HMM的传统语⾳识别框架,如:DNN-HMM,这种框架是由声学模型、发⾳词典、语⾔模型和解码器构成的pipeline结构,其中声学模型建模粒度为⽐⾳素还⼩的三⾳素状态,⽽语⾔模型和WFST在其中扮演着重要的⾓⾊。
本⽂将主要围绕三个问题展开:(1)如何实现从HMM状态到句⼦的映射;(2)WFST如何优化解码效率;(3)在实际应⽤时,如何使⽤Lattice Rescore等⽅法适应不同的业务场景。
⾸先,我们会回顾⼀下语⾳识别的背景知识,介绍传统语⾳识别的架构和基本概念,以及发⾳词典和语⾔模型的原理。进⽽,介绍WFST的定义和基本操作,以及WFST在语⾳识别中发挥的作⽤。最后,我们将以实际场景为例,从解码图的⾓度介绍⼀些语⾳识别的优化⽅法。
十二五科技成就展
语⾳识别简介
语⾳识别(Automatic Speech Recognition, ASR)的⽬标是将⼈类的语⾳内容转换为相应的⽂字。系统的输⼊通常是⼀段完整的长录⾳(或语⾳流),录⾳需要先经过语⾳端点检测(Voice Activity Detection, VAD)将⼈声的⽚段截取出来,语⾳识别会将语⾳中的内容转写为⽂字,其中会包含⼤量⼝语、重复、语法错误等情况,且语⾳识别不会为句⼦添加标点。
这时,系统需要⼀个后处理模块,使⽤顺滑技术将明显的⼝语问题“整理”为通顺的句⼦,并为句⼦加上标点。同时,说话⼈分离、说话⼈识别、语⾳情绪识别等模块,会为每段语⾳打上说话⼈、性别、情绪等标签,与转写的⽂字⼀同作为下游NLP模块的输⼊,进⽽转化为意图、情感、槽位等可⽤信息。
语⾳识别系统通常分为基于HMM的传统系统和端到端系统。传统系统分为声学模型、发⾳词典、语⾔模型和解码器,其结构从最开始的GMM-HMM,过渡到DNN/GMM-HMM混合系统。端到端系统的输⼊为声学特征序列,输出对应的单词/字序列,以CTC和Seq2Seq两种结构为主。语⾔模型在两种系统中都起着很⼤的作⽤,⽽WFST则主要应⽤于传统的系统。本⽂内容将基于HMM的传统语⾳识别展开介绍。
语⾳识别问题通常可以⽤以下公式描述,其中W为单词序列,X为声学特征序列,如公式所⽰,语⾳识别的⽬的是在当前的声学特征序列下,出让该条件概率最⼤的单词序列。
从现在开始教学反思根据贝叶斯定理,可以将公式变形,变形后的公式中包含两个部分,即给定W下X的条件概率和W的概率。对于p(X|W)我们使⽤声学模型(Acoustic Model, AM)建模,对于P(W)则由语⾔模型(Language Model, LM)来建模,这也是传统语⾳识别的建模基础。
语⾳识别的过程如下图所⽰。⾸先,声⾳信号经过分帧加窗后,计算每帧的声学特征,如:MFCC、Fbank或PLP,该序列即前⾯提到的X。X作为HMM的观测序列,使⽤声学模型去拟合发射概率,即p(X|S),这⾥S为HMM的状态,当使⽤GMM建模时,每个状态会对应⼀个模型,当使⽤DNN建模时,状态数即DNN的输出层维度。现实⽣活中,⼀个⾳节通常会持续⼀段时间,所以帧与HMM状态之间会呈现多对⼀的关系,因此声学模型的另⼀个作⽤是实现帧与状态的对齐(alignment)。此时,在HMM中已知了观测序列和模型参数,则语⾳识别的过程即是给定声学特征序列的条件下在HMM状态上解码的过程。
普乐美铬超标
此外,我们的识别⽬标是单词序列(句⼦的分词结果),每个单词由提前构造好的发⾳词典(lexicon)转为对应的⾳素序列(中⽂的⾳素通常指拼⾳中的声母和韵母),即将单词序列转为⾳素序列。⼈们在说话时,某⾳素的发⾳是会受到前后⾳素影响的,这种现象为协同发⾳,为了解决这⼀现象,将当前⾳素与其前后的⾳素拼起来组成新的⾳素,称为三⾳素(triphone)。在传统的语⾳识
别系统中,通常使⽤三个状态去表⽰⼀个三⾳素,分别表⽰⼀个⾳素的发⾳初始态、稳定态和结束态,因此,⼀个⾳素⼜可以表⽰为三个状态。
但这⾥会有个问题,中⽂有200多个⾳素,按照现在的⽅法,最后的状态类别数为200*200*200*3 = 24000000,也就是说我们需要使⽤24000000个GMM或者输出层维度为24000000的DNN去建模,正常的训练数据很难⽀持如此⼤的模型,很容易过拟合。⽽在现实中不是所有的三⾳素都会出现,且某些三⾳素的发⾳会有近似的情况,因此在传统语⾳识别系统中,会将所有的三⾳素放在⼀起进⾏聚类,发⾳相似的三⾳素会使⽤同⼀个模型,这个⽅法称为状态绑定(State Tying),这⾥的聚类通常使⽤决策树来实现。
⾄此,我们知道使⽤声学模型可以拟合HMM状态到声学特征序列的发射概率,也知道了状态与单词之间层层对应的关系,接下来我们需要⼀个模型,使其输⼊⼀个状态序列,即可⾼效的输出对应的单词序列,并给出相应的打分以供解码其使⽤,这就是WFST解决的问题。在介绍WFST之前,先来熟悉⼀下语⾔模型与发⾳词典的概念
发⾳词典和语⾳模型哄抢猪肉5人被拘
1、语⾔模型
语⾔模型表⽰⼀个句⼦出现的概率,对于下图中的四句话来说,第四句“⽕腿吃猫喜欢”明显是⼀句不通顺的句⼦,因此,我们希望语⾔模型可以给前三句话较⾼的分数,给最后⼀句话很低的分数。
语⾔模型的公式化表达为P(W),因为句⼦是千变万化的,所以将句⼦分词后再建模。分词后,⼀句话出现的概率就表⽰为其中每个单词在当前上下⽂中出现的概率之积。使⽤马尔科夫假设,每个单词的概率只与前N个单词有关,基于这样思想构造的语⾔模型为ngram。
举例来说,假设训练集就是前⾯给出前三句话,那么“猫 喜欢 吃 ⽕腿”出现的概率计算过程如下图所⽰,其中<s>表⽰句⼦开始符
安阳工学院学报号,</s>表⽰句⼦结尾符号。
2、语⾔模型的平滑
还是上节的例⼦,试着计算 “⽼⿏ 喜欢 吃 ⽕腿”的概率,因为“⽼⿏”从来没有作为句⼦的开始,且“⽼⿏”后⾯从来没有出现过“喜欢”,所以P(⽼⿏|<s>)和P(喜欢|⽼⿏)都是0,这会导致整个句⼦的得分为0,但是这明显是⼀句通顺的句⼦,只是因为这样的组合在语料中没有出现过就让整句的概率为0是不合理的,为了解决这⼀问题,提出了平滑算法(Smoothing)[1][6]。
平滑算法主要有两种思想,插值法(Interpolation)和回退法(Backoff),以上⾯的句⼦为例,插值法是将⾼阶的单词(⽼⿏ 喜欢)与对应低阶的单词(喜欢)进⾏插值,⽽回退法,是在⾼阶词存在时,使⽤⾼阶词的概率,⾼阶不存在时,使⽤对应低阶的概率乘以回退概率。
常⽤的平滑算法为Kneser Ney Smoothing [1],这个⽅法既有插值版本,也有回退版本,在计算⾼阶的原始概率时,会加⼀个打折因⼦(discount)以保证所有单词的概率和为1,⽽其打折因⼦和回退概率由当前词的上下⽂统计得出,以下为对应的计算公式。
3、困惑度
调查公民个人信息
语⾔模型的评价⽅法为困惑度(perplexity, ppl),表⽰为每个单词概率倒数的⼏何平均数,经过取log变换后,与交叉熵的形式相同,其⼤⼩表⽰当前句⼦的“通顺”程度,通常相对值更加有意义。
4、语⾔模型⼯具
在使⽤kaldi[10]语⾳识别框架时,需要把语⾔模型表⽰为ARPA格式,如下图所⽰,主要分为头部以及各阶ngram的单词和分数,包含三列,分别为当前单词出现概率的log10、单词和回退概率的log10。
进⽽,使⽤kaldi中的arpa2fst⼯具将语⾔模型转化为WFST图的形式。
基于ngram的语⾔模型⼯具通常为SRILM[11]、IRSTLM[12],除此之外,还可以使⽤深度学习语⾔模型建模,常见的有rnnlm[2]⼯具,可以通过重打分等⽅式应⽤于语⾳识别系统。注意,此处的语⾔模型本质与NLP中的概念相同,但在NLP中更关注语⾔模型的输出语义向量,⽽在语⾳识别中则更加关注单词之间的转移概率

本文发布于:2024-09-22 01:27:29,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/453342.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   概率   单词   识别   序列   声学   状态   传统
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议