当前位置: 首页 > news >正文

声学模型(语音识别中的)--学习笔记

  1. 前置知识:
    1. 语音识别:
      1. 系统主要有四部分组成:信号处理和特征提取、声学模型、语言模型(Language Model, LM)和解码器(Decoder)。
      2. 信号处理和特征提取部分以音频信号为输入,通过消除噪音、信道失真等对语音进行增强,将语音信号从时域转化到频域,并为后面的声学模型提取合适的特征。
      3. 声学模型将声学和发音学的知识进行整合,以特征提取模块提取的特征为输入,生成声学模型得分。
      4. 语言模型估计通过重训练语料学习词之间的相互概率,来估计假设词序列的可能性,也即语言模型得分。
      5. 解码器对给定的特征向量序列和若干假设词序列计算声学模型得分和语言模型得分,将总体输出分数最高的词序列作为识别结果。
    2. 声学模型部分需要解决的问题:
      1. 特征向量序列的可变长:在学术上通常有动态时间规划(DTW)和隐马尔科夫(HMM)方法来解决。
      2. 音频信号的丰富变化性:是由说话人的各种复杂特性或者说话风格与语速、环境噪声、信道干扰、方言差异等因素引起的。
      3. 声学模型需要足够的鲁棒性来处理以上的情况。
    3. 语音识别系统整体流程:

    4.  语音识别原理:
  2. 声学模型的任务就是描述语音的物理变化规律,而语言模型则表达了自然语言包含的语言学知识。
  3. 语音帧:
    1. 考虑到语音的短时平稳特性,语音信号在前端信号处理时要进行加窗分帧的操作,识别特征都按帧来提取。
    2. 语音帧的划分:注意是有重叠部分的

  4. 分帧后的语音信号逐帧提取语音特征用于声学模型建模。    
  5. 传统的特征类型包括mfcc和fbank等,提取好的特征送至解码器,在声学模型、语言模型以及发音词典的共同指导下,找到最为匹配的词序列作为识别结果输出
  6. 声学模型主要描述发音模型下特征的似然概率;语言模型主要描述词间的连接概率;发音词典主要是完成词和音之间的转换,其中声学模型建模单元一般选择三音素模型
  7. 声学建模演进总结:
    1. 深度神经网络超强的特征学习能力大大简化了特征抽取的过程,降低了建模对于专家经验的依赖,因此建模流程逐步从之前复杂多步的流程转向了简单的端到端的建模流程,
    2. 由此带来的影响是建模单元逐步从状态、三音素模型向音节、字等较大单元演进
    3. 模型结构从经典的GMM-HMM向DNN+CTC(DNN泛指深度神经网络)转变,演进的中间态是DNN-HMM的混合模型结构。
  8. 传统的声学模型:GMM-HMM:
    1. 隐马尔可夫模型:
      1. 隐马尔可夫模型的参数通过Baum-Welch算法(在HMM上EM算法的推广)进行估计。(Baum-Welch算法:如果样本数据没有标签,则训练数据只包含观测序列O,但对应的状态I未知,则此时的隐马尔科夫模型是一个含有隐变量的概率模型)
      2. 隐马尔科夫模型主要有三部分组成:
        1. 每个状态的观察概率分布,采用GMM模型来描述状态的观察概率分布。
        2. 马尔可夫链的初始概率
        3. 转移概率矩阵:描述马尔可夫链状态间的跳转概率
        4. 隐马尔可夫模型能够描述语音信号中不平稳但有规律可学习的空间变量。具体的来说,隐马尔可夫模型具有顺序排列的马尔可夫状态,使得模型能够分段的处理短时平稳的语音特征,并以此来逼近全局非平稳的语音特征序列。
        5. 在马尔科夫链的基础上进行了扩展,用一个观测的概率分布于马尔可夫链上的每个状态进行对应,引入双重随机性,使得马尔可夫链不能被直接观察,故称为隐马尔可夫模型。
      3. HMM建模框架:

    2. GMM模型只要混合的高斯分布数目足够多,GMM可以拟合任意精度的概率分布。
    3. 补充EM算法:EM的基本思想是先将参数的初设估计值加入到似然函数中,然后对似然函数进行极大化(一般是求导,令其等于0),得到新的参数估计值,一直重复,直到收敛。
    4. 流程:
      1.  得到混合高斯模型的形式后,使用最大期望值算法EM估计GMM的一系列参数(可以使其在训练数据上生成语音观察特征的概率最大化)
      2. HMM模型对时序信息进行建模,在给定HMM的一个状态后,GMM对属于该状态的语音特征向量的概率分布进行建模。
  9. 加入深度学习模型:

    1. CD-DNN-HMM:

      1. DNN模型展现出了明显超越GMM模型的性能,替代了GMM进行HMM状态建模。

      2. 为了获得更好的性能提升,引入了上下文信息(也即前后特征帧信息),所以被称为CD-DNN-HMM(Context-Dependent DNN-HMM)模型。

      3. DNN模型是有一个有很多隐层的多层感知机

      4. 在语音识别上应用的DNN模型一般采用softmax将模型输出向量进行归一化

      5. 相比于GMM模型,DNN模型具有一些明显的优势:

        1. DNN是一种判别模型,自身便带有区分性,可以更好区分标注类别;

        2. DNN在大数据上有非常优异的表现,伴随着数据量的不断增加,GMM模型在2000小时左右便会出现性能的饱和,而DNN模型在数据量增加到1万小时以上时还能有性能的提升;

        3. DNN模型有更强的对环境噪声的鲁棒性,通过加噪训练等方式,DNN模型在复杂环境下的识别性能甚至可以超过使用语音增强算法处理的GMM模型。

        4. DNN-HMM建模框架中,输入特征使用了在当前帧左右拼帧的方式来实现模型对时序信号长时相关性的建模,模型输出则保持了GMM-HMM经常使用的trihone共享状态(senone)

      6. DNN-HMM混合建模框架:

    2. 语音的协同发音现象说明声学模型需要考虑到语音帧之间的长时相关性,尽管上文中DNN-HMM通过拼帧的方式对上下文信息进行了建模,但是毕竟拼接的帧数有限,建模能力不强,因此引入了RNN(循环神经网络)增强了长时建模的能力,RNN隐层的输入除了接收前一个隐层的输出之外,还接收前一时刻的隐层输出作为当前输入,通过RNN的隐层的循环反馈,保留了长时的历史信息,大大增强了模型的记忆能力,语音的时序特性通过RNN也得到了很好的描述。但是RNN的简单结构在模型训练进行BPTT(Backpropagation Through Time)时很容易引起梯度消失/爆炸等问题,因此在RNN的基础上引入了LSTM(长短时记忆模型),LSTM是一种特殊的RNN,通过Cell以及三个门控神经元的特殊结构对长时信息进行建模,解决了RNN出现的梯度问题,实践也证明了LSTM的长时建模能力优于普通RNN。
    3. 上述的建模技术在模型训练时需要满足一个条件,就是训练数据中每一帧都要预先确定对应的标注,即对应DNN输出状态的序号,训练特征序列和标注特征序列必须是等长的,而为了得到标注,需要使用已有模型对训练数据序列和标注序列进行强制对齐,但是基于大数据训练时标注的准备比较耗费时间,同时对齐使用的模型精度往往存在偏差,训练中使用的标注会存在错误。
    4. 因此引入了CTC(Connectionist Temporal Classification)准则:解决了标注序列与特征序列不等长的问题,通过前向后向算法自动学习语音特征中的模型边界,这种准则与用于时序建模的神经网络(如LSTM)的结合可以直接用于端到端的模型建模CTC准则引入了blank类别,用于吸收发音单元内部的混淆性,更加突出模型与其他模型之间的差异性,因此CTC具有非常明显的尖峰效果
    5.  FFDNN建模流程:

  10. 高效地使用数据:数据筛选层面:使用无监督、弱监督、半监督的数据进行训练,同时更高效的挑选数据进行标注,知音引擎已经在使用主动学习的方法进行数据的筛选。

