介绍

语音识别对于VR领域格外重要,不仅因为它能模拟AI与用户对话,而且它为用户提供了与任意应用进行沟通的更多选择。手动输入指令可能不太现实,并且应用如果拥有太多按钮或GUI元素,也会很快让用户手足无措。但只要能语音控制,那么在VR环境中就很容易开口去进行各种操作。

Unity Labs的虚拟现实(VR)授权平台 Carte Blanche将发布一个名为U的个人助理系统,用户可以通过语音控制它,很便利地执行一些操作。Unity Labs研发团队一直在研究可以实现这种声控命令的语音识别与分析工具。

本文第一部分将介绍语音识别的概念和理论。它着重介绍其相关概念和参考,以帮助读者了解更多关于语音识别方面的信息。第二部分将提供其在Unity Asset Store的安装包以及公开的代码库,我们封装了几个语音转文本的解决方案,还有一些用于对比各API的文本翻译的示例场景。

1. 语音识别与语义分析的原理是什么?

语音识别,顾名思义就是通过程序将语音转换成文本。而语义分析是其下一步,即将转换出来的文本进一步分析,并确定文本想要表达的意思。即使是目前最好的语音识别和语义分析程序也远称不上完美。虽然作为人类能直截了当并毫不费力地处理这样的任务,但是当我们试图让程序去执行这两个步骤时,困难程度真的是难以想象。

目前基于统计学的语音识别最重要的部分就是声学建模(acoustic modeling)。这个过程中用于识别声音开始时不同的波形,或者是语音结束时的一些音节(例如语音中的“s”, “p”, “ē”, and “CH”)。目前最常用的声学模型是hidden Markov model(HMM),它是一种被称之为Bayesian network的概率图(如图1所示)。HMM之所以被这样命名是因为其中一部分模型状态都是隐藏的,你只能看到这些状态运作时的输出,其目的就是用这些输出来分辨可能的隐性状态。对于声学模型而言,这意味着通过查看声波输出,并尝试找出最可能输入的音节是什么, 从而分析出说话者究竟想表达什么。

124836okzfsi0wivxkuwow.png

图1:这是声学模型中“x”的发音模型。椭圆表示我们正在尝试识别的音节。它们无法被直接观察到,但它们产生的概率波形(底部)是可以被完整观察到的。音节之间的箭头代表音节之间可能转变并组成简单的声音,类似于发音“x”。语音识别的目标是找到这些隐藏音节最相似的序列来解释我们所观察到的波形序列。波形自身是可以观察的,但必须及时从可观察的状态中分辨出音节。

一旦拿到颗粒状声音的概率,就需要将这些声音串连成文字。想做到这一点需要一个语言模型,它会告诉你一段特定序列的声音与对应某个词或句子有多相似。例如,音节“F”“O”“N”“E”以及“M”依顺序排列下来很清晰的就可以对应英语单词“phoneme”。某些情况下需要更多上下文,例如发音是“Ther”,它可能对应“there”, “their”, 亦或者 “they’re”,这种情况下必须联系上下文来确定哪一个是最有可能的词语。语言建模的问题与声学建模类似,但范围更广。因此那些相似的概率AI系统如HMM以及人工神经网络来自动执行任务。即使完美检测出了音节的顺序,想分辨一个人究竟说了些什么单词也是说来容易做起来难,毕竟语言是可以极度复杂的。更别提所有人都有不同的口音和语调。即使对人类而言,要相互理解彼此的谈话内容也是有困难的,对于AI来说这样的挑战太过艰难也不足为奇。

假设语音已经被成功转换成了文本,现在程序需要分辨该文本究竟是什么“意思”,这时语义分析就可以登场了。人们日常生活中就无时不刻地在进行着语义分析。例如,在阅读这句话之前,你可能已经猜到接下来会是人们如何进行语义分析练习的例子。那是因为你能利用上一句(例如“人们日常生活中就无时不刻地在进行着语义分析”)作为上下文线索,从而很好地预测后续几句。因此,如果想要拥有非常逼真的VR体验,AI必须善于分析玩家的语句并给予正确的反馈。

良好的语义分析包含了AI系统不断学习的过程。同样的意思可以由很多种不同的方式来表达,程序员不可能在最初设置观察词组时,就考虑到所有的情况。AI需要善于使用复杂的神经网络来连接单词和短句,并确定用户的真实意图。有时候不仅需要理解单词与含义,还需要了解用户。如果应用程序经长时间由某个人使用,一个优秀的AI会分析用户的说话方式,不仅会针对该用户调整回应,而且能够预测特定情况下用户的表达。

另外值得注意的是,如果AI用于实现特定目的,语音识别与语义分析都可以进行改善。需要考虑的概念越少,就表示需要注意的单词、短语和意图越少。当然,如果希望AI尽可能地像人类,它就必须对用户可能说出“所有的话”做出自然地应,尽管它只用于特殊目的。

2. 有什么语音转文本的工具呢?

Labs最初研究的语音识别涉及了对现有语音转文本解决方案的评估。我们开发了整合部分解决方案的Unity C#脚本插件并分享在Unity Asset Store。里面包含了示例场景,可以依次对比每个API转换的文本内容,同时允许用户从给定的列表中选定短语,并查看说出该短语后程序判定的准确程度。该代码也可以从Unity代码库中获得。

Speech-to-Text插件的接口包括Windows dictation recognition, Google Cloud Speech, IBM Watson以及Wit.ai。所有接口都能相当好的回应有背景的对话,但其中一些如Windows和Wit.ai,会在录音的开头和结尾部分插入一些简短词汇,可能是捡起开头和结尾的背景对话中,那些被前景对话遗漏的部分。每种解决方案都有自己行为模式和方法,来处理对语音识别比较有挑战的短语。

