arpa2fst将语言模型转为WFST
概述
在基于WFST的语音识别中,需要将HCLG或TLG不同层次的WFST复合在一起构成超大的解码网络,其中G就是语音模型的WFST表示。但常见的语言模型并不是以WFST形式存在,而是基于ngram实现,并以arpa文件形式存在。
arpa2fst可以将语言模型arpa文件转换为WFST,便于后续解码图的构建。
语言模型
语言模型通常以arpa文件形式存在,示例如下:
arpa文件的每一行表示一个文法项,它通常包含三部分内容:
其中,probability
表示该词或词组发生的概率,word(s)
表示具体的词或者词组,[backoff probablitiy]
是可选项,表示回退概率,当下层文法有以当前词或词组为前缀的文法项时,回退概率存在。例如上述示例中,二元文法项天气 怎么
是三元文法项天气 怎么 样
的前缀,所以它存在回退概率,在上述示例中该回退概率为0,通常不为0。
通过上述的arpa文件,可以计算给定一句话的语言模型得分,假设arpa文件中最高元为三元,则句子ABCDEF
发生的概率为:
其中,\(P(A)\)通过查询arpa文件中1-grams文法项获得。如果2-gram存在词组A B
,则\(P(B|A)\)也可以通过查询2-grams文法项获得;如果词组A B
在2-grams中不存在,就需要利用回退概率计算\(P(B|A)\),计算公式为:
其中,\(\alpha(A)\)表示A
的回退概率。类似地,三元词组概率的计算公式如下:
WFSA转换为WFST
WFST比WFSA多了输出标签,如果不考虑语言模型和发音词典的融合,arpa2fst只需要将arpa转换为WFSA即可,但语音识别中语言模型并非单独存在,而是需要和其它解码器图复合,构成最终的WFST解码网络,需要语言模型生成的WFST存在输入和输出符号。对语言模型来说,WFSA转换到WFST非常容易,只需要将每条边上的输入标签复制成输出标签即可。如下图为语言模型示例通过arpa2fst生成的WFST:
如上图所示,转移弧权重\(w\)和语言模型的对数(10为底)概率\(L\)之间的计算关系为:
比如1-gram中“今天”的对数概率为-0.9294189,则图中权重为\(w=-{\rm ln}(10^{-0.9294189})=2.1401\)。概率值取负对数作为图中的权重,此时权重的意义为路径代价(Cost),即权重越大,概率越小。为了使G在去掉\(\epsilon\)之后能够被确定化,在每个回退跳转的后面加入一个符号#0
,图中<eps>
表示空标签\(\epsilon\)。经过这这样的展开,任意序列的语言模型负对数累积概率就等于图中某路径的累计权重。
某个二元语言模型对应的WFST如上图所示,其中每个节点表示一个词,节点之间的转移弧权重表示前一个词\(w_1\)与后一个词\(w_2\)之间的条件概率\(P(w_2|w_1)\)。例如,节点1表示句子的起始<s>
,节点2表示今天
,从节点1到2的转移弧为今天:今天/0.40547
,转移弧上的权重(即条件概率)与语言模型对数概率之间的计算关系如上式,即\(0.40547=-{\rm ln}(10^{-0.1760913})\)。如上文所述,如果\(w_1\)和\(w_2\)构成的词组在语言模型中不存在,则\(w_1\)和\(w_2\)之间的条件概率由\(w_1\)回退概率和\(w_2\)概率相乘得到。比如,上图中节点0表示回退状态,节点1到节点0的转移弧权重为0.8473,对应<s>
的回退概率-0.3679768,即\(0.8473=-{\rm ln}(10^{-0.3679768})\)。节点2到节点0的转移弧权重为0.69315,对应今天
的回退概率为-0.30103,即\(0.69315=-{\rm ln}(10^{-0.30103})\)。
arpa2fst 原理详解_yutianzuijin的博客-CSDN博客_arpa文件 洪青阳-《语音识别原理与实践》-P.168 WFST 语言模型 - 简书