集外词处理

集外词处理

参考:《Kaldi 语音识别实战》P254

词表扩展:

​ 如果一个关键词不在语音识别系统的词汇表中,即一般所说的集外词,那么在这个基于语音识别系统的语音检索系统中,是没有办法找到这个关健词的,因此在上述示例中,我们把集外词从关键词列表中直接移除了。为了让语音检索系统可以更好地兼容集外词搜索,Kaldi采用了一系列的方法,包括词表扩展、关键词扩展、音素/音节系统等。

​ 词表扩展的基本思想是尽可能地扩大语音识别系统所使用的词汇表,从而增加关键词的覆盖率,减小集外词的比例。在理想状态下,我们希望加入词表中的都是日常生活中会使用的合规的词汇,这样可以更好地覆盖关键词,而事实上,我们很难收集一个语言中所有的词汇。

​ Kaldi的做法是,随机地生成大量从发音规则上来说合理的词汇并加入到词汇表中,尽管它们中的有些词从拼写上来说是不合理的。具体来说, Kaldi 把原始词汇表中的每个词的发音都当作一个基本组成单元为音节或音素的“句子”,并且针对这些“句子”训练一个语言模型。语言模型可以根据概率分布随机地生成可能的句子,所以我们可以利用在原始词汇表的发音序列上训练的语言模型,随机地生成音素或音节的序列,而这些序列也就是潜在词汇可能的发音序列。Kaldi会随机生成上百万这样的发音序列。同时,Kaldi 会利用原始词汇表,训练一个逆向的字母音素转换模型(Grapheme-to-Phoneme,G2P),这个模型可以将词汇的音素或音节的序列转换成该词汇最有可能的拼写,利用这个模型,就可以使用前面产生的上百万个发音序列,转换成它们最有可能的拼写序列,从而生成扩展的词汇表。Kaldi 根据生成过程中的打分,对这些生成的词汇进行进一步的排序和删减,从而形成最终的词汇表。

G2P,不仅可以由词生成音素序列,还可以由音素序列生成词(yl)

用来做词表扩展的脚本位于 babel 示例下面,具体文件是 egs/babel/s5d/local/extend_lexicon.sh

1
2
3
mv data/local/lexicon.txt data/local/lexicon_orig.txt
local/extend_lexicon.sh --cmd "$train_cmd" --cleanup false --num-sent-gen $num_sent_gen --num-prons $num_prons data/local/lexicon_orig.txt data/local/extend data/dev2h/text
cp data/loval/extend/lexiconp.txt data/local/

其中,$num_sent_gen 是用语言模型生成的发音序列的数量,默认设置为12000 000;

$num_prons 是保留下来的有效发音序列的数量,默认设置为1000 000;

data/loca/lexicon_orig.txt 是原始的词汇表;data/local/extend 是工作目录,用于保存所有中间文件及最终生成的扩展后的带概率的词汇表 data/local/extend/lexiconp.txt ;

而 data/dev2h/text 是一个可选的文本文件,如果提供了,则会计算在原始词汇表和扩展后词汇表中集外词的比例,从而判断词表扩展是否有效提高了集内词的覆盖率。

关键词扩展:

​ 假设待搜索音频中存在语音识别系统的词汇表中不包括的词汇,那么语音识别系统往往会把这个词汇转写成一个或若干个和该词汇发音比较接近且存在于词汇表中的词汇。基于这个事实,减缓集外词问题的另一个思路是将一个集外的关键词拓展为多个和这个集外关键词发音比较接近且存在于词汇表中的词或词组,并用它们作为代理关键词去搜索。这个方法也叫作代理关键词方法或模糊搜索方法。
​ Kaldi 中代理关键词的生成都是在 WFST 的框架下进行的。虽然本书会尽可能避开不必要的公式,但是代理关键词的生成用一个公式来描述最为形象,公式如下:
$$
K’ = Project(ShortestPath(Prune(Prune(K\circ{L_{z}}\circ{E’})\circ{L^{-1}})))
$$
在上述公式中,K是集外关键词,L2是集外关键词对应的发音,往往可以通过字母音素转换模型(G2P)来产生,E’是编辑距离转换器,L1是语音识别系统原始的词汇表。除去剪枝(Prune)、最短路径(ShortestPath)等有限状态机中用来优化的操作,上面公式中主要的操作是复合(Composition)。简单来理解,当K复合了L2以后,生成的有限状态机可以将集外关键词的拼写转换为其对应的发音序列。再复合E’之后,生成的有限状态机可以将集外关键词的拼写转换为任意的发音序列,但是当生成的发。。。。。。。。。

  • 未完待续

参考:kaldi官方文档 Keyword Search in Kaldi