欢迎大家来到IT世界,在知识的湖畔探索吧!
当我得知,《向往的生活》第四季的赞助商名单里又有小度音箱时,我就知道,有趣的事情又要发生了。
愉快的周五晚上10点,我打开芒果台,依照节目的广告植入设定,何炅他们每一期都会命令小度音箱做点什么事,而每当电视里的何炅喊“小度小度”,我家的小度音箱就跟着响应:“在呢!”
那感觉,像家里养了一条会看电视的狗……
想想都觉得魔幻,小度在国内市场份额排前三,《向往的生活》收视率在综艺里又排前三。掐指一算,每周五的晚上,节目里的人一喊,世界各地少说也得有几十万个小度音箱一起被唤醒,场面感人。
类似的情况,在我的苹果设备上也发生过。
我用电脑开着功放,刷一个数码博主的视频,只听视频里喊了一声“嘿Siri”,我桌上的手机就蹦出一个女声:“请讲……”
我的Siri就这么被别的男人给嘿了,这让我感到不爽,当时还发了一条微博吐槽。
印象中,Siri 能用声纹识别功能来辨认它的主人,怎么会出现这种情况?我跑去网上查原理,发现早些年,华为手机也被类似吐槽过。
(没有黑华为的意思,这是2016年的帖子,当年市面上的语音助手都这个德行,我不是针对谁,在座的各位都……)
还有我公司的那台天猫精灵,有时我们正开会聊得火热,它莫名奇妙就蹦出一句话,空气突然安静……
我就挺纳闷:百度、苹果、华为、阿里……这些都是科技公司里的扛把子,人工智能领域的佼佼者,为什么还会出现这种情况,语音唤醒技术就这么难吗?
答案:是的。
我甚至找到2017年的一则旧新闻:
一个值得用收购公司的方式来解决的问题,一定值得考究。
智能音箱为何半夜说梦话,语音助手为何频频插嘴?是机性的丧失还是道德的沦丧?欢迎收看本期浅黑科技之“语音唤醒技术背后的小秘密”。
Let’s Rock!
1.世上本没有“语音唤醒”
1952年,计算机第一次听“懂”人类说话。
贝尔实验室里,一个名叫Audrey的语音识别系统降生,像个牙牙学语的孩子,它只能识别单个数字0~9的英文发音,而且非常“认生”——对熟人的准确度超过90%,对陌生人则大打折扣。
之后的20年里,语音识别系统虽然有很大进步,但依然停留在孤立单词识别的阶段,没法识别一整个句子。
1971年,美国国防部研究所(DARPA)开始赞助语音理解研究项目,希望将语音识别系统的词汇量提到1000。
参与项目的既有IBM这样的企业,又有卡内基梅隆大学、斯坦福大学之类顶尖高校的研究机构。
卡梅隆大学研发的“哈批”(harpy)语音识别系统拔得头筹,不仅能识别1011个单词,还能识别整句话。
从此,计算机语音识别从“单词时代”迈入“句子时代”。
知道了这个发展过程,你就会明白:从一开始,“关键词检测”就是语音识别的一部分,或者说是“最初形态”。
有了关键词检测,计算机听到“我们去吃肯德基吧!”才能检测到你吃的究竟是肯德基,而不是肯德,或者别的……
而语音唤醒在学术上就叫“关键词检测”(Keyword Spotting),即检测一段音频里是否有特定的词汇。
我们在用语音助手时,看起来是我们说出唤醒词之后,它才开始工作,其实它每时每刻都在监听周围的声音,检测其中是否包含唤醒词。
20世纪90年代,人们开始把语音识别技术用于消费级产品,也就是卖给普通人用,语音助手一类的产品也开始出现,“语音唤醒”变得越来越重要。
1992年,苹果对外演示了一个名叫Casper的语音识别系统,从形态上来看,和如今我们用的语音助手、智能音箱已经非常类似,甚至和晚它26年的产品“TNT工作站”有着异曲同工之妙。/狗头
从上面这段视频可以看出,每次对着它说话时,都以“Casper”为命令的开头。显然,Casper就是它的“唤醒词”,计算机会尝试执行单词Casper之后的那一句话。
细心的观众朋友已经发现了,视频里那个亚洲面孔是李开复,他是世界上第一个“非特定人连续语音识别系统”的发明者。视频里的Casper正是他在苹果时期的作品。
关于Casper,李开复的自传里记录着一个小故事。
由于种种原因,Casper 语音识别系统有不小的概率死机,在飞往纽约的飞机上,苹果CEO斯卡利忧心忡忡,问:“开复,有没有办法让死机的概率降到1%?”
收看他们直播的观众至少有2000万,如果死机,那真是出大丑了。李开复咬了咬嘴唇,说,“那好吧,约翰。”
演示当天非常顺利,节目播出后,苹果的股票从60美元涨到63美元。斯卡利问李开复:“你到底怎么把死机率降到1%的?”
李开复笑着说:“老板,这很简单啊,我带了两台电脑,连在一起,如果一台出了问题,立马切换到另一台。根据概率原理,一台失败的可能性是10%,两台同时失败的概率就是10%×10%=1%,成功的概率自然就是99%了!”
之所以引用这个故事,我是想说明语音识别需要不少计算机资源。当时有新闻报道说,这个语音识别系统在运行时几乎会占用所有计算机资源。
这也是为什么,我们如今的智能语音助手和智能音箱大多要联网才能用,因为本地的计算机资源带不动(或者功耗大而不适合跑在本地),要把你的声音传到云端服务器,处理完再把结果传回来。
语音唤醒词就像一个开关,告诉机器什么时候开始执行指令,什么时候处于待命状态,不必处理这些声音。
就像你去餐厅吃饭,如果服务员无限多,且很闲,当然可以专门安排一位站在桌子旁,你一摘下眼镜,擦拭布就递过来,你一喝完饮料,立刻就给满上,都不需要你张嘴。
但实际情况是,餐厅人很多,有几桌还闹哄哄的,服务员就那么几个,站着待命,谁吆喝一声唤醒词“服务员!”他们就立刻过来。
到了移动时代,虽然单台设备的计算力上去了,手机性能秒杀二十年前的电脑,完全可以满足离线语音识别的计算力需要,但又遇到另一个问题:电池不够用了。
2.语音唤醒的背后发生了什么
讲到这里,就引出了语音唤醒的四个关键指标:功耗、唤醒率、误唤醒率、响应时间(速度)。
这几个指标,本质上是相互制约的。
语音助手表示“我太难了”——既要我“竖起耳朵”努力听,不漏过每一个唤醒词,又不能太敏感听错,既要反应速度快,又不能耗费太多力气。
鱼与熊掌不可兼得,怎么办?答曰:砸钱攀科技。小孩子才做选择,鱼和熊掌我全都要!
细心的观众朋友也许会发现,2011年的iPhone4s已经能嘿Siri,但用起来很别扭,得手机插上电源才能嘿。
这个问题在4年后的iPhone6s上怎么解决的呢?得感谢它的好朋友:高通。
2013年,高通公司给他家的CPU芯片加了一个新功能:即使在休眠状态也可以检测到用户的声音并根据声音进行相应的操作。
大致原理说起来也简单,加了一个功耗特别小的协处理器,专门负责在熄屏状态下监听声音,检查里面有没有唤醒词。如果没有,就让声音从左耳朵进右耳朵出,一旦发现,就叫醒它的大哥——主处理器。
从此我们终于可以不插电,随时随地嘿Siri了。其他芯片厂基本也是在同一时期解决的这个问题。
和手机相比,插着电源用的智能音箱不必担心电池问题,但如果功耗太高,即便放着不用,一天也得浪费不少电。
发展到现在,各大厂商的语音唤醒基本都有“多级唤醒”(非专业叫法)的机制。
你可以简单理解为:声音唤醒的流程就像是工厂里的一道流水线,旁边依次站着葫芦七兄弟,大娃时时刻刻醒着,检查其中有没有唤醒词“葫芦兄弟”。
通常情况下,其他几个都在睡觉,节省体力。
大娃听到稍微有点像“唤醒词”的声音,就赶紧叫醒二娃,录音给它确认。
二娃仔细一听,说的是“福禄兄弟”,心想莫非主人是弗兰人?
二娃打了个电话喊醒云上的三娃,三娃一听,好像是两个人在聊天,一个人说:“麻麻,我作业做完纳!可以看会儿福禄兄弟啵?”
三娃有声纹识别的能力,听出来是家里小孩在嚷嚷要看动画片,而不想唤醒音箱,便不再继续喊醒四娃,转身对大娃二娃三娃说了句:“兄弟们,撤!”几人扭头又回去睡觉了,留大娃继续看守。
就这样,葫芦兄弟明确分工,每次都在1秒钟左右完成整个流程,只有当所有人都确认是唤醒词,才开始执行命令。
如此一来,既可以降低误唤醒率,又可以尽可能降低功耗。
我们一起来看一个实际案例:苹果的Siri。
2017年10月前后,苹果专门发过一篇文章来讲“嘿Siri”是怎么做的。
有兴趣的浅友可以自行搜索读读这篇原文,没兴趣的接着往下读。
iPhone的麦克风以每秒1.6万次的速度,把听到的声音,切成0.2秒的音频,丢进声学模型。
这个声学模型是用深度神经网络做的,它会把声音数据转换成概率分布,计算这个声音是“嘿Siri”的可信度。
iPhone6s 以上的机型都有一个名叫“始终在线”(Always On Processor)的小型低功耗辅助处理器。也就是前文提到2013年高通做的那个。
这个处理器顾名思义,“始终在线”,里面始终跑着一个很小的,基于深度神经网络的声学模型。
它每次给声音打个分,如果分数“及格”,它就会叫醒主处理器,主处理器再运行一个更大一些的声学模型,进入更复杂的评判流程。
“及格分”并不是一个固定的值,会根据声音条件自动调整。在“恶劣的声音条件”下会更低,Siri 更容易被激活。
深度神经网络有五层 ,每一层有32或128、192个单元,具体用多少,根据内存和电源的情况来分配,以节省资源。
如果分数及格了,但是不高不低,可能是有点口音,或者有干扰,这时设备就进入“敏感模式”,持续几分钟,如果再次重复“嘿Siri”,即便并没有比之前更清晰,Siri也会更容易被激活。
这也许可以解释为什么“长沙小燕子”女士(主持人李维嘉的妈妈)用她可爱的塑料普通发说“稀米、稀味”也能唤醒Siri。
需要着重说明的是,Siri的大部分工作都在云端,手机设备只占很小的一部分。
本地的两个处理器都通过之后,声波会被传送到云端服务器,进行更缜密的确认。
比方说,如果发现发音有点像“syria”(叙利亚)、“serious”(严肃的)之类的词,就会对一整句进行分析,结合上下文来判断是不是喊“嘿Siri”。
如果最终发现不是嘿Siri,服务器就会向手机发送一个取消信号:“兄弟们,撤!”让手机重新进入睡眠状态。
除了手机以外,像智能手表、智能音箱、智能无线耳机等等也都有类似的“多级唤醒”思路。
比方说国内有一家声音技术公司思必驰,阿里巴巴的“天猫精灵”、小米的“小爱同学”等都有用他们的技术方案。
在思必驰的技术方案里,通常情况下,初始语音唤醒的算法运行在一个名叫DSP的小型芯片里,通过之后,再把缓存的声音数据输送到一个叫AP的芯片里。
如果设备正在播放音乐,就会切换到“闯入模式”,语音数据会直接传输给AP芯片。这样一来,播放音乐时就可以直接说“下一首”、“切歌”、“声音小一点”之类的命令,而不必再反复地说唤醒词。
除了唤醒验证、声纹验证之外,思必驰还有一个名叫“骨导特征检测”的奇特功夫,专门给智能耳机用,据说可以分辨声音是由空气传导还是骨传导,以此分辨是耳机主人还是周围的人在说话,降低干扰。
所以,一部手机、一台智能音箱摆在桌子上,表面上看起来风平浪静,也没被唤醒,实则内部风起云涌,天翻地覆,跟外界产生了千丝万缕的连接。
3.为什么会被电视机唤醒?
也许有浅友要问了,既然技术这么溜,为什么到头来还是会被电视节目里的声音唤醒?
其实这是个玄学问题。
语音识别分成近场和远场两种,简单理解,近场就是说话人离麦克风很近,远场就是离得很远。
虽然概念只差一个字,难度却相隔十万八千里。
为什么1992年李开复就做出来Casper,而2015年智能音箱才真正流行起来?一个很重要的原因就是解决不好远场识别的诸多噪音、干扰等问题。
还是李开复的自传里的一个故事,有一年愚人节,苹果的同事把他做的语音识别系统做进电梯,用话说控制电梯,很酷吧,可大家走到电梯里,没人敢打招呼了,一说“Fine thank you and you?” 五楼的电梯灯就亮起来——Fine被识别成了Five。
远场识别会带来太多不太可控的因素。
声学领域有个概念叫“信噪比”,简单理解就是,你要听的那个声音,和噪声的比例。
近场识别时,信噪比很高,你要听的那个声音是鹤,噪音是一群鸡,当然一眼就能把它拎清。
远场识别时,信噪比很低,你要听的那个声音是鸡,噪音还是鸡,再要从中间挑出来就很难。
为了解决低信噪比的问题,智能音箱除了在算法模型层面下功夫,还得在硬件上下功夫,比如,用多个麦克风组成一个麦克风阵列。
你应该有过类似体验:当你认真听一个声音时,大脑会自动调集资源,辨别声音的方位,然后集中处理这个方向上的声音,抑制其他方向传来的噪音。
麦克风阵列的作用类似,每个麦克风只负责一个方向的声音,它们先对声音进行“声源定位”,再用“波束形成”技术集中收听这一个方向的声音,抑制其他方向的声音,从而达到降噪的目的。
虽然这个方法能解决一部分环境噪音,但如果有多个人同时说话,还离得很近,这种技术就会大打折扣。
此时,又需要一种叫“语音分离”的技术来把重叠在一起的声音分开。
远场识别需要处理的情况太多太复杂,所以它是一个细活,需要一点一点慢慢打磨。
文章前面,我把语音识别比作一个工厂,里头有一个长长的流水线,旁边站着葫芦七兄弟。按照真实的处理流程之复杂,葫芦七兄弟恐怕远远不够,得梁山一百单八将都出动才行。
4.再给它一些时间
回过头来一想,我就觉得其实没必要对智能音箱太苛刻。毕竟,即便是你,听见电视里好像有人提到自个儿名字,也会一愣神。
人类已经进化了几十万年,而动物听觉诞生的时间更久远。
据说,当人类“还是一条鱼”的时候,听觉就已经产生。声波冲击鱼鳔,引起鱼鳔扩大或收缩,造成的震动刺激内耳的灵敏感觉细胞,产生听觉。
相比之下,计算机的语音识别能力诞生不过百年,语音助手出现不过30年,智能音箱从2015年开始流行,如今才几年?
也许我们应该多给它一些时间。
在写这篇文章时,我想起2017年天猫精灵刚上市时,我做过一期调戏天猫精灵的视频。
和当时相比,如今的天猫精灵已经聪明太多太多,可我有时竟会怀念它当年的蠢萌带给我们的快落。
就像一个总是不分场合乱说话的蠢萌朋友,多年以后,他变得成熟、深沉、冷静,你竟有些怀念当年的那个他。
也许几十年以后,人工助手变得极度聪明,再也不犯错。那时我们也老了,也许会跟儿女、孙子吹牛:“当年我们的智能音箱,可蠢可逗了,冷不丁就蹦出一句骚话,比段子还搞笑……哈哈哈哈。”
再介绍一下我自己吧,我是谢幺,科技科普作者一枚,日常是把各路技术讲得通俗有趣。想跟我做朋友,可以加我的个人微信:xieyaopro。不想走丢的话,请关注浅黑科技:qianhekeji。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/55233.html