语音关键词检索实验小结

时间:2022-04-17 06:45:39

语音关键词检索实验小结

语音关键词检索(KeywordsSearch),是指在连续语音流中检测出一组给定的关键词的过程。与大词汇量连续语音识别(Large Vocabulary Continuous Speech Recognition)相比,语音关键词检索不需要对非关键词的精确识别,只需要检测出关键词即可,降低了对语音识别系统的要求,拓展了系统的适用条件。语音关键词检索在实时对话系统,命令控制,语音拨号,语音监听,以及语音文档检索方面等方面有着广泛的应用。

语音关键词检索从输入内容的形式来看可以分为两种:一种是输入语音样例(Query-by-example),另一种是输入文本形式。对于输入为语音样例的关键词检索,现行常用无监督方法来实现,如基于帧的模板匹配方法和基于片段的模板匹配方法[1]。现行大多数文本形式关键词检测主要基于大词汇量连续语音识别技术。本文关注基于大词汇量连续语音识别技术的文本语音关键词检索。

问题阐述

语音识别可以看成是如下问题:对于给定的声学观测(acoustic observation)序列,求出对应的字(word)序列,使后验概率 最大化,即求得,有

在语音识别系统中,称为“解码”过程,即根据预先训练好的声学模型和语言模型,在全体可能的字序列空间中搜索出概率最大的序列。在实际的语音识别系统中,最优路径不一定与实际字序列匹配,我们一般希望能够得到得分最靠前的多条候选路径,即N-best。候选路径的保存需要紧凑,防止占用过多内存空间。我们一般采用词格(Lattice)来保存识别的候选序列。

词格没有一般的定义。在语音关键词检索问题中,词格需要包含时间信息。可以用加权有限状态转换器(Weighted Finite States Transducer,WFST),来紧凑地表示N-best候选路径,即词格。有限状态转换器是一个八元组,其中:

l  A:表示输入符号表;

l  B:表示输出符号表;

l  Q:表示状态集合;

l  I:表示初始状态集合;

l  F:表示终止状态集合;

l  E:表示转移弧集合;

l  λ:表示初始权重;

l  ρ:表示终止权值;

用WFST可以表示输入符号序列和输出符号序列的映射关系。在Kaldi中,词格有两种表示方法。第一为Lattice,其输入符号为Transition-ids,输出符号为字。其二为CompactLattice,它是一种有限状态接收器(Finite States Automaton),与Lattice包含相同的信息。它的输入和输出符号都是字,transition-ids包含在权重上[3]。Kaldi采用这种表示方法,可以表示字序列(Word Sequence)状态级别的对齐[4]。这样,就可以用WFST来表示状态序列和字序列的映射关系。

于是,语音关键词检索问题就转变为:如何从解码出的词格,寻找到关键词所在位置。

关键词检索的结果需要包含关键词所在位置,即时间信息。直接解码出的词格中没有字序列的时间信息。所以在解码出的词格中加入每一个字的时间位置信息就是一个需要考虑的问题。

另一个需要考虑的问题是集外词(Out-of-vocabulary,oov)的问题。解码生成的词格是根据预先准备好的词典生成的,所以词格中不会包含词典中没有的词。对于语音识别来说,集外词比例较低,对整体识别性能造成的影响不大,但在语音检索任务中,集外词检索比例较高。在英文LVCSR系统中,当整体文档集外词比例在1.5%时,用户查询集外词比例高达12%[5],影响检索性能较为严重。所以如何在词格中查询到集外词,也是一个需要考虑的问题。

算法解释

首先定义因子转换器:给定两个串可以识别u的因子集合的最小确定有限状态接收器。因子v可以看做是关键词,u可以看做是整个句子,将关键词输入进因子自动机,即可看做是关键词的查询。

对于语音语句,给定一个对数半环上的加权自动机和状态时间列表 。问题就转化为创建一个时间索引,用来搜索任意串的任意因子。

