智能语音专题(三):泛语音识别
《智能语音》专题第三章:泛语音识别。设备在获取到语音信号之后,如何将其转换为所需要识别的内容(文本、符号、状态、模式等等),完成“听懂”这个过程。“听懂”的标准应该如何定义,有哪些要点需要注意,在我们进行产品设计的时候应当如何处理,本文将为您解答。本专题之前章节参考:JimmyChen:智能语音专题(一):智能语音交互的概念JimmyChen:智能语音专题(二):语音信号处理
语音识别ASR(Auto Speech Recognition)负责将输入的语音信号转化为文本识别结果。
ASR拿到的语音信号一般是经过VAD处理后的语音,音频中的静默、非语音的端头和端尾部分应当已经被切割掉。(语音开头和结尾处的静默语音是一定程度上能提升语音识别率的,尤其针对短句子。)
语音信号首先进行特征提取,将语音信息进行数字量化,声学模型描述出语音的单个发音特点,发音词典和语言模型描述出发音之间的关系,之后解码器基于这两个模型组合的所有可能组合,找到最优解,给出最终的识别结果。
ASR功能划分
核心模块按功能划分为以上部分,而语音信号中的从提取信息的数据流上分为以下部分。
语音信息流
整个语音识别的过程可以概况为两个核心学科的综合应用,一个是声学,一个是语言学。
语音识别中的声学
之前大量的篇章讲了语音信号处理,基于声学场景,增强我们需要识别的声音,抑制我们不需要识别的声音,怎么现在这里又要讲声学,有什么区别吗?
当然有的,信号处理的声学我们关注的是空间、声源、噪音的相互影响,关注的是环境层面的声学;而语音识别中的声学,关注的是语音和语言中的声学,覆盖的是目标语言的声学特点。
我们的每一个发音称为“音素”,是语音中的最小单位,比如普通话发音中的元音,辅音。声学模型通过将语音分帧,主要处理发音相关的工作,模型包含发声的基本音素状态和概率,覆盖了目标语言中的声学特点,识别语音中最小的“音素”,再由多个音素组成单词,再由单词组成文本句子。
“Hello”声学处理示意图
同样的一句话,不同人、不同年纪、性别、口音、语速、音调产生的语音都是不同的,不同场景下安静的,嘈杂,远距离的语音也是不同的。同一句“Hello”,不同的人,不同场景下经过声学处理得到的特征信息,“音素”差异是非常大的,人也很难听清楚你说的到底是Hello还是Hallo,这也就是声学处理的一大难点。
声学部分作为语音识别的入口,需要尽可能的覆盖各种差异性语音,尽量采集多种场景,安静的,嘈杂的,远距离的发声语料生成声学模型,同时我们在做产品定位的时候一定要弄清楚应用的场景。一方面是用户群体,人员结构,口音等要求,例如儿童类语音产品大多需要针对儿童发音特点进行定制;另一方面是噪音叠加场景,距离等要求,例如车载ASR引擎供应商一般会叠加不同车速,车窗状态的胎噪、风噪等噪音数据进行ASR的训练。
不同语种、方言、场景之间可能发音上都有很大的差异,如果不能兼容,这时就需要考虑单独针对语言或者口音定制,例如不同的方言会用不同的声学模型,在提高精度的同时降低计算量。
语音识别中的语言学
ASR语言学部分同样重要,ASR解码器部分通过语言模型和发音词典,在各种发音之间给出最有可能的文本识别结果。不同的语言,发音方式不同,词汇不同,句型语法也存在差异。
例如汉语是一个单音节,多声调的语言,只有400多个无调音节,带调音节也只有1600多个,但常用的汉字却有40000多,一音多字和一字多音的情况非常普遍。英语是多音节,比如说good morning,Good有两个音节,morning也有两个音节,也不会有分词的问题,所以整体上英文的识别难度比中文要低。汉语识别难点
针对汉语普通话,语言学中影响ASR识别率的主要两个点:
分词:不同的分词方式,会导致不同的识别结果。例如“等/几首/需要/提前/多久?”和“登机/手续/要/提前/多久?”,虽说前句从语义上来说不太合理,但是后一句明显也只有针对登机相关的场景才会这么说。同音字:一天下课,老师匆匆走进教室说:“来两个人,我要班花。”大家觉得很好玩,尤其是男生们,很兴奋,表现十分积极,经过一番周折终于选出了两个很漂亮的女生,老师大手一挥:“走,和我到教务处搬花。”
从上可以看出,语音识别需要结合语义场景和上下文才能达到一个最佳的效果,这是语言学应当解决的问题,我们一定要知道语音交互时的主题和领域是什么,才不至于对牛弹琴。从产品应用层面,行业内的解决方案:
针对各个垂直领域,通用、金融、医疗、税务、车载等等区分不同的ASR,同时支持定制语言模型,额外收费。产品经理梳理出需要的业务场景,寻找最优的ASR方案。语音交互的业务流程中,例如有屏的语音交互场景,能够限定或者知道用户接下来会说什么,大概交互范围是什么。ASR能够支持个性化热词表,200-1000词条的不等规模,应用中通过上传对应的词组和句式,定向的提升语音识别率。将ASR和NLP相结合,通过NLP语义和上下文理解,加权给出最终的识别结果。目前运算量和资源消耗都比较大,大多只做少量的纠正,无法达到完全的上下文理解。
整个语音识别基于统计结果,基于上下文,没有100%的正确,也没有万能的ASR,离开测试集,别说识别率。各个厂商对外宣传的97%的识别率,使用新闻播音的语音测试可以有95%的识别率,而网络课程中针对编程、高数等领域的识别只有75%(老师通常带口音)。
即使相同的语言,不同的地域也会体现差异:对应发音的变化、词汇的变化和语法的变化,方言的支持通常意味着独立的ASR。有时候市场上可能会有类似的要求,“我要产品能够同时支持普通话、粤语、四川话、台湾话、上海话等等,最好能够自适应,用户不管用什么方言自动识别出来。”这个从目前的技术现状来说,无法通过单一的识别引擎做到。
方言和地域差异
针对英文有美国英语、加拿大英语、UK英语、澳洲英语、印度英语等等,上图右方的是Google 针对不同英语对应的ASR识别引擎。
针对汉语有八大语系(方言),北方语系、吴语系、湘语系、赣语系、客家语系、闽南语系、闽东语系和粤语。
1、北方方言以北京话为代表,包括长江以北,镇江以上九江以下的沿江地带,四川、云南 、贵州和湖北、湖南两省的西北部,广西西部、北部一带。使用人口占汉族总人数的70 %以上。2、吴方言以苏州话和上海话为代表,主要包括江苏省长江以南、镇江以东部分(镇江不在内)及长江以北靖江(除西南角新桥、东兴等乡)、南通(县城金沙镇及周围乡村)、海门(北部包场等12乡)、启东,浙江省大部分,上海市。使用人口占汉族总人数的8.4%左右。3、湘方言以长沙话为代表。分布在湖南省大部分地区。使用人口占汉族总人数的5%左右。4、赣方言赣方言 以南昌话为代表。主要分布在江西省(东部沿江地带和南部除外)和湖北省东南一带。使用人口占汉族总人数的2.4%左右。5、客家方言客家方言是以梅州市区(梅江区、梅县区)梅城口音的梅州话为代表。主要分布在广东省东部、南部和北部,广西省东南部,福建省西部,江西省南部,及湖南、四川的少数地区。使用人口占汉族总人数的4%左右。6、闽东方言闽东方言以福州话为代表,分布在福建省北部和台湾省的一部分,通行于福建东部的福州十邑,宁德市和南平市部分地区,三明尤溪县,台湾地区的马祖列岛等地。使用人口占汉族总人数的1.2%左右。7、闽南方言闽南方言以厦门话为代表。分布在福建省南部,广东省东部和海南岛的一部分,以及台湾省的大部分。南洋华侨也有不少人说闽南方言。使用人口占汉族总人数的3%左右。8、粤方言粤方言以广州话为代表。分布在广东省大部分地区和广西省东南部。南洋及其他一些国家的华侨,大多数都说粤方言。使用人口占汉族总人数的5%左右。
这些差异都会在声学模型、语言模型、发音词典中体现。例如:四川话属于北方语系,发音和普通话相似度很高,专有的四川话词汇也比较少,所以大多普通话的ASR在加入了带口音的数据之后能够较好的支持四川话。而单独的四川话识别引擎,语言模型可能和普通话差异不大,声学模型和发音词典则是完全只针对四川本地发音特点的支持,数据规模和成本等综合考虑,通常这类方言识别引擎的成熟度是弱于普通话的。
粤语这类发音有很大差异的语言则无法在普通话引擎中做兼容,带口音的普通话识别,方言的识别是两个不同的命题。
前面把主要的声学、语言学相关介绍之后,我们能够对ASR的实现有了一个基本的了解,同时以上部分关注的都是对于识别率的影响,而除了识别率,ASR的处理耗时对于语音交互的体验影响也非常大。当音频输入之后,ASR基于音频给出识别结果,处理的耗时同音频长度正相关,语音越长耗时越长。衡量ASR或者识别引擎的耗时,我们通常使用RTF指标,这个指标越小对应的耗时性能越好。
识别的耗时/语音长度 = 实时率(RTF),体现ASR的处理性能:800/1200 = 0.67
曾经传统的语音识别方式都是等用户说完话,然后对应的语音上传给ASR引擎进行识别,这就导致了语音交互的时延和用户说话的长短强相关,体验相对较差。在最近几年由于算力和算法的持续提升,云端ASR服务能够支持更多的计算量,云端引擎都会支持流式语音识别。即我们对设备说话的时候,引擎可以在开始说话第一个音传入引擎之时就进行识别,不断的输出识别结果,不断的校准,当用户说完之后,VAD 检测到用户说话结束再由ASR输出流式识别结果。
ASR耗时示例流式识别示例https:// ** .zhihu.com/video/
这样做到了边听边识别,语音识别的时延只和最小单元的处理时间有关(RTF小于1的情况下,ASR处理时延可以稳定在一定区间),开始说话即有响应,结合ASR结果文本回显的的可视化效果,能够明显改善语音交互体验。(进一步的,我们还可以做到边听便理解,提升整个语音交互体验,在后续章节详细展开)
以上部分介绍了ASR的基本原理,声学和语言学对于识别率的影响,不同方言的影响,时延对于交互体验的影响,在产品应用过程中需要根据实际的需求、场景进行分析和定义,达到最优的产品化语音识别效果。如果有对于技术细节想了解的更清楚的同学可以参考我之前的文章。
JimmyChen:语音交互(一)—— 语音识别
本章的标题称为泛语音识别,因为我想进一步展开话题讨论下语音识别还能做什么。从本质上来说,语音识别为一种模式识别技术,输入相应的音频而得到期望的文本、符号、状态和模式,ASR是一个广义上的应用不应该只局限于获得文本,在音频当中我们还能够获得更多有价值的信息。
语音识别的泛应用
语音识别的泛应用,从声学和语言学上找到特征,可以是纯粹的声学特征,也可以是结合在一起的文本特征,主要包含唤醒词识别、命令词识别、语种识别、声纹识别、关键事件监测等等应用。
唤醒词识别、命令词识别:可以理解为语音识别的简化版,本质都是做关键字识别(Key Word Spoting),基于轻量化的声学模型,以及个位数级别的唤醒词(语言模型),期望低功耗的快速响应,完成设备从休眠到等待语音指令状态的快速切换,唤醒设备。关键事件检测:识别声音特征,检测音频流当中的特殊事件,用来获取环境相关事件信息,未来可以进一步的补充用户交互的环境信息。例如婴儿啼哭,狗叫,警报声等关键事件,拦截喊麦、娇喘、 ** 、A ** R等违法违规音频。语种识别:在做ASR之前能够判断用户是用的哪一种语言类型,再调用指定的ASR进行识别。目前的成熟度较低,除非语言的本身差异性较大,同时需要判断的语言类型少,否则通常都需要1分种左右的语音才能准确判定。产品上如果确实需要类似的需求,可以考虑同时接多个不同语种的ASR引擎,将不同引擎的ASR结果再并行多语言NLP处理,基于语义输出对应语言的结果。(成本较高)特征识别:情绪识别,识别声音特征中的性别、年龄、情绪等等元素,谎言识别等等,除了性别识别准确率较高,其余部分目前主要处于研究阶段,未达到可以产品化的成熟度。
最后单说目前应用较多的声纹识别(支付宝和微信都已开通声纹锁,大家可以体验),基于人在讲话时使用的发声器官在尺寸和形态方面每个人的差异很大,所以任何两个人的声纹图谱都有差异。不同人的声音在频谱图中共振峰的分布情况不同,声纹识别正是通过比对两段语音的说话人在相同音素上的发声来判断是否为同一个人。识别声音特征,进行1:1和1:N的说话人声纹特征识别,用于身份校验或者身份辨别。
声纹识别
声纹识别主要包含声纹注册和声纹识别两个核心部分。
声纹注册:用户通过长语音注册,识别引擎提取声纹特征并保存声纹数据库。声纹识别:用户提供语音,识别引擎提取声纹特征比对声纹数据库,给出识别结果。基于提供识别的语音文本和注册的文本是否相同,分为文本无关和文本相关两种常见。基于比对时是做1:1比对,还是1:N检索,分为1:1和1:N两种不同的应用场景。文本相关场景:注册文本同验证文本相同的情况,准确性更高,针对高安全场景。文本无关场景:注册文本和验证文本不同的情况,自由度更高,针对个性化场景。1:1的场景在开卡、开户、注册、登录、解锁、支付等多场景下,进行声纹比对,确保身份认证安全。1:N的场景在个性化推荐、门禁、考勤等场景下,进行声纹检索,根据用户画像精准匹配身份,实现业务效果。
声纹识别视具体应用场景,提出不同的安全性要求,通常支付类和锁类应用需要更高的安全级别。主要采用活体检测,随机验证文本,抵御录音重放攻击。采用针对人工语音的非自然检测模型识别波形拼接、语音合成等攻击方式。
当我们要采用语音相关的技术方案时,基于我们的语音交互场景,需要使用不同的语音技术。如果制定选型标准,我们应该关注那些语音指标,哪些是会对我们的产品造成明确影响的,罗列以下供大家参考:
主要指标
希望通过此文能够让大家对泛语音识别有更好的了解。
免责声明: 本文章转自其它平台,并不代表本站观点及立场。若有侵权或异议,请联系我们删除。谢谢! |