相关文章:

  • Python采集《惊奇先生》, 下载你想看的高质量漫画
  • rust的所有权与引用
  • 大前端CPU优化技术--NEON intrinsics进阶
  • 【每日一读】Policy-GNN: Aggregation Optimization for Graph Neural Networks
  • 每日三题 9.26
  • 第1章Python语言基础-1.4循环结构(一)
  • LeetCode - 解题笔记 -202- Happy Number
  • vue3组件通信实例
  • LeetCode刷题第4周小结
  • python自动化测试——unittest二次开发之自定义测试用例执行器和测试结果记录器(二)
  • fastapi访问/docs接口,页面空白
  • 《Python 计算机视觉编程》学习笔记(二)
  • 【Vue】MVVM模型,vue中的data、methods属性
  • 经典面试题-如何将字符串转化为整型
  • 【Python练习】task-08 综合练习
  • 【译】JS基础算法脚本:字符串结尾
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • emacs初体验
  • If…else
  • oldjun 检测网站的经验
  • Redis 懒删除(lazy free)简史
  • 阿里云前端周刊 - 第 26 期
  • 从零开始学习部署
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 爬虫模拟登陆 SegmentFault
  • 前端存储 - localStorage
  • 深度学习在携程攻略社区的应用
  • 什么是Javascript函数节流?
  • 延迟脚本的方式
  • 一道闭包题引发的思考
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #if 1...#endif
  • #传输# #传输数据判断#
  • (06)金属布线——为半导体注入生命的连接
  • (C语言)字符分类函数
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)scrum常见工具列表
  • (转)大型网站的系统架构
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .NET CLR Hosting 简介
  • .NET DataGridView数据绑定说明
  • .net mvc 获取url中controller和action
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET处理HTTP请求