2017年6月27日,美国权威科技杂志《MIT科技评论》公布了当年全球最聪明50家公司榜单,中国科大讯飞公司位列中国第一、全球第六。排名其后的公司分别为英伟达、SpaceX、亚马逊、23andMe和Alphabet。《MIT科技评论》指出,科大讯飞的语音助手是中国版的Siri,其翻译设备能够在多种方言、俚语和嘈杂环境中实现精准的汉语到十余种语言的翻译。科大讯飞在中国语音市场的份额高达70%。越来越多的人认为,语音识别将成为下一代交互革命的关键技术。
尽管人们已经习惯了在特定情况下使用语音助手,如通过Siri或Cortana安排日常事务或回复消息,但大多数情况下,语音助手的使用率并不高。据Creative Strategies的研究显示,62%的安卓用户从未使用过语音助手,苹果用户中的这一比例更是高达70%。那么,问题在于语音识别技术不够先进,还是人们不需要语音助手呢?Amazon Echo的成功或许能提供一些答案。
Amazon Echo是亚马逊公司在2014年11月推出的一款家庭语音助手,具备包括购物、智能家居控制、阅读Kindle、预约Uber、追踪包裹、订购比萨、计时、算术、播放音乐、寻找手机、模拟雨声等功能。一经推出,Amazon Echo便迅速受到市场欢迎。据统计,2015年Amazon Echo的销量约为170万台,2016年增长至650万台,截至2017年1月,全球销量已突破700万台,预计2017年将超过1100万台。据eMarketer报告,在美国智能音箱市场,Amazon Echo占据了超过70%的市场份额。
同样是语音助手,为何Amazon Echo的表现远胜于Siri?研究者认为,这主要是因为两种产品使用的环境不同。在公共场合,人们不太愿意对着手机说话,这不仅缺乏隐私,也会让人感到尴尬。而在家中,面对家人和朋友,这种情况可以得到有效避免。此外,安静的环境有助于提高语音识别的精度和速度,因此Amazon Echo成功切入市场。不过,其他科技巨头也不甘落后,纷纷推出自家的家庭智能语音助手:苹果推出了HomePod,谷歌也推出了Google Home。看来,一场语音大战即将来临。
语音识别是指将一段语音信号转换成相应的文本信息。系统主要包括特征提取、声学模型、语言模型以及字典与解码四个部分。为了更有效地提取特征,通常需要对采集到的声音信号进行滤波、分帧等预处理工作,以提取出能够表征语音信号本质特征的参数。接下来,特征提取将声音信号从时域转换到频域,为声学模型提供合适的特征向量。声学模型根据声学特性计算每个特征向量在声学特征上的得分。语言模型则根据语言学理论,计算该声音信号对应的可能词组序列的概率。最后,根据现有的词典,对词组序列进行解码,得到最终可能的文本表示。
语音信号的预处理过程是语音识别的基础。在最终进行模板匹配时,需要将输入语音信号的特征参数与模板库中的特征参数进行对比。因此,在预处理阶段得到能够表征语音信号本质特征的参数至关重要。首先需要对声音信号进行滤波与采样,目的是消除非人体发声频率的信号与50Hz电流频率的干扰。然后需要平滑信号的高频和低频部分的连接,使得频谱在相同的信噪比条件下得到解决。分帧加窗操作是为了将连续信号转换为短时平稳信号,便于分析。最后还需要进行端点检测,即正确判断输入语音信号的起点和终点。具体方法可以通过短时能量和短时平均过零率来进行初步判断。
在完成信号预处理后,下一步便是关键的特征提取。原始波形的识别效果较差,频域变换后的特征参数更适合识别。适用于语音识别的特征参数应满足以下几点: - 尽量描述语音的基本特征; - 减少参数之间的耦合,压缩数据; - 提高计算特征参数的效率。
目前主流的特征参数包括线性预测倒谱系数(LPCC)和Mel倒谱系数(MFCC)。两者均在倒谱域上对语音信号进行操作,LPCC利用LPC技术求倒谱系数,MFCC则模拟听觉模型,通过滤波器组模型输入声学特征,再进行离散傅里叶变换(DFT)。
基音周期指的是声带振动频率(基频)的振动周期,是语音信号的重要特征。共振峰指的是语音信号中能量集中的区域,是发音音质的主要决定因素。目前主流的特征参数包括LPCC和MFCC,它们在倒谱域上操作,前者以发声模型为基础,后者模拟听觉模型。此外,深度学习的一些方法也被应用于特征提取,取得了显著进展。
声学模型是语音识别系统中的重要组成部分,对不同基本单元的区分能力直接影响识别结果。语音识别本质上是一个模式识别的过程,而模式识别的核心是分类器和分类决策。
在孤立词和小词汇量识别中,动态时间规整(DTW)分类器通常表现良好,识别速度快,系统开销小。但在大词汇量和非特定人语音识别中,DTW的识别效果会大幅下降,这时使用隐马尔科夫模型(HMM)进行训练,效果会有明显提升。传统语音识别通常采用连续高斯混合模型(GMM)来描述形状输入密度函数,因此形成了GMM-HMM架构。
随着深度学习的发展,通过深度神经网络进行声学建模,形成了DNN-HMM架构,在语音识别中取得了很好的效果。本章将先介绍GMM-HMM的基本原理。
对于随机向量x,如果其联合概率密度函数符合公式,则称其服从高斯分布,记为x~N(μ,Σ)。其中,μ为分布的期望,Σ为分布的协方差矩阵。高斯分布具有强大的拟合能力,且计算简单,广泛应用于各领域。然而,仍有许多数据不适合单一高斯分布。这时可以使用多个高斯分布的混合模型来描述数据。高斯混合模型被广泛应用于语音识别系统的声学模型中。考虑到语音识别中向量维度较大,通常假设混合高斯分布中的协方差矩阵Σ为对角矩阵,以减少参数数量并提高计算效率。
高斯混合模型具有以下优势:首先,高斯混合模型具有强大的建模能力,只要分量总数足够多,可以任意精度逼近概率分布函数;其次,通过EM算法可以轻松使模型在训练数据上收敛。此外,人们还研究了参数绑定的GMM和子空间高斯混合模型(subspace GMM)来解决计算速度和过拟合等问题。除了使用EM算法进行最大似然估计外,还可以使用区分性误差函数训练高斯混合模型,从而显著提高系统性能。因此,在声学模型中使用深度神经网络技术之前,高斯混合模型一直是短时特征向量建模的首选。
然而,高斯混合模型也存在一个严重缺陷:对于接近向量空间上非线性流形的数据建模能力较差。例如,假设一些数据分布在球面两侧且距离球面较近。如果使用合适的分类模型,可能只需要少量参数就能区分这些数据。但使用高斯混合模型描述其实际分布情况,则需要大量高斯分布分量才能准确描述。这促使人们寻找能够更有效地应用语音信息进行分类的模型。
考虑一个离散随机序列,如果转移概率符合马尔科夫性质,即未来状态和过去状态独立,则称其为马尔科夫链。如果转移概率与时间无关,则称为齐次马尔科夫链。马尔科夫链的输入和预先定义的状态一一对应,对于任意给定的状态,输入是可观测的,没有随机性。如果对输入进行扩展,使马尔科夫链的每个状态输入为一个概率分布函数,那么马尔科夫链的状态无法直接观测,只能通过受状态变化影响的符合概率分布的其他变量来推断。这样的模型被称为隐马尔科夫模型。
在语音识别系统中,隐马尔科夫模型用于描述音素内部子状态的变化,以处理特征序列与多个语音基本单元之间的对应关系。
在语音识别任务中,需要计算模型在一段语音片段上的可能性。在训练时,需要使用Baum-Welch算法学习隐马尔科夫模型参数,进行最大似然估计(MLE)。Baum-Welch算法是EM算法的一种特例,通过前后项概率信息迭代地依次进行E步骤和M步骤的计算。
语言模型主要描述人类语言表达的习惯,重点描述词与词在排列结构上的内在联系。在语音识别解码过程中,词内转移参考发音词典,词间转移参考语言模型。好的语言模型不仅能提高解码效率,还能在一定程度上提高识别率。语言模型分为规则模型和统计模型两类,统计语言模型通过概率统计方法描述语言单位的内在统计规律,设计简单实用,效果显著,已被广泛应用于语音识别、机器翻译、情感识别等领域。
最简单且最常用的语言模型是N元语言模型(N-gram Language Model)。N元语言模型假设当前词的概率仅与前N-1个词相关。因此,词序列w1,...,wm的概率P(w1,...,wm)可以近似为: [P(w1,...,wm) approx prod{i=1}^{m} P(wi|w{i-N+1},...,w{i-1})]
为了计算每个词在给定上下文下的概率,需要一定数量的文本数据进行估算。可以通过直接计算包含上下文的词对在所有上下文词对中的比例来计算该概率,即: [P(wi|w{i-N+1},...,w_{i-1}) = frac{text{上下文词对数量}}{text{总上下文词对数量}}]
对于在文本中未出现的词对,需要使用平滑方法进行近似,如Good-Turing估计或Kneser-Ney平滑等。
解码器是识别阶段的核心组件,通过训练好的模型对语音进行解码,得到最有可能的词序列,或根据识别中间结果生成识别网格(lattice)以供后续组件处理。解码器部分的核心算法是动态规划算法Viterbi。由于解码空间非常庞大,通常在实际应用中会使用限定搜索宽度的令牌传递方法(token passing)。
传统解码器会完全动态生成解码图,如著名语音识别工具HTK(HMM Tool Kit)中的HVite和HDecode等。这样的实现内存占用较小,但考虑到各个组件的复杂性,整个系统的流程繁琐,不利于高效地将语言模型和声学模型结合起来,同时扩展性较差。目前主流的解码器实现会在一定程度上使用预生成的有限状态变换器(FST)作为预加载的静态解码图。这里可以将语言模型(G)、词汇表(L)、上下文相关信息(C)和隐马尔科夫模型(H)分别构建为标准的有限状态变换器,再通过标准的有限状态变换器操作将它们组合起来,构建一个从上下文相关音素子状态到词的变换器。这样的实现方法会增加一些内存空间,但让解码器的指令序列变得更加统一,使得构建一个高效的解码器变得更加容易。同时,可以对预先构建的有限状态变换器进行预优化,合并和剪掉不必要的部分,使搜索空间更加合理。
在过去,最流行的语音识别系统通常使用梅尔倒谱系数(MFCC)或相对频谱变换-感知线性预测(RASTA-PLP)作为特征向量,使用高斯混合模型-隐马尔科夫模型(GMM-HMM)作为声学模型,通过最大似然准则和期望最大化算法训练这些模型。
早在上世纪八十年代,就有研究者在语音识别中使用神经网络作为分类器。但由于当时计算机的计算能力有限、语音数据稀缺以及对语音基本单元建模的选择等因素,神经网络分类器并未成为主流,效果也不如使用高斯混合模型。但随着新世纪人们对神经网络的重新认识,深度学习的浪潮再次席卷语音界,人们纷纷转向研究深度神经网络在语音识别中的应用。深度神经网络模型是区分性的模型,对于区分不同的基本单位的任务来说,相比需要描述完整分布的生成性模型高斯混合模型,所需参数较少,更容易获得好的效果。
随着深度学习的兴起,诸如人工神经网络(ANN)、卷积神经网络(CNN)以及反向传播(BP)等重要概念已经广为人知。在此不再赘述。
在传统HMM-GMM系统中使用神经网络的一种简单方法是利用神经网络进行特征学习。这样的方法无需修改现有的语音识别框架,可以在不大改动系统的情况下提高系统性能。
传统的语音特征提取算法(如MFCC或PLP)提取的特征仅对单帧信号有效,不能很好地涵盖有效语音信息,也容易受到噪声污染。对于语音的特征学习和语音识别而言,这一目标可以归结为对原始频谱特征的使用或对波形特征的使用。在过去30年中,尽管对语音频谱进行了变换,丢失了部分原始语音数据的信息,但多种“手工制作”的特征促进了GMM-HMM系统识别率的巨大提升。其中最成功的是非自适应的余弦变换,它促进了MFCC特征的产生。余弦变换近似地去除了特征成分之间的相关性,这对使用对角协方差阵的GMM来说非常重要。然而,当深度学习模型替代GMM模型后,去除特征之间的相关性变得不那么重要。
在应用DNN进行特征提取时,存在两种常见的思路:第一种是瓶颈(bottleneck)特征。我们需要构造一个瓶颈形状的神经网络,即其中有一个隐藏层的维度比其他隐藏层的维度相对小得多。接下来,我们可以使用自动编码器(auto encoder)对网络进行无监督训练,也可以令网络的输入目标为形状后验概率,通过BP算法进行有监督训练。训练完成后,将瓶颈后面的网络结构删去,取此时网络的输入为特征。这样获得的BN特征可以被认为是一种非线性的特征变换和降维技术。在构建HMM-GMM声学模型时,我们通常将BN特征与传统短时特征如MFCC等拼接在一起,共同作为HMM-GMM模型的输入进行学习。工作中使用经过预训练的深度神经网络替代传统BN特征中经常使用的浅层网络,结合区分性训练的方法使系统的性能得到了大幅度的提升。另一种特征学习方法为使用串联(tandem)特征。在工作中,串联特征首先使用神经网络分类器估算音素的后验概率,然后将网络输入的向量通过PCA进行正交化作为HMM-GMM系统输入的特征。这样的串联方法比直接使用神经网络混合模型和标准GMM模型的效果都要好。而Sivadas等人在串联特征中使用了层次化的结构,将原来单一的神经网络交换为多个神经网络,分别被训练为具有不同的功能而又层次化地组织在一起。这种方法比原有单一神经网络的参数规模少,训练时间更短,同时获得了更好的性能。
随着深度神经网络在语音识别中的作用被逐步发掘,直接采用HMM-DNN混合模型成为更好的选择。在HMM-DNN混合模型中,我们将不同状态使用的多个GMM模型通过一个深度神经网络代替。我们需要训练一个深度神经网络,训练目的是估算输入的语音帧在每一个HMM状态下的后验概率,即P(qt = s|xt)。为了正确估算不同状态的后验概率,我们通常需要先通过已有的HMM-GMM模型和标注生成训练语料的强制对齐信息(force alignment)作为网络训练的目标。而强制对齐信息的好坏很大程度上影响训练好的HMM-DNN混合模型系统性能。人们通过迭代使用新训练好的HMM-DNN混合模型生成对齐信息重新训练HMM-DNN混合模型的方式进一步提高了系统的性能。另外,我们通常会使用相邻的多个帧的特征复合而成的特征作为神经网络的输入,增强网络对相邻信息的应用能力。
目前采用深度学习结合隐马尔科夫模型的语音识别系统已经取得了较好的识别效果,如百度Deep Speech 2的短语识别的词错率降到了3.7%,微软英语语音识别词错率达到了5.9%,并且已经推向了商业应用,但目前的智能语音识别还是存在相当的提升空间。
在机器之心主办的第一届全球机器智能峰会(GMIS 2017)上,腾讯AI Lab副主任、西雅图人工智能研究室负责人俞栋发表了主题为《语音识别领域的前沿研究》的演讲,讨论分享了语音识别领域的四个前沿问题:
语音识别实际上是要将语音信号的序列转化为文字或词的序列,因此许多人认为要解决这个问题,找到一个行之有效、序列到序列的转换模型即可。
以往的大部分研究是通过对问题做假设,然后据此在语音信号序列到词序列之间构造若干个组件,将语音信号序列逐渐转换成词的序列。这些假设中的许多部分,如短时平稳假设和条件独立假设,在某些特定场合是合理的,但在很多真实的场景下是有问题的。而序列到序列直接转换的模型背后的思路是,如果我们去掉基于有问题的假设而设计的这些组件,然后以从训练数据中学到的转换模型来替换,就有可能找到更好的方法,使序列转换更准确。这样做另一个好处是整个训练过程也可以变得更简单。
在安静环境下的语音识别系统已经接近人类的水平。目前也有很多实际应用,但目前的语音识别系统在强噪声干扰情况下还很难达到实用化要求。对于人类的听觉系统则有一种“鸡尾酒会效应”,我们可以在具有背景噪声干扰的情况下,将注意力集中在某个人的说话中,而这种人类听觉系统的功能目前语音识别系统还很难实现,该问题在远场麦克风时表现得更为明显。一种可能的方法是采用麦克风阵列,同时从多个位置、多个角度捕捉声音信号来提高识别效果,但这未必是最优的解决方案,未来通过对大脑的进一步研究可能会给我们带来启示。
在语音识别领域,能否建立一个持续做预测的系统呢?这样可以根据已有识别结果不断改进下一次识别,而目前在语音识别上,普遍上还是仅仅将语音与文本简单匹配从而进行识别,对于语言中具体信息间的联系应用仍然不足。因此,如果可以建立一个更好的模型,它可以持续地进行识别。它需要的特点是什么?一是它可以非常快速地进行适应,使得下一次再进行识别时,我们可以将相似信息用更好的方式压缩在模型内部,因此在下一次可以更快地进行识别。
传统来讲,前端的信号处理技术通常只用到当前帧的语音信号信息。而机器学习方法用到很多训练器里学到的信息,但很少用到当前帧的信息,它不停止数据建模,因此有没有办法把这两种方法较好地融合在一起,这是目前很多研究组织发力的一个方向。
另外,有没有办法更好地将前端的信号处理与后端的语音识别引擎进行优化。由于前端信号处理有可能丢失信息,且在后端无法恢复。因此有没有办法做一个自动的系统,可以较好地分配这些信息的信号处理,使得前端可以较少地丢失信息,从而在后端把这些信息更好地应用起来。
http://www.52nlp.cn/%e4%b9%a6%e7%b1%8d
我爱语音识别,里面包含了各种书籍、课程等各种资源,还有交流论坛。
HTK是由剑桥大学开发的一个非常经典的语音识别工具包,全球约有10万专业用户。HTK用C语言编写,最早的代码已经有20多年的历史。HTK的一个故事是与它相关的剑桥Entropy公司曾被微软公司收购,在获得Entropy的语音团队后,微软公司将HTK的版权还给了剑桥大学,使其成为收费的开源工具。HTK的最大优点是代码和功能非常稳定,并且集成了最主流的语音识别技术;而且HTK的许多扩展包也非常经典,如最重要的统计语音合成工具包HTS。HTK的另一大优点是它有相对最完善的文档手册,即《HTK Book》。HTK的缺点之一是更新相对较慢,并且部分代码由于编写时间较长,需要一定的更新。HTK在2015年底更新了包含神经网络技术的3.5 beta版本。HTK的另一个缺点是目前缺乏易用的脚本系统,HTK附带的资源管理(RM)数据集的例子虽然涵盖了GMM-HMM、自适应、区分性训练、DNN等主要技术,但部分脚本使用tcsh编写,不方便上手。
Kaldi是由传说中发现咖啡的咖啡之神的名字命名的,希望工具包像咖啡一样容易、方便、流行。Kaldi是一个使用C++编写的面向对象的工具包,由前微软研究院的Dan Povey博士与捷克的BUT大学联合开发。值得一提的是,Dan Povey博士也是HTK的作者之一,因此Kaldi和HTK的技术思路较为相似,但经过多年发展,Kaldi集成的技术已经多于HTK。Kaldi的一大优点是用户协议较为开放,因此可以第一时间集成许多新技术。但优点和缺点往往是相伴而生的,Kaldi的一个缺点是由于贡献者较多,代码分支较多,并且有时会有不稳定或存在问题的代码更新,因此如果使用最新代码经常会遇到问题,甚至有时会出现版本前后不兼容的情况。因此,使用Kaldi较新的功能时,建议多比较几个分支。此外,Kaldi暂时缺乏完善的手册,因此入门时可以多向有经验的用户请教。
CNTK是由微软公司由俞栋博士领衔开发的新工具包,其中神经网络功能非常强大,据说优于Kaldi中许多常用的神经网络分支。CNTK的一大亮点是定位于多种任务的组合,例如机器翻译和语音识别等。但这导致CNTK并非完全专业的语音识别工具,需要配合Kaldi等工具使用。据报道,微软公司正在对CNTK进行优化和更新,未来优化后的版本有望从源代码质量和运行效率上都得到显著提升。另外,CNTK无疑是以上工具包中对Windows平台支持最好的,比较符合国内的使用习惯。
希望以上内容能为您提供有价值的参考。