【《基于深度学习语音识别中声学模型的分析与实现案例》6300字(论文)】_第1页
【《基于深度学习语音识别中声学模型的分析与实现案例》6300字(论文)】_第2页
【《基于深度学习语音识别中声学模型的分析与实现案例》6300字(论文)】_第3页
【《基于深度学习语音识别中声学模型的分析与实现案例》6300字(论文)】_第4页
【《基于深度学习语音识别中声学模型的分析与实现案例》6300字(论文)】_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于深度学习语音识别中声学模型的分析与实现案例目录TOC\o"1-3"\h\u31367基于深度学习语音识别中声学模型的分析与实现案例 12775一、声学模型建模技术 13404二、构建声学模型 17602(一)GRU-CTC模型 220320(二)DFSMN模型 721283(三)DFCNN模型 831017三、CTC中的前向后向算法 916410四、实验设计 136505(一)模型框架与数据集介绍 1314213(二)算法实现调试与分析 13456(三)实验训练与测试结果 16一、声学模型建模技术近些年,语音技术对人们的工作方式与生活方式产生了很大影响。在部分嵌入式设备中,语音属于一种主要的人机交互方式。主要是因为随着计算能力得到提升后,使用GPU等设备,获得高计算能力,于是就可实现了对更强大与更复杂的声学模型的训练,出现的部分嵌入式处理器具有高性能,有可能改变语音识别的终端应用。声学模型属于人工智能领域中的一个基本模型,以深度学习为基础的声学模型有助于推动人工智能交互方式的延伸与拓展,起到了重要作用。二、构建声学模型本次设计的实验是基于Thchs30数据集的声学模型构建,输入一段.wav语音文件,最终能够输出例如[‘sheng1’,’xue2’,’mo2’,’xing2’]的结果。本次实验构建的声学模型主要采用了GRU-CTC、DFCNN、DFSMN三种结构,其中DFCNN的效果是所有网络模型中最好的,能够取得较为不错的泛化能力。GRU-CTC模型中循环神经网络可以利用语音上下文相关的信息,得到更加准确地信息,而GUR又能选择性的保留需要的长时信息,使用双向RNN又能够充分的利用上下文信号。实验中发现,该模型的缺点在于需要完整输入一句话后才能进行识别,且训练相对CNN较慢。DFSMN模型,其前馈记忆神经网络也也解决了双向GRU的参数过多和实时性较差的缺点,它利用一个记忆模块,包含了上下几帧信息,能够得到不输于双向GRU-CTC的识别结果。该网络实质上是用一个特殊的CNN就可以取得相同的效果,实验中我将CNN的宽设置为memorysize,将高度设置为featuredim,将channel设置为hiddenunits,这样一个CNN的层就可以模仿fsmn的实现了。在使用GRU作为语音识别的时候我们会遇到以下两个问题:·一是我们常常使用双向循环神经网络才能取得更好的识别效果,这样会影响解码实时性。·二是随着网络结构复杂性增加,双向GRU的参数是相同节点数全连接层的6倍,这样会导致训练速度非常缓慢。而DFCNN建立的这种共享机制中需要使用到CNN参数,能够使得参数数量级显著降低,下降幅度多达好几个数量级,其中的池化层与卷积层属于比较深层次,可以对语言信号的信息进行全面考虑,并较快将其相应识别结果得到,获得的实时性也是较好的。(一)GRU-CTC模型一、门控循环单元GRUGRU具有很好的控制效果,属于LSTM网络中的一种,与传统的LSTM网络相比该种网络具有更为简单的结构,并且在控制效果上具有更好的表现,因此该种网络流行性比较好。由于GRU是一种LSTM网络的变体,因此该网络在解决传统网络问题方面具有很好的作用,同时还具有解决新型问题的能力。首先,本文对传统的LSTM网络进行了结构性研究,该种网络有三个门函数,分别为输出门、输入门以及遗忘门,不同的门函数控制的数值也会不同,因此在实际使用中,LSTM网络具有较为复杂的结构。而GRU模型只有两个门,分别为更新门和重置门,该整网络的结构较为简单,且运行较为可靠,具体的结构如图3-1所示。图3-1GRU模型结构从图中可以看出,GRU模型结构较为简单,运行方式较为单一,在运行过程中能够通过简单的运行结构,使整个模型可靠性得以提升。由于在整个图形中主要有更新门和重置门两个门函数,极大的降低了模型的内部结构,使该种模型能够在较为简便的空间内进行运转。另外,更新门的值越大,说明前一时刻的状态信息带入就越多。通过这一判断标准能够对GRU模型工作状态进行相应的评价。同时,重置门也能表现出一些信息的特征,例如重置门越小,则说明在前一时刻被写入的信息就越少。网络的前向传播公式如下:(3-1)(3-2)(3-3)(3-4)(3-5)其中:[]——两个向量相连;*——矩阵的乘积。GRU的训练过程:从上述公式可以看出,在进行GRU的训练过程中,需要对、、、进行学习,由于前三个向量都是由拼接而产生的,因此在进行训练时满足:(3-6)(3-7)(3-8)输入为:(3-9)输出为:(3-10)通过上述计算结果,网络中的某一时刻损失量满足:(3-11)因此每一个样品的所有时刻损失为:(3-12)采用后向误差传播法来进行网络的学习,才对损失函数的各个参数进行偏导的求解具体如下:(3-13)(3-14)(3-15)(3-16)(3-17)(3-18)(3-19)其中各中间参数为:(3-20)(3-21)(3-22)(3-23)(3-24)通过上述有关参数偏导的求解完成后,可以对网络中的参数进行更新,从而根据迭代的方式进行损失的计算。通过这样的方式,GRU能够根据门函数进行特征的计算,并最终保持重要的特征数据,并且在传播过程中不会造成数据的丢失。由于在参数的数量上少于LSTM,因此GRU在训练速度上也是优于LSTM。二、连接时序分类CTCCTC能够被用来解决输入序列和输出系列的难题,特别是在语音识别中,想要提高语音识别的效率,就必须对音频、音素和翻译字符进行一一对应,才能够更好的进行语音的翻译。在这一过程中,通过CTC能够更好的进行输入序列和输出序列问题的解决。如下图所示:图3-2输入和输出序列对应示图有人说话快,有人说话慢,每个人说话快慢不同,手动地对音素和字符对齐的方法又太耗时。考虑到LSTM的影响,则:。表示m维特征,则有如下:(3-25)(3-26)当真的一个系统中输出和输入能够一一对应时,则实际上n为输出:(3-27)(3-28)如果对英文的26个字母进行识别,则需要考虑没有字母的位置如何进行表征,例如,将一个字符加入到字符集合中:(3-29)对于LSTM而言,在进行输出维度n的表示时。27个字符必须在位置上和时间上进行一一对应。在实际计算中,根据不同的概率以及每个时间所对应的元素进行输出系列的排布,其输出空间可以记为。定义B变换,将LSTM的输出序列转换为真实输出,将连续的相同字符删除为1,删除空白字符。当T=12时:(3-30)(3-31)(3-32)(3-33)表示一种LSTM的输出序列,当我们优化LSTM时,我们只需要最大化以下概率,给定输入x,输出的概率是真实的输出。对下式取负号,就可以使用梯度下降对其求最小。(3-34)假设时间步长之间的输出独立,任何输出序列的概率计算公式如下:(3-35)其中下标表示的是,输出序列在t时间步选取的元素对应的索引,比如该序列在第一个时间步选取的元素是a,那么得到的值就是1。选取的是z,那么得到的值就是26。选取的是空白符,那么得到的值就是27。为了方便观测,也用对应的字符表示,其实是一个意思,如下式所示。(3-36)(3-37)然而,对于实际输出,例如上述state,可以通过B转换来获得多个LSTM输出序列。所有这些序列都是我们想要的结果,我们想要给定的输出序列的概率。时间复杂度是指数级的,因为有T个位置,每个位置都有n个选择(字符集的大小),那么就有种可能。因此CTC借用了HMM中的“前向-后向算法”(forward-backwardalgorithm)来计算。HMM中的“前向-后向算法”这里就不再做赘述。(二)DFSMN模型Deep-FSMN(DFSMN)网络是阿里巴巴开源的一项语言识别模型,以基于BLSTM的统计参数语音合成系统为基线系统,采用跳转连接技术,由于该整技术被广泛的使用,因此该技术具有一定的成熟度。在执行反向传播算法时,梯度可以绕过非线性变换,与业内使用最广泛的LSTM模型相比,它具有更快的训练速度和更高的识别精度。DFSMN网络模型结构框图如下:图3-3DFSMN网络模型结构在图中,从输入层到输出层,经历了诸多计算模块。在这些计算模块中进行储存和跳转,不断地对数据进行计算和积累,最终把数据储存到高级的储存模块,通过这样的数据训练,能够很好的将高级储存模块与低级储存模块之间进行记忆模块的互换,加强了客服网络深度梯度消失的问题,极大地促进了深度网络能够在稳定的状态下进行训练。记忆模块中引入了步幅因子,具体计算公式如下:(3-38)对于实时语音识别系统,可以通过灵活地设置未来的阶数来控制模型的延迟。在极端情况下,每一个记忆模块都能对未来结束进行设置,并以0作为最普遍的设置方式,可以通过无延迟的方式进行声音的模仿。在这一过程中,完成某些任务能够降低延迟对任务完成的影响,从而设置一个更小的未来阶数。DFSMN是在CFSMN的基础上改进的,相对于CFSMN,DFSMN通过跳转连接可以训练很深的网络。对于原来的CFSMN,由于每个隐层已经通过矩阵的低秩分解拆分成了两层的结构,这样对于一个包含4层CFSMN层以及两个DNN层的网络,总共包含的层数将达到13层,从而采用更多的CFSMN层,会使得层数更多而使得训练出现梯度消失问题,导致训练的不稳定性。DFSMN通过跳转连接避免了深层网络的梯度消失问题,使得训练深层的网络变得稳定。因此DFSMN在实验可以训练到数十层,并且相比于CFSMN可以获得显著的性能提升。(三)DFCNN模型自2016年以来,科大讯飞提出了一种称为深度全序列卷积神经网络(DFCNN)的语音识别框架,这是一种前馈序列记忆网络的新框架,能够更好的对语音进行识别,同时在未来还有较大的发展空间。DFCNN的结构如下图所示,它不仅输入频谱信号,而且直接将语音转换为图像作为输入,通过这样的声音传输方式,根据傅立叶变换将语音信号转化成图片信号后,再将图片信号进行二维的传播,最终通过卷积层和池化层对整个语音进行建模分析。同时对于语音中的音节以及汉字进行一一对应,从而完成语音的识别。图3-4DFCNN模型结构从图3-4可以看出,与其他以传统语音特征为输入的语音识别框架相比,DFCNN具有自然的优势,可以解决传统语音特征必须采用非常大的帧位移来考虑计算复杂度的问题。因此,导致了时域上的信息丢失问题。DFCNN不同于CNN的传统语音识别实践,它利用了图像识别中的最佳网络配置。每个卷积层都使用一个3x3的小卷积核,并在多个卷积层后添加一个池化层,这大大提高了CNN的表达能力。DFCNN可以看到很长的历史和未来的信息,这确保了DFCNN可以很好地表达语音的长期相关性。DFCNN还可以与最近的热CTC方案完美结合,实现整个模型的端到端训练,池化层等特殊结构可以使端到端训练更加稳定。三、CTC中的前向后向算法语音识别中,真实输出是一个序列,序列可以通过一个路径图中的一条路径来表示,我们也称输出序列为路径。定义路径为“在路径每两个元素之间以及头尾插入空白符”,如:(3-39)(3-40)对某个时间步的某个字符求导,恰好是与概率相关的路径。(3-41)以第二部分中连接时序ctc介绍中为例子,画出两条路径,如下图所示。图3-5路径图我们知道,四条路径都在时经过了字符a,观察4条路径,可以得到如下式子:(3-42)(3-43)(3-44)(3-45)(3-46)令:(3-47)(3-48)那么可以做如下表示:(3-49)上述的forward和backward只包含了4条路径,如果推广一下forward和backward的含义,考虑所有路径,可做如下表示:(3-50)定义forward为,可以得到以下初始条件:(3-51)(3-52)(3-53)图3-6路径图从上图中可以看出,如果t=6时字符是a,那么t=5时只能是字符a,t,空白符三选一,否则经过B变换后无法得到state。可以得到以下递推关系:(3-54)更一般地,可以得到如下递推关系:(3-55)定义backward为,则式子定义如下:

