热度 30
2013-3-11 15:19
3151 次阅读|
7 个评论
语音科学及技术是我博士论文所在的领域,目前在技术市场上又出现再次的热潮,因此将我的部分拙见贡献出来探讨。这是复杂的领域,因此做法也有很多、一篇短文也只能提纲挈领,观点和做法不同之处,仅供参考、看官海涵。 近期我在一处的回帖里说: 语音互动技术的2大瓶颈是:(1)自然语言理解;(2)环境干扰音的抑制。 这是不谈及内部技术、不讲为什么的说法,也是高度概括的说法。下面稍微扩展开来点说。 语音识别技术本身的结构和算法最近20年来进展缓慢,本身没有根本提升,学术界仍然在做艰难改进,对总体提升微小。像若干深入技术一样,语音识别的技术仍然是以“算法”形势存在,也就是说,尚未成为优秀成熟稳定的东西固化在芯片里面、让工程上和产品里能够方便使用。这套算法,主要包括对于输入语音信号的“前处理”来提取最有用最浓缩的“特征”参数,以及用这些参数来进行的统计计算决策,这2个大的步骤。目标是找到所说“内容”的最佳估计,而不理睬语音中其它信息如说话者身份、情绪等。而这统计决策的机理,最成功的系统采用的是2种数学结构之一:“隐式马尔科夫模型”(HMM)或“人工神经网”(ANN),目前都仍在使用或改进中。前者的结构比较统一,简单说就是将语音信号参数的出现,作为一个随机过程对外的“观察”,因此也就有了一个观察概率,另外还有一个马尔科夫链自身各态间的“转移概率”。实际使用包括“训练”和“识别”两个过程,前者使用若干数学方法(称为参数估计),从大量标注的实际语音数据(叫做语料)中获取信息,例如说a的发音对应怎样一系列的观察参数,并将这些参数写进事先定好结构的模型参数里。当然了,这里需要面对大量不同的语音、不同说话者、在不同上下文中的语音的特征,也就体现了“统计”的强大。而在识别时,未知语音信号,经过同样的参数提取,用来进入部分语音模型中,进行概率计算,而(一个短语的)总“分数”最高对应的那个序列的模型,就输出为识别的结果,例如一个单词序列,或一个控制指令等。人工神经网的内部结构不是一种,而是很多种,最常用的有“带时延的多层感知器”等,但总的原理仍然是将大量语料中的变化信息,存入固定结构的模型参数中;而参数估计又各有不同的算法,寻求某种局部最优,最后用语音识别的实践来验证其优良与否。也有一些“自适应”系统,能够在识别过程中自动进行对于自身参数的改善、作增量式的小规模再估计,这也就是人们常说的“自动学习机理”。 以上这类基本模型,称为“语音模型”。进而,因为人们说的每句话,是属于一种语言(如中文)巨大单词的可能组合之一,但这不是说“任何组合”都是允许的。这里就用到我们人类自己学习语言时也在用的一类结构,叫做“语法”,就是规定哪些词可以跟随哪些词。这样,组合的可能就不那么繁多了,也就给大规模连续语音识别系统的“搜索”带来的巨大的简化。在语音识别系统中的用来限定的语法,称为“语言模型”;它本身也需要若干深层数学的指导,才会达到能够从大量语料、但仍然缺少部分数据的语料中,高效正确地获取模型参数;并且,对于人类自然语言中的语法,采用规范语言(如编程语言)语法的方式多数不可行。工程上,通常语音识别器构建时,需要对所需不同场景,以及场景间的衔接,进行人工的编辑,而场景中的每一个时段,对应一些固定的语法,也就是说,到了那个“菜单”,系统仅能听懂那一些单词、以及那些单词的那些固定序列。在识别这个层面,有若干模式,此处不一一列举。总之,语音模型和语言模型,发源于科学家们对于自然的语言对话过程的部分理解,因此想要在计算机算法里学习使用这样的过程,因此就使用了这些模型。但这些模型都基于实际人类的过程,做了大量的简化。所以说,在计算机算法中的语音识别,只是很少部分类比了人类的自然过程。说实话,科学家对于人类自身如何理解语言,也远没有达到完全的了解呢。但是,工程产品上已经想要使用,不想再等了。 顺便提一下早期的人工智能方法,也曾经用来做语音识别,但是一直是失败的。早期人工智能用于语音识别,是想找出所有“什么话对应什么信号”的规则,然后在存储了这样大量规则的系统中,搜寻出未知信号属于哪个语句。失败的原因就是语音信号与内容的对应关系远不是一一对应、其中混杂了太多来源的不确定性(同一句话,即使同一个人说N次,也是N个非常不同的信号,更何况不同人说同样话、在不同场景或环境说等),因此完美的规则一直无法获取、表达、或被搜索,而不完整的规则集带来的只是在非常小规模语音识别中的满意结果。所以,上述HMM等统计的方法才会胜出;不是因为它更加准确,而正是因为面对混杂的物理现实,需要用不那么精确的模型和参数,去保存只有统计意义下正确的信息,然后去做不那么黑白分明的“软决策”,反而成功了。而统计方法是否会获得最终的胜利,或者统计+规则的某种结合会胜出,也是少部分科学家仍在探索的方向。 目前的人工智能已经前进了很多,并且似乎仍有人认为语音技术是由该领域所发展起来。需要澄清的就是,如今的主流语音识别机自然语言理解技术,都不是早期人工智能的方法所支持。但如果仅从应用角度上看,都是解决让计算机看上去像人的行为这样一个目标,那么语音可以纳入人工智能范围,但内部结构基础完全不属于同一类了。 世界上语音识别和互动技术的发展,除了古代那些仅有概念(描述型的模型)的说法以外,近代主要是由美国国防项目开始于上世纪80年代。早期的发展历史很有意思,除了上述的规则-统计基本思想之争而外,实际上绝大多数后来可行并主导的结构和算法,都是在其支撑理论不成熟甚至完全不存在的情况下、由搞计算机的人“鼓捣”出来的。大家熟知的创新工场李开复,就是当年这些编程高手之一:他在CMU大学的博士论文后来被发表为一本书,而他是早期成功实现大规模连续语音识别的人之一。以后的15年左右,世界上有最多20几处(大学或公司或研究所)的独立团队在做语音识别;除了学术论文丰富,还有几次的世界范围的比赛:统一发送相同的识别任务,在1-2周内发回结果,包括准确率、实时性、抗干扰性等逐渐深入的指标。这一时期的拥有内部语音识别技术、并以语音为主营的公司也有10多家。但,根本来说还是这一领域的复杂性艰难性,使他们当时的商务目标全都失败了、都没有靠语音赚到钱,多数公司都关闭了。其中留下来的最大和最好的一家是美国的nuance公司,及其若干合作方式。在某个阶段,它除了提供最好最大的识别技术内部的“引擎”,还为了下游公司方便开发应用,提供很多“开发平台”以及企业级应用方案。在美国欧洲也都出现了电话网络上成功运营的全语音互动咨询服务(自动坐席)、面对一个有限的应用范围,如飞机航班、**信息等、达到了相当自然的对话程度、并绝大多数时间能够满意地自动应答获得信息。但最后的10多年来,并没有出现突破这些“有限范围”服务局限的新发展。笔者了解到国内几年前的水平,同样是采用国外大公司提供的语音引擎、开发平台,以及(国内外)语音板卡硬件以运行于电信级环境,拥有号称几百人开发团队的自动坐席技术提供公司,所开发出的服务,只是将现有“选A请按3”类的分类菜单操作,平移改为死板的语音指令输入而已,没有给用户提供任何提升的体验,自然也就没有任何发展前景。可见一斑:即使是仅仅外部的应用层工程开发,语音互动技术也还是需要相当深入的多学科基础的,否则就只能是对该技术的简单滥用了。值得一提的国内科大讯飞公司多年的积累,在首先成功获得语音合成(中文版)的市场主导地位以后,近年来也开发成功大型语音识别引擎及系统及方案。 上面虽然提到语音识别系统内部所用的、用于限制范围的语音模型,这还远不是走向类似人类那样完全自然方式对话的工作。解决这个问题的领域叫做“自然语言处理”(NLP),简单说是在语音识别得出单词序列以后、再进行的“理解”并达到对话过程的控制引导、和直接执行服务中的动作的巨大研究领域;当然了,识别出的单词会有错误,所以真实的系统不是这样硬性分离识别和理解这2个步骤的。或者说,自然语言处理是处理“文字”的,而非直接处理语音格式的信息。这个领域与自动翻译系统有很大重叠。这里面也同样有规则vs统计的基础方法问题,或者上升到哲学层面(这类的领域,哲学指导是真真实实需要的喔),就是人类“理性主义”和“经验主义”的对决和融合。方兴未艾、按下不提。 除了艰难的学术探索和内核技术提升,苹果的iris走的是另外的道路:应用导向。也就是说,从应用角度来连接现有模块所能够达到的最好程度、并佐以自家开发的模块来共同构筑对于能够提升用户总体体验的新服务。Iris被苹果购进之前,据说也是基于国防项目的一个实时信息管理软件、并由几个能人做成手机上的服务应用。可以说,这里面语音识别和互动仅仅是一小部分而已。总体目标是一个能够根据实时动态广泛的网络上的信息,来提供信息服务的“个人助理”。也就是说,不仅它的语音识别和自然语言理解的计算,是基于云平台上的巨大计算资源来达到更加精确,而所用信息也是通过云不断采集和分析扩展的。也就是说,你在手机上说出的搜索单词,是上传到服务器的巨大主机上去进行运算、并获取那里拥有的历史及实时信息,再将识别或查询结果传回到手机上,所以手机只是这个过程的应用界面和接口,使用时会因为网络原因而略显延迟。而它自身的自然语言处理模块,也是结合进了实时采集到的信息分析结果的特征,来更好地猜想用意、收集习惯历史、引导对话等,是一种非常贴近实际的NLP开发方式。它的初步成果再一次说明了:面对艰难的跨学科技术,从应用角度入手,而不是等待它发展到完美,是一条可行的道路。而这些“应用层”中部分不得已添加的模块,也许有些后来会成为对于语音识别和自然语言理解领域的、尚不完善理论的巨大补充和新的发展方向;就像早期语音识别技术被“大胆”的软件工程师搞成功一样。自然语言理解旨在令系统达到能够接近人类自然方式的对话、并完成服务中的任务。所以,这个领域的发展,也同样需要理论和实践两个方面的营养;会是未来几十年的工作。这也是如今热起来的云计算和“大数据”领域中很好的方向。 另外一个方面的挑战是信号层面的干扰:当语音互动系统,在用于远距离“免提”方式时,MIC采集到的信号中会存在诸多严重干扰(嘴巴贴近MIC时,环境干扰音相对会成为很小,因此除了超大强度的噪音,使用双MIC对话都不再是问题)。毕竟在很多环境的应用中,人们还是希望能够免提操作的,就像科幻电影中的那样,人在室内任何地方随时发出语音指令、而系统回答,而不是手持一个装置贴近嘴巴!首先,困难的来源是统计语音模型的参数对于所有外界变化都非常敏感,以至于“干净”环境中训练出来的模型,直接用到了干扰环境中,识别率会大大下降到完全无用的程度。一个封闭环境(如客厅)中的干扰,主要包括环境噪音(加性)、回声混响(卷积)、和竞争语音(如电视机里的播音会干扰你的语音指令)这三种;当然它们的组合就会更加困难,例如竞争语音以及所需要识别的指令语音,同时也是经过严重混响的。混响是指通过不同墙壁家具等平面反射而混合的信号,其中包含诸多相位混乱版本信号的组合!虽然人类仍可以完全听清,算法却因为缺少这部分的知识能力而大大影响识别。目前对所有这些远距离信号的处理,基本采用进入识别系统之前的“净化”处理,多采用多个MIC的结构。MIC本身和采集电路成本都很低,目前很多高档手机都从2个到3个MIC了;但复杂的是它们后面的处理算法、远没有达到成熟的程度。微软的视频互动硬件Kinect系统(主要用于体感游戏中的视频识别)中已经集成了多个MIC和集成进芯片的部分语音增强算法,而这颗芯片是一家以色列公司提供的专有技术。从外部开发算法的方向,粗略的分类目前主要有“盲源分离”(BSS)和“盲消混响”(BD),并且每个具体的算法、以及应用方式,是与说话者数量、移动情况、MIC数量、位置和增强信号处理的目标有关;虽然已达到部分增强所要识别的语音的程度,但尚有巨大挑战要面对。未来一旦某算法获得成功、能够在某个方面对于某类应用提供关键性的提升,就可以进一步将那个算法用快速DSP芯片来实现,并在系统中集成进这颗DSP,如此作为某个抗干扰语音互动系统的初期系统架构(硬件成本会有较大的增加)。值得一提的是:车载导航和娱乐系统中,语音互动有着非常重要的作用,就是提高驾驶员驾车的安全性(连国内也开始为开车打手机罚款了),但车里的噪音也是这类系统的挑战之一。所以同样地,多MIC设置(MIC阵列)加处理算法是未来的方向。 大的投入或者说持续的学术努力,在识别方面有引进更多的基于语音分类(如方言习惯)的模型结构细化、“深度连接神经网”上的新结构和新算法、将更加深入的统计信号处理方法(包括神经网和机器学习)用于上述的BSS和BD等。值得关注的一点是,由于神经网类的算法要在并行硬件的计算结构上才能够更加高效地发挥作用、或者说同样的运算资源成本,运行本来比HMM更加复杂的基本结构和算法,能够达到比HMM更好的识别效果,因此一种新的硬件架构GPU就开始被用于这类计算。GPU虽然本身是为图形渲染而设计,但近年来也已经被广泛用于科学计算,大到超级计算机、小至智能手机平板电脑(集成进主应用处理器的GPU核),其实都可以将部分处理用的运算算法任务,交予GPU来做,它正好提供大量简单单元的巨量并行连接。这也是未来方向,有些让人感觉又可以开发一些此前运算量太大、CPU或DSP都“自不量力”的信号处理复杂算法了。 语音识别和自然语言处理,这样一个学科发展到如今,已经到了巨大投入只能换来微小改善的阶段、或者是在等待一个全新架构的突破。。。 顺便介绍一下:笔者曾亲自开发出一款低成本、完全基于DSP的语音互动+控制的硬件模块,主要用于智能玩具的小词汇量的语音互动,它也仍在发展中。已经包含了一些简单的抗噪功能,并且能够识别非特定人的连续语音(用户无须训练、也无须提供语音资料,只提供文本脚本即可),以及包含一些简单初步的语音理解功能。这是完全“从头”开发出来的东西,当然不建议任何人都这样从头去做,我自己之所以做,部分是兴趣使然、测试一下这样做的可行性。结果是:一款仅几十MIPS的DSP可以做到这样,并且包含了对外控制等功能,提供了很大的可扩展性,以及为下游用户提供了产品开发的最大的方便(且不是死板语句的识别),应该说,是业界中少有的成果了。它包括硬件模块以及相应的开发工具链,并为客户提供设计协助。 如果任何公司或个人发烧友对于语音识别或互动有兴趣探讨或开发,可以随时联系我;在此处的提问回帖我也会一一作答。这里一并建议:(1)想好自己的应用,因为语音技术尚没有达到可以应对“任何”应用的程度,然后选好运行平台,这是成本等问题;(2)如果在电脑上、网络上或者智能手机平板电脑上通过操作系统来运行语音服务软件,可以采用的语音识别内部引擎有:微软、IBM等,以及众多被修改简化了的算法软件:以开发SDK或者完整应用程序的方式提供。因为语音技术本身没有给谁赚钱,也就基本没有人还继续拿它卖钱了,所以免费的就很多;但是识别质量、运行环境、接口、开发方式等,就要你自己搞明白了。如果它有个“演示”程序或免费试用版什么的,可以逐渐做起来。如果有兴趣更深入地去做,也可以使用剑桥的非常好的免费软件工具平台HTK,但这个需要你自己建立所有模型、编辑和使用语料进行训练等。如果做好了,识别率也是很高的;(3)即使你不做语音技术的内部,对于它的外部逻辑,还是要有充分的理解,才好开始开发这些互动应用;也就是说,除了普通的软件工程问题,还要从“一个人如何对话”这方面去理解一下问题本身,对于你的应用软件设计是非常重要的。这是因为,语音对话是人类太想当然的动作了,对于它的内部动作,例如“在哪个菜单”的设计考虑,就会忽略忘记;(4)如有理论或架构上的切磋,非常欢迎!讨论结果也许是未来博文的来源之一。