Kaldi的关键词搜索(Keyword Search,KWS)
本文简单地介绍了KWS的原理——为Lattice中每个词生成索引并进行搜索;介绍了如何处理OOV——替补(Proxy,词典内对OOV的替补)关键词技术;介绍了KWS的语料库格式;介绍了KWS在Kaldi中的示例训练脚本和搜索脚本。
- KWS系统示例:
论文下载:
http://www.clsp.jhu.edu/~guoguo/papers/icassp2013_lexicon_value.pdf
论文标题:QUANTIFYING THE VALUE OF PRONUNCIATION LEXICONS FOR KEYWORD SEARCH IN LOW RESOURCE LANGUAGES
该文介绍了LVCSR和KWS系统、词典扩充方法、词典扩充对LVSCR和KWS的影响。
- KWS系统:根据[2],为Lattice进行索引分为以下几步:
- 为测试集(eval, evalution,评估)中每一语句的有限状态转换器(FST)转换为(如何转换?)泛化因子转换器结构。该结构中,每个词的实例都拥有一个三元组(词的开始时间,词的结束时间,后验概率)。因子转换器,隐含了测试集中所有词序列的逆序(以后验概率排序)列表。可以使用Google OpenFST对其进行进一步的处理。
- 要在上述因子转换器中对某个词或短语进行检索,首先构建该词的有限状态机,然后与因子转换器进行组合(如何组合?),即得到了上述词的逆序列表。
- 使用[20]提出的方法,通过最大化所有关键词的期望词权重值(expected term weighted value,ETWV)(是啥?),估计一个决策阈值(如何估计),用于对各个结果作出Yes/No的决策。
- 最后,所有关键词命中集合将通过NIST 2006 Spoken Term Detection评估协议计算实际词权重值(actual term weighted value)(如何计算)。
某个关键词在测试集中的出现次数=所有预测命中的后验概率。
- 词典扩充对LVCSR和KWS的影响:提高发音词典词汇量,能提升1-4%的识别率,能提升KWS中实际的词加权值约60%的效果。在LVCSR阶段的词典扩充大大优于KWS阶段。
词典扩充只能适度降低WER,但是能很大程度地提高随后的ATWV。
- Lattice索引生成技术:
论文下载:
https://wiki.inf.ed.ac.uk/twiki/pub/CSTR/ListenSemester2201314/taslp_2011.pdf
论文标题:Lattice indexing for spoken term detection
本文为话语检测技术构建反向索引,具体的,在确定的WFST中存储软命中(soft-hit)信息(utterance-id, start time, end time, posterior score四元组,用于与目标词匹配)。展示了如何在多个Lattice中(多个语句中)生成所有子字符串的索引。
ASR候选解码结果通常储存在带权有向无环图——即lattices中。由于有限状态转换器框架提供了通用的搜索、优化、合并算法,通常使用有限状态转换器来表示ASR Lattice。对以WFST形式的lattice进行索引和搜索的问题,可以被看作是在文本文档中对模式进行搜索的扩展。搜索问题的有限解决办法使用了一种称为因子转换器的结构[12]。一个因子转换器是一个组成一篇文档的字符串集合中子字符串集合的倒排索引。因子转换器是一个非常有效的顺序索引,并且十分适用于需要确切序列匹配的话语检出应用。话语段和口语词检测是两种话语应用,分别用于找到语句以及包含查询词确切序列的语句中的时间间隔。
- Proxy关键词技术:
http://www.clsp.jhu.edu/~guoguo/papers/asru2013_proxy_keyword.pdf
基于WFST的框架用于处理OOV,单词级的
什么是segment?
猜测是关键词。为了进行训练,要为训练数据的语句进行切分,切分为关键词的序列。切分后的关键词序列可能会有字重叠。
什么是F4DE,KWS哪里用到了?
猜测在关键词搜索脚本local/kws_search.sh中使用。
Kaldi中关于KWS的示例:
babel/s5b
KWS的5个阶段:
- 使用训练数据集(train)训练一个LVCSR;
- 对测试集进行分段处理;
- 使用LVCSR生成测试集的解码结果(Lattice);
- 生成Latiice的倒排索引;
- 进行关键词的搜索。
KWS的数据准备
需要在KWS数据目录中手工准备以下三个文件:
ecf,检索集相关信息
kwlist,关键词列表
rttm,用于KWS打分