(3-56)t=T时,符号只能是空白符或,可以得到以下初始条件:(3-57)(3-58)(3-59)同理,可以得到如下递推关系:(3-60)根据forward和backward的式子定义,它们相乘可以得到:(3-61)又因为对求导时,只跟那些的路径有关,那么求导时可以简写如下式子;(3-62)结合两式,得到:(3-63)最终得到求导式:(3-64)求导式里的forward和backward可以用前面的dp递推式计算出来。推导出LSTM输出y,然后根据y对LSTM中的权重参数进行w链定,因此可以用梯度下降的方法来更新参数。四、实验设计本文在进行模型的建立时,通过卷积网络进行模型的结构原理学习,利用cnn+dnn+ctc搭建一个完整的端到端声学模型。本实验使用python版本为3.6.0,tensorflow版本为1.12.0,keras版本为2.2.4。(一)模型框架与数据集介绍1.TensorFlowTensorFlow[16]是一个由GoogleBrain的研究人员和工程师团队开发的开源软件库,通常用于机器学习和深度神经网络,由于其计算框架的通用性和可扩展性,TensorFlow在其他计算领域也被广泛地应用。2.thchs30数据集THCHS30是由清华大学语音与语言技术中心(CSLT)发布的一个开放的中文语音数据库,可用于中文语音识别系统的开发。该数据集的语音数据可以在一个安静的办公室环境中使用30多个小时。采样频率为16kHz,采样大小为16bits。这个数据集包括以下内容:数据集音频时长(h:mm)句子数词数train25:0010000198252dev2:1489317743test6:1589349085为了构建一个中文ASR系统,使用THCHS-30发布了一些额外的资源。这些资源主要包含了汉语的诸多训练方法和模型,能够更好的帮助中文模型的建立。实验中采用的是data_thchs30.tgz[6.4G](speechdataandtranscripts)数据集。(二)算法实现调试与分析本章节实验,利用thchs30为例建立一个完整的端到端声学模型,采用cnn+dnn+ctc的声学模型结构。1.特征提取·读取音频文件本章节实验的输入为音频数据,需要转化为频谱图数据,然后通过CNN处理图片的能力进行识别。通过“filepath=test.wav”“fs,wavsignal=wav.read(filepath)”读取音频。·构造汉明窗语音信号是一个非常不平稳的信号,在进行语音信号的识别是由于发声器官会受到各种因素的影响,并且每次的震动以及发出的频率都会有所改变。因此,在对语音信号进行识别时,要设置相应的声音变化区间才能够更好的对语音信号进行识别。由于计算机只能处理有限长度的信号,因此原始的语音信号都需要以T,即采样时间来进行截断,成为XT(t)后再进一步处理,而这一步一般选择加汉明窗的形式,汉明窗为非矩形框,这是由于直接对信号加矩形框来进行截断会产生频谱泄露,而汉明窗的幅频特性是旁瓣衰减较大,主瓣峰值与第一个旁瓣峰值衰减可以达到43db,这样一来就可以改善频谱泄露的情况。汉明窗的函数为:∗W这里的α取0.54。代码表示为“x=np.linspace(0,400-1,400,dtype=64)”“w=0.54-0.46*np.cos(2*np.pi*(x)/(400-1))”·数据分帧设置帧长为25ms,帧移为10ms。则令采样点(s)为fs,采样点(ms)为fs/1000,采样点(帧)=fs/1000*帧长。则“time_window=25”“window_length=fs//1000*time_window”·分帧加窗 分帧部分:设定p_begin=0,则p_end=p_begin+window_length,frame=wavsignal[p_begin:p_end]。 加窗部分:“frame=frame*w” ·傅里叶变换 傅里叶变换是将一个信号波形分为多个不同频率的余弦波形,成为频率分量。每个频率的余弦波形都有其对应的频率、幅值、相位。如下图所示,黑色的是原信号波形,其他颜色的均为频率分量,直线代表该频率分量幅值为0。图3-7信号波形 对时域信息frame进行快速傅里叶变换,转换成频域信息。就此,我们已经完成音频文件的时频信息提取。2.数据处理·从链接/18/下载得到thchs30数据集文件。·生成音频文件和标签文件列表考虑到神经网络训练过程中的输入输出,因此batch_size内数据需要统一数据的shape。格式为“[batch_size,time_step,feature_dim]”。由于输入的每一个sample可能存在时间轴都不一样长的情况,所以需要对时间轴进行处理,选择batch内最长的那个时间为基准,对其他时间轴tensor进行padding操作。这样一个batch内的数据都相同,就可以进行并行训练。定义一个source_get函数,回去音频文件及标注文件列表,形如:“E:\Data\thchs30\data_thchs30\data\A11_0.wav.trn”。同时需要保证相同id对应的音频文件和标签文件相同。·标签数据处理read_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论