一段声音的旅程(八)语音的唤醒与识别

作者:秋半仙,哼哼


童鞋们好,我们花了六篇篇幅聊的信号处理终于告一段落啦~今儿我们要翻篇,讲一讲语音的唤醒与识别。

Δ 图片来自网络

前几篇讲的信号处理环节,主要是硬件、空间、腔体等的信号落地工作,我们称之为“硬落地”。特点就是,在适配过后的信号处理五大因素中有任何一个发生不可忽略的变化,都建议再适配一遍,我们称这个适配调优的工作为“tuning”。一般来说,tuning过的硬件,直到硬件生命终结,都不需要再做第二次(当然,如果第一次tuning没做得足够好就量产出去了,那纯属自己作,要返工也是很有可能的,未来讲“迭代”的时候再细说这个点。个人观点:特别不建议在tuning没有做好的情况下就发布产品)。这之后的ASR、NLP、TTS、DM的落地工作,都属于“软落地”。

这样分类有什么实质性意义吗?自然是有的。硬落地主要针对不同的硬件不同的使用场景,而软落地主要针对不同的人不同的功能需求。两个方向所需要的人才是不一样的,投入产出也是不一样的。这里主要分为三种情况:

如果一个team定位自己只针对一款硬件做语音产品,比如一款品牌音箱,那他们只需要把这款音箱tuning好。除非后面要改ID设计,否则负责硬落地的同学后期基本就没啥事儿可干了。但是音箱从被卖出到它报废之间的整个生命周期,产品都要不断迭代,功能也要不断丰富,运营、商业、服务等等都要接踵而来。所以相比起来负责软落地的同学,可能就要忙到飞起来。

如果一个team定位自己是做硬件语音方案的,需要给那些做品牌音箱的提供整体解决方案,那么他们需要根据每一款客户的ID设计和使用场景去做tuning。这种情况下负责硬落地的同学,嘿嘿,你们的好日子就到头了,准备和老婆孩子热炕头say good bye几个月吧。同时因为team是提供解决方案,软产品的设计和定制往往是客户自己独立完成独立开发的,所以负责软落地的同学此时就可以放飞自我哪儿凉快哪儿玩儿去了。

当然,还有两者皆投入的team,也就是当前比较热门的 toBtoC(2B2C)模式。toB做项目落地,toC做用户体验。语音公司大部分都是2B2C的商业模式;

所以,企业如果需要做语音产品,自身定位很重要,因为这涉及到整个team的人员结构和人才需求。不要盲目去抄袭语音公司的人员结构和人才定位,根据企业自己的定位和规划,按需要求人才,按规模定人数,做好人效供求的管理,不然到最后,有些人就会是这样的——

Δ 图片来自网络

而有的人,又会是这样的——

Δ 图片来自网络

显然,如果出现上述情况,很容易导致团队里负能量爆棚,事儿也就基本不可能做好。

语音识别是近几年非常火热的词,应该也是大家最熟悉的部分了,语音识别的核心任务,是音频转写成文字,看似简单无奇的这么一个环节,真的要用好是非常不容易的,我们先聊聊这个大环节里的细节吧。

假设一个场景:

哼哼:“唉半仙,几点啦?”,(我听到哼哼在后面喊我,我回过头看着她说)

秋半仙:“咋啦?”,

哼哼:“死鬼,问你现在几点了,我没带手机。”(我看一下手表,告诉她结果)

秋半仙:“哦,下午五点了。”

对话结束。

生活中,如果你要找一个人说事情,一般走过去第一句话应该是先“打招呼”,对方有所回应之后,才开始真正的对话。

这个场景中,在哼哼还没有喊我之前,我在“等待有人唤醒我”,我们称这个状态为“监听”状态。可以形象的理解为,此时,我在监听身边所有的声音,等待有人和我“打招呼”。当哼哼说出“唉半仙”时,我意识到有人在找我,相当于此时我被激活了。我们把这个行为称为“唤醒”,把“唉秋半仙”称为“唤醒词”。唤醒之后,哼哼说出了自己的诉求,这里开始就是正常的“识别”了。