Windows dictation recognition是最近添加至Unity的(在Unity.Windows.Speech下)。由于该资源包是专门用于语音转换文本的,它仅用到了库中的DictationRecognizer,但Windows的语音库还有KeywordRecognizer及GrammarRecognizer。Windows使用流式语音文本转换,这意味着它会收集记录的音频小片段并实时返回结果。因为用户还在说话,所以会在暂停说话时返回临时结果,识别器随后将基于完整的语音返回整体结果。

同时还在插件包中集成了Watson的流式与非流式(区别在于是否一次性发送整个录音)的语音文本转换 – 实际上,IBM提供了用于Unity的Watson SDK。与Windows一样内置了关键字识别。Watson目前支持美式英语,英式英语,日语,西班牙语,巴西式葡萄牙语,现代标准阿拉伯语以及普通话。我们发现Watson一个比较有意思的功能是它会检测到暂停用语,例如“嗯”和“额”并且用% HESITATION来替换。目前为止还没有在Watson中发现任何类型的替换。

Google Cloud Speech同样支持流式与非流式识别。据我们测试发现Google似乎是四种库中词汇量最广的,甚至能辨识出类似于cuz之类的俚语。Google Cloud Speech同样支持超过80种语言。目前正处于测试阶段,只要拥有Google Cloud Platform账户即可试用。

Wit.ai不仅包含了流式和非流式语音识别,它还包含一个简单易用的会话机器人创建工具。只需为机器人指定表达意图的几种不同方式,创造描述对话大致类型的故事,然后开始填充数据即可 – AI会不断吸收数据自主学习。Wit.ai甚至可以验证接收的文本是否与观察到的实体不符(基于特征,关键字,自由文本),还能验证Speech-To-Text的转换。由于时间限制,我们发布在Asset Store的Speech-To-Text插件目前仅包含了非流式的Wit.ai语音文本转换。

Speech-To-Text插件的示例场景包含了几个测试短语 – 大部分都是来源于网络(哈佛短句列表和一篇关于语音转换的难题研究的文章)非常适合测试语音识别的短语。例如,“Dimes showered down from all sides,”(哈佛名言)包含了一系列的音节,以及“They’re gonna wanna tell me I can’t do it,”(我们自己想出来的短句)包含了收缩语气和俚语。Windows语音文本转换系统的问题是,似乎很难辨别“they’re”、“there” 或者 “their”,尽管根据上下文已经可以明确判断正确的词,Windows最终还是识别成了“We’re”。大部分API会将“gonna”或“wanna”这类词保持原样,但Google会将它们解释为“going to”以及“want to”,但奇怪的是“cuz”这个词会保持原样(Wit.ai同样可以识别“cuz”)。Will Styler的文章提到的一个有趣的测试短语是 “I’m gonna take a wok from the Chinese restaurant.” ,实际上单词wok从来没被正确检测出来过,每次检测出的是单词walk,即便已经给定了上下文语音识别也还是非常正确。这种句子是很大的压力测试,即使是人类,除了句子上下文之外还需要更多解释才能确认。例如,如果句中的“我”是一个贼的话,那么句中单词是“wok”的可能就比“walk”要大得多。

我们提供的插件是对比目前Unity中几大语音转文本解决方案的简便方法,也很容易将其整合至你的项目。如果想在Unity中尝试其他API,使用该插件也非常简单,只需新建类继承自Speech-To-Text的Service基类,然后即成到示例场景或小部件即可。除了单独的语音文本转换SDK,插件还包括了多个辅助类与函数(记录管理器,音频文件的创建和转换等等),以便集成和比较更多的API。

总结与未来规划

语音识别很难精准的原因在于有太多的变量需要考虑。对于每一种要识别的语言都需要储存大量的数据,包括所有现存的单词(包括俚语及简写形式),这些单词相互如何结合,语调和口音也可能影响发音,所有人类语言的冗余和矛盾等等更多因素。

发布至Asset Store的自Speech-To-Text插件目前仅集成了几个语音文本转换解决方案,但这些足以用来比较现有语音识别工具的优缺点了。对Unity开发者而言,该插件只是起点,还可以根据具体需求来加入更多功能。你可以集成更多的语音文本转换工具,并在整体结构中添加一个语义分析步骤,还可以在Unity项目中任意添加其他必要的内容。请查看这篇文章了解几个语义分析工具。

这项研究源于Carte Blanche项目最初集成AI机器人U来响应声控命令的计划。这涉及到语音文本的转换以及关键字识别。另一个有趣却艰难的挑战是创造出能与用户“对话”的机器人。人们在日常对话中经常包含类似于“嗯”或者是“啊”之类的语气词来表达感受。如果VR应用中的AI机器人不仅能够理解关键字,还能理解人类回话的各个部分,那么它会让VR环境的沉浸感进入全新的层次。

在VR环境中通过“某物”(尽管用户感觉很真实,但它终究还是用户界面)进行自然对话的能力,也可以广泛被应用于Carte Blanche之外的其他应用。例如SimSensei,一款由南加州(USC)学院创新研究部(ICT)开发出来的模拟治疗程序。但我们都知道,即使是同一种语言,同一种意思也有多种不同的方法来表达,所以创造自然的对话也不是一项容易的任务。

你可以在Asset Store和Unity代码库上找到Speech-To-Text插件包。欢迎大家随意扩展。如果有任何意见或者想法,发送邮件至与我们交流。

原文链接:https://labs.unity.com/article/speech-recognition-and-vr
转载请注明来源:Unity官方中文社区 (forum.china.unity3d.com)。请勿私自更改任何版权说明信息。
Unity, 语音识别, 语义分析, asset, 工具锐亚教育

锐亚教育 锐亚科技 unity unity教程