本文简单地介绍了KWS的原理——为Lattice中每个词生成索引并进行搜索;介绍了如何处理OOV——替补(Proxy,词典内对OOV的替补)关键词技术;介绍了KWS的语料库格式;介绍了KWS在Kaldi中的示例训练脚本和搜索脚本。

 
 

  1. 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进行索引分为以下几步:
  1. 为测试集(eval, evalution,评估)中每一语句的有限状态转换器(FST)转换为(如何转换?)泛化因子转换器结构。该结构中,每个词的实例都拥有一个三元组(词的开始时间,词的结束时间,后验概率)。因子转换器,隐含了测试集中所有词序列的逆序(以后验概率排序)列表。可以使用Google OpenFST对其进行进一步的处理。
  2. 要在上述因子转换器中对某个词或短语进行检索,首先构建该词的有限状态机,然后与因子转换器进行组合(如何组合?),即得到了上述词的逆序列表。
  3. 使用[20]提出的方法,通过最大化所有关键词的期望词权重值(expected term weighted value,ETWV)(是啥?),估计一个决策阈值(如何估计),用于对各个结果作出Yes/No的决策。
  4. 最后,所有关键词命中集合将通过NIST 2006 Spoken Term Detection评估协议计算实际词权重值(actual term weighted value)(如何计算)。

 
 

某个关键词在测试集中的出现次数=所有预测命中的后验概率。

 
 

  • 词典扩充对LVCSR和KWS的影响:提高发音词典词汇量,能提升1-4%的识别率,能提升KWS中实际的词加权值约60%的效果。在LVCSR阶段的词典扩充大大优于KWS阶段。

    词典扩充只能适度降低WER,但是能很大程度地提高随后的ATWV。

 
 

 
 

 
 

 
 

  1. 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]。一个因子转换器是一个组成一篇文档的字符串集合中子字符串集合的倒排索引。因子转换器是一个非常有效的顺序索引,并且十分适用于需要确切序列匹配的话语检出应用。话语段和口语词检测是两种话语应用,分别用于找到语句以及包含查询词确切序列的语句中的时间间隔。

     
     

     
     

     
     

  2. 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个阶段:

  1. 使用训练数据集(train)训练一个LVCSR;
  2. 对测试集进行分段处理;
  3. 使用LVCSR生成测试集的解码结果(Lattice);
  4. 生成Latiice的倒排索引;
  5. 进行关键词的搜索。

KWS的数据准备

需要在KWS数据目录中手工准备以下三个文件:

ecf,检索集相关信息

kwlist,关键词列表

rttm,用于KWS打分

 
 

 
 

 
 

Kaldi的关键词搜索(Keyword Search,KWS)的更多相关文章

  1. Elasticsearch 全文搜索和keyword search字段的mapping定义

    在ES5.0之前我们对于需要keyword search的字段都是这样定义的: { "field name":{ "type": "string&qu ...

  2. 搜索框中“请输入搜索keyword”

    $(function(){    $("#ctl00_txtKey").val("请输入搜索keyword").addClass("search&qu ...

  3. 读论文系列:Nearest Keyword Search in XML Documents中使用的数据结构(CT、ECT)

    Reference: [1]Y. Tao, S. Papadopoulos, C. Sheng, K. Stefanidis. Nearest Keyword Search in XML Docume ...

  4. Thinkphp+Ajax带关键词搜索列表无刷新分页实例

    Thinkphp+Ajax带关键词搜索列表无刷新分页实例,两个查询条件,分页和搜索关键字,懂的朋友还可以添加其他分页参数. 搜索#keyword和加载内容区域#ajax_lists <input ...

  5. 集束搜索beam search和贪心搜索greedy search

    贪心搜索(greedy search) 贪心搜索最为简单,直接选择每个输出的最大概率,直到出现终结符或最大句子长度. 集束搜索(beam search) 集束搜索可以认为是维特比算法的贪心形式,在维特 ...

  6. 对《禁忌搜索(Tabu Search)算法及python实现》的修改

    这个算法是在听北大人工智能mooc的时候,老师讲的一种局部搜索算法,可是举得例子不太明白.搜索网页后,发现<禁忌搜索(Tabu Search)算法及python实现>(https://bl ...

  7. 线搜索(line search)方法

    在机器学习中, 通常需要求某个函数的最值(比如最大似然中需要求的似然的最大值). 线搜索(line search)是求得一个函数\(f(x)\)的最值的两种常用迭代方法之一(另外一个是trust re ...

  8. 选择性搜索(Selective Search)

    1 概述 本文牵涉的概念是候选区域(Region Proposal ),用于物体检测算法的输入.无论是机器学习算法还是深度学习算法,候选区域都有用武之地. 2 物体检测和物体识别 物体识别是要分辨出图 ...

  9. MIP启发式求解:局部搜索 (local search)

    *本文主要记录和分享学习到的知识,算不上原创. *参考文献见链接. 本文讲述的是求解MIP问题的启发式算法. 启发式算法的目的在于短时间内获得较优解. 个人认为局部搜索(local search)几乎 ...

随机推荐

  1. Docker的脚本安装

    官方镜像支持 curl -sSL https://get.docker.com/ | sh 国内镜像站 curl -sSL https://get.daocloud.io/docker | sh cu ...

  2. JavaScript深入之词法作用域和动态作用域

    作用域 作用域是指程序源代码中定义变量的区域. 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. JavaScript 采用词法作用域,也就是静态作用域. 静态作用域与动态作用域 因 ...

  3. flask 连接MogoDB数据库

    # -*- encoding: utf-8 -*- from flask import Flask,request,jsonify,render_template #导入pymongo来连接mongo ...

  4. php中函数里面使用函数外面的变量

    一定要在函数里面声明为全局变量!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(不然会有问题,还是不报错的那种)

  5. 插入排序Java版

    package dataStructureAlgorithmReview.day01; import java.util.Arrays; /** * 插入排序 * @author shundong * ...

  6. Python对象的创建和赋值

    创建类 类的定义以关键字class开头,之后跟着一个名字(用户定义)来标识这个类,并且以冒号结尾.类的内容以缩进(4个空格)表示,如下例的pass表示什么事情也不做. Python命名规则(以字母或者 ...

  7. python 基础技巧

    多个字典合并 >>> d1 = {'name' : 'revotu', 'age' : 99} >>> d2 = {'age' : 24, 'sex' : 'mal ...

  8. Linux检查和收集硬件信息的常用命令总结

    Linux检查和收集硬件信息的常用命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux基础真的很重要,基础不牢,地动山摇.这句话我是听老男孩创始人冉总说的一句话,起初 ...

  9. Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码

    Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...

  10. Python中表达式与语句

    简述 Python中我暂时并未发现谁对着两个名词的明确定义:我对这两个名词的理解就是,表达式就是你想要执行的对象,语句就是你的具体执行操作. 这里应用慕课网老师的一段话,摘自网上"表达式(E ...