Δ 图片来自网络

唤醒与识别

“唤醒”和“识别”是有很大的不同的。”监听“状态时,我们是不知道用户会从哪个地方来”唤醒“语音产品的。而一旦唤醒之后,我们是可以通过很多技术手段,比如前序文章中提到的”定向抑制“,排除掉其他区域的干扰,从而提升用户的语音体验。我们举个车内主副驾的例子,因为使用语音的既可能是主驾,也可能是副驾,所以,“监听”时两边都要监听着。如果副驾的同学此时正在打电话,你在主驾位置上唤起语音,那么副驾同学打电话的声音是会严重干扰你使用语音的。此时,可以抑制副驾声源,从而保障主驾的产品体验。

——“半仙,既然语音设备可以定向抑制,那也一定可以定向拾音吖,为什么不能主副驾都识别,根据具体的意思来决定用哪一个呢?”

——“哎,各位童鞋看看哈,这位童鞋能提出这种问题,说明他已经可以开始能跳出框框来思考产品了。这种思考方式应该保持,其他童鞋也要多向他学习哈~”

上面的这个问题的主因是系统的资源消耗。同时处理多路还要保证语音的实时性体验,对系统带来的消耗太大。另一方面,就是“根据意思来决定”这点很难具体定义“什么意思该使用哪个”,到最后可能会以“唤醒者”的内容优先考虑做为仲裁的核心依据,那牺牲大量的硬件资源的意义就大大减弱了。从产品落地和投入产出比的角度去考量,会退而求其次,这也是为什么今天很多概念demo和落地产品之间会有差异)。

Δ 图片来自网络

“唤醒”是激活语音的其中一种方式,从产品设计来看,激活语音有七种方式:

1. 主动唤醒。就是前面说的,在”监听“状态,通过唤醒词“唉半仙”来唤醒,唤醒之后,语音会有所反馈,比如“你好吖”、“有什么可以帮你的”,引导用户进入“识别”状态。

2. OneShot。前面的主动唤醒,是在唤醒之后要等待反馈再说指令,oneshot则是将“唤醒”和“识别”组合在一句话里说,比如“秋半仙,现在几点了?”,一句话完成。

3. 快捷唤醒。这个和主动唤醒的逻辑基本是一样的,区别在于:主动唤醒是激活语音等待用户说指令,快捷唤醒是激活语音直接执行指令,唤醒词即指令。比如,在”监听“状态,直接说“下一首”来执行切歌流程,所以快捷唤醒其实是将“唤醒”和“识别”合并在一起了。因为“快捷唤醒”的引入,我们为了区分,会把“主动唤醒”的唤醒词,叫做“主唤醒词”。

4. 被动触发。当满足某些特定条件之后,语音交互会被触。这个从语音角度去说,叫“被动触发”,但从用户角度去说,就应该叫“主动语音”。此时用户没有激活语音,但语音因为某些特定的条件满足被激活,与用户进行语音交互;比如,“堵车”的条件满足时,主动激活语音,询问用户,“前面有点堵,帮您把空调切到内循环吧,确定还是取消?”

5. 流程触发。根据当前语音的交互流程设计,若需要用户继续下达指令,则可以自动激活语音开启新一轮交互,若流程结束,则可以结束语音交互,回到“监听”状态。

6. 混合操作。可以通过触屏、按键、手势、图像等等其他交互方式来激活语音。常见的是按键,比如app里的语音按键、车上方控的语音实体按键等等。(秋半仙特别提醒:现在很多语音产品,在交互上都是很纯粹的以语音为主,按键一般都是启动、关闭、选择等简单的逻辑。以现在的发展趋势,未来语音将会和更多操作方式进行混合,会有更多的创新和机会。混合操作是一个大趋势,也会让语音交互越来越丰富,同样也会越来越复杂。)