构建的主要思路是,时间索引可以表示为将每一个因子x映射到1)x出现的自动机集合,2)每一个自动机中x出现的起始终止时间段,3)x在对应的时间段发生的后验概率的WFST。

对于在词格中加入时间信息的问题,一种方法是时间信息可以表示为WFST的弧的权重上。对CompactLattice拓扑排序以后,根据弧的长度,可以计算出每一状态的时间,从而得出每一状态时间[6]

定义加权有限状态转换器Bi,它给出了输入输出对(x,y)发生的概率P(x,y),根据Bi和状态时间列表ti,可以推导出时间因子转换器。

时间因子转换器Ti的生成分为四步:

1)  因子生成:

a)       将Bi中每一个弧的权重映射为(w,1,1)ÎLxTxT’

b)       建立初始状态和终止状态

c)        对每一个状态创建两个新弧

2)  因子合并:

将结果中含有相同因子对的路径合并

3)  因子消歧义

将非终结弧上的cluster标识符移除并在终结弧插入消歧义符号。

4)  优化

使用确定性算法和最小化算法优化。

用户查询的时候,首先将关键词编译成加权自动机X,然后合并(Composing)X和时间因子转换器T,通过Project操作生成输出符号。然后移除空转移,最后通过最短路算法排序。

对于集外词问题的解决,采用“代理关键词”的方法,即使用与查询的集外词读音相近的集内词代替来查找。

令K表示OOV 关键词的有限状态接收器,L2表示OOV关键词的发音有限状态转换器,E为一个将一个音素序列映射到另一个音素序列的编辑距离转换器,L1表示LVCSR系统的发音词典,则代理关键词为

Grapheme-to-phoneme使用Sequitur 软件,利用Joint-sequence 模型生成。混淆矩阵通过统计基于编辑距离的文本对齐信息得到。

实验流程

         实验主要分为两个部分:1.数据准备;2关键词检索。

         数据准备包括关键词数据的准备和语音数据的解码。

         首先手工准备ecf.xml和kwlist.xml两个文件,ecf.xml标明待检索的文档的范围,kwlist.xml标明待检索的关键词。然后利用local/kws_setup.sh脚本,它会调用kws_data_prep.sh脚本,将关键词分为集内词和集外词两部分,并将集内词编译成FST。解码部分,首先利用steps/make_fbank.sh和steps/compute_cmvn_stats.sh提取语音数据fbank特征,然后利用steps/nnet/decode.sh将语音数据解码成词格。

         对于集外词的检索,首先需要利用local/generate_confusion_matrix.sh生成音素混淆矩阵,然后利用local/apply_g2p.sh将集外词转换为音素。最后利用local/kws_data_prep_proxy.sh,将待查询的集外词编译成FST,准备工作即完成。

         关键词检索时,首先会调用steps/make_index.sh, 它调用lattice-to-kws-index程序,它将解码生成的词图编译成索引文件。之后调用steps/search_index.sh,它将调用kws-search程序,它将根据索引文件的WFST和关键词的WFSA进行Compose查询。



[1]Mandal A, KumarK, Mitra P. Recent developments in spoken term detection: a survey[J].International Journal of Speech Technology, 2013, 17(2): 183-198.

[2]Huang X, AceroA, Hon H. Spoken Language Processing[J]., 2000.

[3]http://kaldi.sourceforge.net/lattices.html

[4]Povey D,Hannemann M, Boulianne G. Generating exact lattices in the WFST framework[J].International Conference on Acoustics, Speech, and Signal Processing, 2012.

[5] Logan B, Moreno P, Van Thong J. AN EXPERIMENTAL STUDY OF AN AUDIOINDEXING SYSTEM FOR THE WEB[J]., 1996.

[6] Lattice-functions.cc: CompactLatticeStateTimes(const CompactLattice&lat, vector<int32> *times)