语音识别第三步:了解语音识别的相关背景

1.语音识别的发展历史
作为智能计算机研究的主导方向和人机语音通信的关键技术,语音识别技术一直受到各国科学界的广泛关注。以语音识别开发出的产品应用领域非常广泛,有声控电话交换、语音拨号系统、信息网络查询、家庭服务、宾馆服务、旅行社服务系统、订票系统、声控智能玩具、医疗服务、银行服务、股票查询服务、计算机控制、工业控制、语音通信系统、军事监听、信息检索、应急服务、翻译系统等,几乎深入到社会的每个行业、每个方面,其应用和经济社会效益前景非常广泛。因此语音识别技术既是国际竞争的一项重要技术,也是每一个国家经济发展不可缺少的重要技术支撑。研究语音识别,开发相应的产品有着广泛的社会意义和经济意义。
语音识别中的说话人辨认的研究始于20世纪30年代。早期的工作主要集中在人耳听辨试验和探讨听音识别的可能性方面。Bell实验室的L.G.Kesta目视观察语谱图进行识别,提出了“声纹(Voiceprint)”的概念。Bell实验室的S.Pruzansky提出了模版匹配和概率统计方差分析的声纹识别方法,形成了声纹识别研究的一个高潮。60年代末和70年代初语音识别最重要的发展是语音信号线性预测编码(LPC)技术和动态时间规整(DTW)技术,有效地解决了语音的特征提取和时间不等长匹配问题,对特定人的语音识别十分有效。研究特点是以孤立字语音识别为主,通常把孤立字作为一个整体来建立模板。80年代,语音识别研究的重点之一是连接词语音识别,开发了各种连接词语音识别和关键词识别算法,如多级动态规划语音识别算法。另一个重要发展是语音识别算法从模板匹配技术转向基于统计模型技术。

2.语音识别研究现状
20世纪90年代后,在细化模型的设计、参数提取和优化,以及系统的自适应技术上取得了一些关键进展。语音识别技术进一步成熟,并开始向市场提供产品。由于中国的国际地位不断提高,以及在经济和市场方面所处的重要地位,汉语语音识别也越来越受到重视。IBM、Microsoft、L&H等公司相继投入到汉语语音识别系统的开发中,其投资也逐年增加。IBM开发的Viavoice和Microsoft开发的中文识别引擎代表了当前汉语语音识别的最高水平。台湾的一些大学和研究所也开发出大词汇量非特定人连续语音识别演示系统。日本也先
后在语音识别领域大展头角,还有如Philips公司开发的Speech—Media和Speech Pearl两套软件,涵盖了自然语音识别与理解的对话系统。
我国语音识别研究工作近年来发展很快,同时也从实验室逐步走向实用。从1987年开始执行863计划后,国家863《智能计算机主题》专家组为语音识别研究立项。每两年滚动一次,从1991年开始,专家组每一至二年举行一次全国性的语音识别系统测试。汉语语音识别研究已经走上组织化的道路。目前我国大词汇量连续语音识别系统的研究已经接近国外最高水平。
语音识别发展到一定阶段,世界各国都加快了语音识别引用系统的研究开发,通常连续语音是含有较完整语法信息的连续语句,最接近于人的自然讲话方式,从非连续语音到连续语音的研究面临着很多完全不同的技术难点,非连续语音的识别是一些孤立的声波片段,连续语音则面临着如何切分声波的问题。诸如此类的新问题使连续语音识别率的提高比非连续语音更加困难。
经过几十年的发展和摸索,人们终于在实验室突破了大词汇量、连续语音和非特定人这三大障碍,第一次把这三个特性一起集中于一个系统中,并以此确定了统计方法和模型在语音识别和语音处理中的主流地位。在声学识别层次,以多个说话人发音的大规模语音数据为基础,以马尔可夫链为基础的语音序列建模方法HMM(隐含马尔可夫模型)比较有效的解决了语音信号短时稳定、长时时变的特性,并且能根据一些基本建模单元构造成连续语音的句子模型,达到了比较高的建模精度和建模灵活性。
目前在语音识别研究领域非常活跃的课题为稳健语音识别、说话人自适应技术、大词汇量关键词识别算法、语音识别的可信度评测算法、基于类的语言模型和自适应语言模型,以及深层次的自然语音的理解。研究的方向也越来越侧重于口语对话系统。

