• Sphinx语音识别学习记录 (二)自然语言处理原理研究


    CMUSphinx系列目录
    http://www.cnblogs.com/yin52133/archive/2012/06/21/2557219.html - (一)基本运行测试
    
    http://www.cnblogs.com/yin52133/archive/2012/07/12/2587282.html - (二)自然语言处理原理研究
    
    http://www.cnblogs.com/yin52133/archive/2012/07/12/2587419.html - (三)小范围语音英文识别
    
    http://www.cnblogs.com/yin52133/archive/2012/07/12/2588201.html - (四)小范围语音中文识别
    
    http://www.cnblogs.com/yin52133/archive/2012/06/22/2558806.html - (五)错误调试
    
    http://www.cnblogs.com/yin52133/archive/2012/07/12/2588418.html - (六)我的目标和几个想像的方案(闲置中)

    这几天忙完了一阵子,打算继续研究下语音识别

    文中都是根据自己的简单测试得到的结论,可能有很多错误,发现问题,欢迎一起讨论

    先说一下一般的语音识别流程;以下内容很多都是看自吴军博士的《数学之美》这本书

    sphinx语音识别其实是基于统计语言模型的
    它主要靠language model(lm),Hidden Markov Model(hmm)模型识别语音。

    其中lm模型是统计语料得到的模型,语料就是用于训练的文本库,Dic里面保存的就是训练用的语料库里出现过的语料和对应的发音
    而lm模型里存的是语料的组合概率,
    先设p(w1)是word w1在文章中出现的概率

    //很显然有数据的情况下这个很好统计,遍历就行了

    P(w1,w2)w1.w2是连续出现的概率
    P(w2|w1)是已知W1已出现的情况下w2

    假设识别sentence的概率用P(S)表示

    P(S)=P(w1,w2,...wn) 表示单词集w1,w2,。。。wn连续出现并生成S的概率

    使用条件概率公式S 把整个公式替换成

    P(sentence) = P(w1)*P(w2|w1)*P(w3|w2)。。。P(wn|w1,w2.。。wn-1)

    再用马尔科夫假设精简成

    P(sentence) = P(w1)*P(w2|w1)*P(w3|w2)。。。P(wn|wn-1)的问题

    P(wi|wi-1) = P(wi-1,wi) / P(wi)

    然后P(wi,|wi-1)和p(wi)都可以从语料统计出来

    最终就能得到P(sentence)。而lm模型存储的就是这些p(wi-1,wi)这些概率统计值

    实际识别就是算出Max{P(sentence)}的过程

    然后是hmm 隐马尔科夫模型
    这个模型先不说具体原理,你就知道是声音信号到文字之间映射统计表
    因为同样发音下可能也有很多类似的单词,这时候就靠声音的组合来判断识别的颗粒度和识别了。
    用hmm识别的时候肯定会调用lm模型,因为最终的识别就是声音道文字,先靠hmm模型的统计值计算出最可能出现的一些集合,
    再根据lm模型在这些集合之间计算出概率最高的集合,而那个集合就是输出的语句了。

    有兴趣的可以去看《数学之美》或者其他相关书籍

    然后再回到pocketSphinx上,我们可以知道识别一条语音至少需要

    *.dic *.lm(或者*.DMP) 还有hmm模型

    其中 *.dic是整个语料库,包含了改系统能支持的所有单词和对应的发音

    *.lm就是统计语言模型

    hmm是隐马尔科夫模型、信号到实际数据的识别  这先不要管

    我认为的识别流程应该是这样的

    hmm依赖lm和dic

    lm和dic是靠txt生成的

    然后hmm对我们录制的音频流,再使用dic和lm识别

    而训练需要的分别是wav和语料库

     大量的wav用于使系统更准确的弄出
    实际音频到理论音频数据的(也就是训练hmm)

    而大量的语料库是用于训练lm
    建立统计模型(训练语言模型) 

    举个例子

    整句和单词举个例子就是

    dic里面

    open 发音
    
    close 发音
    
    door 发音
    
    button 发音

    这样的话

    识别单词是

    识别出来close;door;button;open什么的就靠dic发音映射表,对照判断

    而你要识别连续的单词、如open door ,close button就需要靠大量数据或者手动的修改语言模型

    还是open close door button这例子

    你在lm里把句首 open close 出现的概率提高(接近100%)

    然后 door button在句首出现的概率降低到 (接近 0%)

    然后在第二个位置的概率弄反

    这样的话、他的语法结构就能接近 (open|close) (door|button)

    这种形式,可以变相提高整句的识别能力

    就是说一句话一个语音流输入它的库可能会把它分离成小的单词流

    采样后和语音库(*.dic)匹配

    然后第一个有几个备选,再给这些备选+第二个(第二个又是概率里面拿)

    得到模糊的串经过语言统计模型然后返回总体可能性最大的。

    所以我们最关键就是准确的单词发音映射表还有统计语言模型(*.lm)

    而统计语言模型这需要大量的样例数据获得更为准确的概率,也能进一步获取更为准确的结果

    文章出处:http://www.cnblogs.com/yin52133/ 本文可自行转载,但转载时记得给出原文链接
  • 相关阅读:
    alkhaser学习笔记(一)Anti Debug
    8086 汇编指令手册查询(转)
    QueryUserAPC Ring3下 APC注入
    内存分配(malloc,new,VirtualAlloc,HeapAlloc,GlobalAlloc,LocalAlloc)区别与注意
    error C2220: 警告被视为错误 没有生成“object”文件 (转)
    消息队列
    分页存储过程(对有主键的表效率极高)
    asp.net vs2010 设计报表rdlc时,未能加载文件或程序集
    【翻译】创建ViewState特征的自动ViewState属性
    中英文字符的截取
  • 原文地址:https://www.cnblogs.com/yin52133/p/2587282.html
Copyright © 2020-2023  润新知