• 语音识别笔记


    一、语音识别的基础概念

    1. 什么是声学模型?

    声学模型其实就是可以识别单个音素的模型(例如:音素a的模型可以判定一小段语音是否是a);

    2. 什么是语言模型

    语言模型表示一个个词串(如果结合了词典,就可以成为一个个音素串)它们在语料库中出现的概率大小(比如,不合语法的词串(句子)概率接近0,很合乎语法的词串概率大);

    3. 什么是解码器

    解码器就是基于Viterbi算法在HMM模型上搜索生成给定观测值序列(待识别语音的声学特征)概率最大的HMM状态序列,再由HMM状态序列获取对应的词序列,得到结果结果。
    如果你只做单个音素识别,(语音很短,内容只是音素),那么只用声学模型就可以做到,不用语言模型。做法就是在每个音素的声学模型上使用解码器做解码(简单的Viterbi算法即可)。
    但是,通常是要识别一个比较长的语音,这段语音中包含了很多词。这就需要把所有可能的词串,结合词典展开为音素串,再跟音素的声学模型结合,可以得到解码图(实际上可以看成很多很多HMM模型连接而成),然后在这个解码图上实施Viterbi算法,得到最佳序列,进而得到识别结果。

    4. 什么是音素

    音素:单词的发音由音素构成。对英语,一种常用的音素集是卡内基梅隆大学的一套由39个音素构成的音素集,参见The CMU Pronouncing Dictionary。汉语一般直接用全部声母和韵母作为音素集,另外汉语识别还分有调无调,不详述。

    5. 什么是状态

    状态:这里理解成比音素更细致的语音单位就行啦。通常把一个音素划分成3个状态。

    6. 声学模型如何训练:

    1.数据准备:音频以及对应标注
    2.先对数据进行强对齐,去除一些音频和对应标注完全不符的情况,这里需要准备发音词典和音素等资源文件

    7. htk和kaldi有什么异同

    htk的擅长点是在hmm建模方面,kaldi不但具有此功能,而且还能在深度学习方面直接开展实验

    二、在评估语音识别结果时,发现字正确率与错误率互相矛盾,如何抉择

    在这里插入图片描述
    A版本Wer高于B版本0.3,但是Corr却又比B版本高0.5,这是为啥?
    这主要是因为Corr=1-Sub-Del,而Wer=Sub+Del+Ins
    因此一般以WER为主

    三、节选自《对话|俞栋:在人工智能的很多应用场景,语音识别是一个入口》

    在这里插入图片描述

    四、语音识别的声学数据16k采样率,2万小时,大约占用硬盘1T大小

    五、语音识别的应用场景

    • 智能检测(又名智能质检或智能审核,主要内容是检测语音内容是否合规或合法)
    • 智能客服(主要目的是降低人工客服的成本)
    • 智能控制(在智能车载场景控制汽车的音乐地图等等、在智能家居场景控制家电的启动关闭等等)
    • 语音输入法

    六、个性化语音识别

    1. 在正向测试集上应增大class模型系数,在反向测试集上应尽可能减小class模型系数
    2. 使用模糊音激励有利于提升解码器激励的召回率,但是激励精确率会降低,也就是说,会导致一些误激励。

    七、语音识别的解码器所生成的lattice,如何以可视化的方式展现出来

    答案是:graphviz

    八、端到端语音识别笔记

    1. 端到端语音识别的输入与输出是什么

    输入:目前端到端语音识别常用的输入特征为 fbank。fbank 特征的处理过程为对一段语音信号进行预加重、分帧、加窗、短时傅里叶变换(STFT)、mel 滤波、去均值等。一个 fbank 向量对应往往对应10ms的语音,而一段十秒的语音,即可得到大约1000个 fbank 的向量描述该语音。除了 fbank,MFCC 以及 raw waveform 在一些论文中也被当做输入特征,但主流的方法仍然采用 fbank。

    输出:端到端的输出可以是字母、子词(subword)、词等等。目前以子词当做输出比较流行,和 NLP 类似,一般用 sentence piece 等工具将文本进行切分。

    2. 端到端语音识别技术和混合系统的差异是什么

    端到端语音识别技术将声学特征序列直接转换成字符或词语序列,其中的转换工作仅仅由一个神经网络模型完成。下图对比了端到端语音识别技术和传统语音识别技术识别流程之间的差异。
    在这里插入图片描述
    在传统的语音识别技术中,实现声学特征到文本的转换相对复杂很多。在传统的语音识别系统中也存在一个神经网络模型。虽然它的输入也是声学特征,但它的输出代表的是比字符或者词语更加细粒度的语音单位(比如,音素的状态)。解码器无法单独使用神经网络的输出进行解码,还需要结合由隐马尔科夫模型(HMM),发音词典和语言模型构成的解码图才能解码得到识别结果。其中,HMM实现对音素的建模;发音词典包含了所有词语的发音,每个发音由多个音素表示;语言模型则对词语之间连接的概率进行建模。

    3. 端到端语音识别技术相比混合系统的优势是哪些

    1. 建模单元是基于字,更能适应不同的口音语调
    2. 能结合语音合成的原始文本作为上文
    3. 更容易在轻量级的设备端上部署
    4. 训练耗时更短,更有利于快速迭代

    4. 端到端语音识别工具,推荐使用wenet

    如果追求实时率,可能还是kaldi更猛些

    5. 语音识别流程

    语音识别的主要任务在于从语音到文本 其处理流程主要分为三个部分:

    特征提取:将语音信号转化为特征向量,代表有mfcc和i-vector
    声学模型:衡量语音特征和文本之间的距离,判断该语音听起来像什么
    语言模型:结合先验知识对声学模型的识别结果进行评价,判断识别结果像不像人话
    其中声学模型是研究的主体

    根据原理,声学模型可分为三个框架:HMM、CTC和LAS

    6. HMM+GMM

    HMM+GMM是传统语音识别的核心,至今仍有深远影响 在使用HMM+GMM进行声学模型的解码之前,要做三件事:

    1. 将语音信号转化为特征帧序列
      语音信号的会以10ms-20ms为间隔分割为若干帧,每一帧通过信号处理方法转化为特征向量
    2. 训练HMM模型
      人为对语音的状态建模,比如三音素模型,即以音素为单元进行建模,每个音素包含三个子状态 HMM模型描述了子状态间的转化概率,训练的过程就是通过数据确定这些概率的过程
    3. 训练GMM模型
      GMM模型度量语音帧和HMM模型中状态间的距离
      HMM+GMM模型的目的是求解P(x|o), 其中x是给定的语音信号,o是语音识别的结果 (传统的语音识别模型是一个生成式模型,声学模型负责求解P(x|o),语言模型负责求解P(o))
      求解过程也分为三个步骤:
      将特征帧序列和HMM状态进行对齐
      根据对齐方式,通过GMM模型计算发射概率
      根据发射概率,通过HMM模型计算特定对齐状态a下的P(x|o,a)
      对所有对齐方式的P(x|o,a)求和,就得到总的后验概率 选取P(x|o)最大的o,就得到了识别的结果
      在这里插入图片描述
      该框架主要分为3个模型:声学模型、发音模型和语言模型。其中,声学模型建模语音特征向量与音素概率之间的联系;发音模型以发音字典的形式存在,建模音素与单词之间的对应关系;语言模型对句子中单词与单词之间相互关联的概率进行建模.
      声学模型其实就是可以识别单个音素的模型(音素a的模型可以判定一小段语音是否是a);语言模型表示一个个词串(如何结合了词典,就可以成为一个个音素串)它们在语料库中出现的概率大小(比如,不合语法的词串(句子)概率接近0,很合乎语法的词串概率大);解码器就是基于Viterbi算法在HMM模型上搜索生成给定观测值序列(待识别语音的声学特征)概率最大的HMM状态序列,再由HMM状态序列获取对应的词序列,得到结果结果。如果你只做单个音素识别,(语音很短,内容只是音素),那么只用声学模型就可以做到,不用语言模型。做法就是在每个音素的声学模型上使用解码器做解码(简单的Viterbi算法即可)。但是,通常是要识别一个比较长的语音,这段语音中包含了很多词。这就需要把所有可能的词串,结合词典展开为音素串,再跟音素的声学模型结合,可以得到解码图(实际上可以看成很多很多HMM模型连接而成),然后在这个解码图上实施Viterbi算法,得到最佳序列,进而得到识别结果。

    九、影响语音识别效果的因素

    1. 说话人的普通话标准程度
    2. 说话人距离麦克风的距离远近
    3. 录音设备质量
    4. 录音环境背景噪音是否嘈杂
    5. 音频压缩存储格式
    6. 网络环境是否优良,丢包率低
    7. 最后才是:麦克风阵列、VAD、声学模型、语言模型、解码器、后处理这些真正的语音识别技术模块

    所有这些所有模块中,语言模型和后处理的问题最容易被用户发现,因为其他技术模块的问题很难被一眼就看出来,而一旦出现同音不同字,或者加标点、顺滑等后处理问题时却很容易被发现。甚至于很多其他模块出的问题,也易被误解为是语言模型和后处理的问题,这就是为何语言识别团队,往往语言模型和后处理的离职率最高的原因。
    这有点像一个人生病了,他咳嗽、流鼻涕很容易就被发现,但他得了癌症了,却很难一眼看出来。对于普通大众而言,往往只能对病的表征做出最简单的判断,在没有深入分析的条件下,无法挖掘真正的原因。
    而且有意思的是,对于普通用户,在使用这种语音识别工具的时候,也更容易发现同音不同字的问题,以及加标点等后处理的badcase,而很难去凭肉眼发现声学模型或者解码器的bug,这导致经常语言模型团队和后处理团队的人容易背锅,即使他们经过一步步查case,最后发现是声学模型或者解码器的问题,也不会得到及时的处理,因为声学模型或者解码器的修改往往比较难,很长时间才更新一次。而语言模型或者后处理却能很快更新,这种快更新不会成为一种功劳,反而会成为了一种工作上的负担,因为语音识别的badcase往往都是找语言模型或者后处理的团队及时修复。

    十、开源语音数据(Facebook开源5万小时多语言语音数据集)

    http://openslr.org/94/

    十一、参考文献:

    • https://www.zhihu.com/question/274765693
    • https://www.msra.cn/zh-cn/news/features/e2e-asr-paper-list
    • https://www.modb.pro/db/179668
    • https://www.zhihu.com/question/274765693
  • 相关阅读:
    卡那霉素(Kanamycin偶联卵清白蛋白 (KAN-OVA)
    Js 获取元素Rect信息
    85 最大矩形
    隐私计算 FATE - 多分类神经网络算法测试
    编程未来规划笔记
    SpringBoot中配置、启动Tomcat总结
    tcpdump 异常错误
    Mac上使用Charles抓包
    Postgresql数据类型-布尔类型
    洛谷P5094 MooFest G 加强版
  • 原文地址:https://blog.csdn.net/zh515858237/article/details/127770897