7. 文字触发。文字触发的流程,是一种绕过“识别”直接进入“语义”环节的激活方式。

Δ 图片来自网络

如果我们把语音交互中有用户感知的“语音录入”过程进行拆解,还可以区分出六个部分:

1. “初始化”。这里的“初始化”也可以叫“准备中”。此时语音在做初始的准备工作。在这个过程中,语音全系功能都还不可用,用户必须等待初始化成功完成,成功完成之后,再进入“监听”状态。

2. “唤醒”。用户通过“主唤醒词”进行唤醒激活。

3. “说话”。用户下达指令的过程。

4. “识别中”。语音识别的处理过程,此时一般是引导用户等待。

5. “识别结果”。识别处理完成,给予“文字”结果,此时根据交互设计决定是否展示结果给用户。

6. “流程处理”。之后就是交互的具体业务流程环节了。

我们将七种语音激活方式,和这六个过程进行结合,得出下面的示意图,便于理解和记忆。

“唤醒”和“识别”虽然都是基于“语音识别”来实现的,但是逻辑还是有很多区别的。

“唤醒”对实时性要求很高,追求“快”。如果主唤醒词话音刚落,立马就有了响应,你是不是觉得被伺候的特爽?这和生活中我们去找别人,希望别人快速响应是一样的心理过程。一般我们是仅在设备上做“唤醒”,不会放到云端处理。这里有几个原因:其一,实效性。由于对响应的实时性要求太高,放云端处理,一个网络延时就凉凉了;其二,安全性,也是隐私问题。你说家里有一个设备,在实时“监听”你家里的声音,并放到“云端”去处理,万一你想干点……(此处省略一万字)对吧,相信每个人都是会有些安全顾虑的。

“识别”则对准确性要求很高,所以会结合本地和云端一起来处理。因为这些产品诉求的种种不同,“唤醒”会更加倾向于“声音”的相似度,不用等文字结果,就能快速响应,所以现在很多语音公司在做“唤醒”和“识别”时,也是分在两个不同的模型和引擎里来实现的。

既然是分成两个引擎来处理,那么两个引擎的调度就需要时间,这个时间会给产品带来什么风险呢?

Δ 图片来自网络

我们拿“按下语音键后说话”举例。大家回忆一下,你们微信或钉钉发语音,是不是下意识地按下语音键立马就开始说话?然后你再听一听,你会发现,开头有一段声音没录进去。仔细看这些产品的体验,其实是有一些交互细节在引导你不要立马就说话的。这个现象在很多语音产品里都有,主要有两个原因:一个是硬件麦克风要开启,这里就有一个避不掉的系统层激活调度的时间;一个是相关引擎的初始化时间,这也是一个必然存在的时间。两个都是必然时间,那么这个体验是不是就没办法做了呢?当然是有办法的,产品同学需要注意,用户的感知是产品整体对外的表现所产生的。也就是说,我们所谓的体验的极致,指的是用户感知的极致,它并不等于每个点都必须完美无缺

这个地方的解决办法有些偏技术,其实就是将录音抽象到一个独立的模块,且录音不停止。等用户一旦激活语音,录音模块还是将数据保留下来,同时去初始化引擎。等引擎初始化好,再将数据交给引擎处理。从用户表现层来看,就是按下语音键立马就能说话。这个方案貌似解决了问题,但是总不能应用一起来就把麦克风开开吧,这样太耗电了,产品也不太可能会这样定义。不过,有些语音产品是一旦启动就需要具备“语音唤醒”的能力,此时的语音产品就一直处于“监听”状态,麦克风就已经常开了,那么这个方案就适用了。其他情况,就得想其他办法了,但是思路是一样的,“要么解决每个关键点的耗时,要么就将他们藏起来让用户无感”

好了,今天分享会秋半仙有点儿啰嗦了,我们就讲到这,别忘了点赞打卡哦~

Δ 图片来自网络

                                                          —THE END—

你可能感兴趣的:(一段声音的旅程(八)语音的唤醒与识别)