3. 语音识别系统的分类
语音识别是近年来十分活跃的一个研究领域。在不远的将来,语音识别技术有可能作为一种重要的人机交互手段,辅助甚至取代传统的键盘、鼠标等输入设备,在个人计算机上进行文字录入和操作控制。本文介绍了语音识别的基本流程、所用到的语音参数算法、语音识别的训练算法和识别算法做初步的探究,主要运用了特定人孤立词识别的DTW算法和非特定人识别的连续HMM算法的Matlab识别系统。
语音识别按说话人的讲话方式可分为孤立词(Isolated Word)识别、连接词(Connected Word)识别和连续语音(Continuous Speech)识别。孤立词识别是指说话人每次只说一个词或短语,每个词或短语在词汇表中都算作一个词条,一般用在语音电话拨号系统中。连接词语音识别支持一个小的语法网络,其内部形成一个状态机,可以实现简单的家用电器的控制,而复杂的连接词语音识别系统可以用于电话语音查询、航空定票等系统。连续语音识别是指对说话人以日常自然的方式发音,通常特指用于语音录入的听写机。显然,连续非特定人语音识别的难度要大得多,因为不仅有说话人口音的问题,还有协同发音、断字断句、搜索等问题,除了考虑语音的声学模型外还要涉及到语言模型,如构词法、文法等。
从识别对象的类型来看,语音识别可以分为特定人(Speaker Dependent)语音识别和非特定人(Speaker Independent)语音识别。特定人是指只针对一个用户的语音识别,非特定人则可用于不同的用户。实际上,非特定人语音识别的初始识别率往往都比较低,一般都要求用户花一定的时间对系统进行训练,将系统的参数进行一定的自适应调整,才能使识别率达到满意的程度。
非特定人大词表连续语音识别是近几年研究的重点,也是研究的难点。目前的连续语音识别大多是基于HMM(隐马尔可夫模型)框架,并将声学、语言学的知识统一引入来改善这个框架,其硬件平台通常是功能强大的工作站或PC机。

4. 语音识别系统的基本构成
语音识别系统的典型实现方案为:输入的模拟语音信号首先要进行预处理,包括预滤波、采样和量化、加窗、端点检测、预加重等。语音信号经预处理后,接下来很重要的一环就是特征参数提取。对特征参数的要求是:1,提取的特征参数能有效地代表语音特征,具有很好的区分性。2,各阶参数之间有良好的独立性。3,特征参数要计算方便,最好有高效的计算方法,以保证语音识别的实时实现。
在训练阶段,将特征参数进行一定的处理之后,为每个词条得到一个模型,保存为模版库。在识别阶段,语音喜好经过相同的通道得到语音参数,生成测试模版,与参考模版进行匹配,将匹配分数最高的参考模版作为识别结果。同时还可以在很多先验知识的帮助下,提高识别的准确率。

5. 语音识别技术难点
虽然语音识别已突破了最初对技术的检验阶段,而进入通过对话及系统形象的设计,建立用户喜爱的应用系统时期。然而语音技术本身仍在不断进步,为市场提供更新更好的应用模式和技术。目前,技术及应用的焦点主要集中在三个方面。
首先,带口音(Dialect)语音的识别。首先要明确的是,口音是指同一种语言在不同地区的发音有所不同,与同一地区(例如中国)的不同方言是有区别的。例如,中国的八大方言多属于与普通话(北方语系)不同的语系。也就是说是有别于普通话的不同的语言,应该用不同的声学模型来描述。而对于口音的适应性首先是由声学模型本身的品质决定的。对某一种口音,语言的声学模型的适应性决定了基础识别率,而在此基础上的优化和模型适应方案则提供了很好的解决方案。例如Nuance公司,作为拥有最大市场和最多用户的公司,也拥有最多的用户语音数据,保证了它极高的基础识别率。此外,该公司的系统优化工具为所有系统提供一个实用、有效的优化方法。优化过程对所有系统的表现都会有提高,也可以解决小范围的口音问题。而针对严重的口音问题,它的声学模型适应机制提供了很好的解决方案,可以使系统的识别率有很大改善。
焦点之二是背景噪音。人多的公共场所巨大的噪音对语音识别的影响自不用说,早期即使在实验室环境下,敲击键盘、挪动麦克风都会成为背景噪音。它将破坏原始语音的频谱,或者把原始语音部分或全部掩盖掉,造成识别率下降。实际应用中,噪音是无法避免的。研究将要解决的问题就是如何把原始语音从背景噪音中分离出来,即所谓提高音质(speech enhancement)或减噪(noise reduction)的预处理。这将会使识别系统具有很强的适应性。在这方面,Nuance优化的语音参数、灵活的模型结构、新的建模方法以及独有的噪音抑制功能,使得系统在背景环境噪声、手机、车载免提等高噪音环境下能保持良好的工作状况。
第三个就是“口语”的问题。这就是用户说话的自由度问题。它既涉及到自然语言理解,又与声学有关。语音识别技术的最终目的是要让用户在“人机对话”的时候,能够像进行“人人对话”一样自然。而一旦用户以跟人交谈的方式来进行语音输入时,口语的语法不规范和语序不正常的特点会给语义的分析和理解带来困难。你也许接触到一些语音软件声称是可以做到自然语言识别,而在这方面真正有实用商业系统的只有Nuance公司。Nuance的最新版识别软件所提供的“随意说(Say anything)”技术,使用户可以以自然的语言说出自己的需求。例如,“我对我的手机上的一些功能不太明白,想问一下”,或者“嗯,我的账单应该到期了,请帮我查一下要交多少钱”。它为用户提供了一种像“人人对话”的自然语音交互界面,这种更加友善的界面允许一般对话时的一些行为,如停顿及不完全的语句等。

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