700行代码帮你迈出打造专属Jarvis的第一步

前几天,Mark Zuckerberg 写了一篇博客《Building Jarvis》 ,立即风靡科技圈。智能家庭,Bill Gates 弄了一个,Zuckerberg 也搞了一个,科技圈的大佬们纷纷动手,让小民们看着很眼馋。

在《Building Jarvis》这篇文章中,Zuckerberg 写到:

These challenges always lead me to learn more than I expected, and this one also gave me a better sense of all the internal technology Facebook engineers get to use, as well as a thorough overview of home automation.

注意到这些酷炫的技术,都是 internal technology Facebook engineers get to use。那么到底有没有可能,使用公开领域的服务,构建一个类似于 Jarvis 的系统呢?

正好这段时间,我也在做一个基于人工智能技术的简单 APP:WhatIsWhat。这个 APP 目前很简单,甚至可以称得上简陋,但可能对你构建自己的 Jarvis 会有所帮助或启发。

什么是什么
什么是什么

背景

某天闲聊的时候,有个妈妈同事说,她家宝宝问她很多东西不懂,只好去搜索,发现百度百科的不少词条有个“秒懂百科”,用视频讲解百科词条,宝宝很爱看。只是可惜宝宝不认字,不会自己搜索。然后我就想,要是有个工具,能用语音问问题,语音或者视频回答问题,那挺不错啊,就有了这个 APP。

随着近几年语音识别准确率的大幅度提升,语音交互技术已经步入到非常成熟的阶段了。公开领域也有讯飞、百度等好几家免费服务可用,只是关注和使用这些的一般都是企业,个人开发者并不多。其实从我工作上的背景出发,语音交互背后的技术都是非常熟悉的。下面我就以我使用的百度语音开放平台为例,解释下能有哪些免费的语音交互服务可用。

语音识别

要想宝宝能使用语音问问题,首先需要有一个语音转文字的技术,我们一般称之为“语音识别”。从 20 世纪 70 年代 IBM 把 HMM 应用到语音识别技术上来以后,语音识别准确率一直在稳步提升。但到了 2000 年以后,语音识别的效果改进停滞了,而且一停就是 10 年。直到 2010年,Geoffrey Hinton、邓力和俞栋在微软研究院将深度学习引入语音识别技术后,平地一声惊雷,语音识别的准确率才又开始一次大跃进。

可以这样说,20 年前的语音识别和六七年前的语音识别,没有太大区别。但现在的语音识别技术,和六七年前的语音识别技术,是有革命性改进的。如果你还根据几年前的经验,认为语音识别是个 Tech Toy,识别结果充满了错漏。不妨试试最新的语音识别产品,比如讯飞语音输入法、百度语音搜索,结果会让你很吃惊的。

值得高兴的是,讯飞和百度都将最新的语音识别技术免费开放给所有人使用。比如百度的语音识别服务,单个应用每天可以免费调用 5 万次,而且可以通过申请提升这个免费上限。只需要到它的平台上注册成为开发者(不需要任何费用),申请新建一个应用,下载最新版的 SDK,参考文档集成到 APP 里就行了。

语音合成

如果想让手机使用语音回答问题,还需要一个文字转语音的技术,我们一般称之为“语音合成”或者“TTS”。语音合成在准确率方面的问题上,没有语音识别那么显著,但更大的困难来自于“怎么让机器发出的声音更像人声?”有很多个方面的考量,比如情绪、重音、停顿、语速、清晰度等等。现代的语音合成产品,一般都支持选择发声人(男声、女声、童声)和调整语速的功能。很多小说阅读器都配备的“语音朗读”,就是语音合成技术的典型应用。

讯飞和百度也都免费开放了自家的语音合成技术,也是类似于语音识别的SDK集成即可。值得一说的是,Google 在今年 9 月发表了自家的 WaveNets 语音合成模型,号称将 TTS 发声和人声的差距缩短了 50%(可以到这个页面体验一下),所以我们可以期待公开的语音合成服务效果有更进一步的改进。

WaveNets 效果
WaveNets 效果

语音唤醒

就像两个人交谈时你必须得称呼对方名字,他才知道你是在对他说话,机器也是一样。对着手机屏幕的时候,可以通过点击麦克风按钮来实现唤醒语音输入,但在远处或者不方便点击时(比如开车),需要用特定的指令唤醒它接收并处理你的输入。就像我们熟悉的“Hey,Siri”和“OK,Google”,我们一般称之为“语音唤醒”。

一般情况下,唤醒指令不依赖语音识别,也就是说,它纯粹是使用声学模型匹配你的声音。这样做也有好处,就是不依赖网络,待机功耗也更低。

讯飞的语音唤醒功能是收费的,但是百度的语音唤醒功能是免费的,可以定制自己的唤醒词,然后下载对应唤醒词的声学模型包,集成到语音识别 SDK 中即可。

如果希望打造一个专属的 Jarvis 的话,这个唤醒词声学模型最好是使用自己的语音训练出来的,这样召准率才能更高。但很遗憾,百度的免费语音唤醒还不支持这点,只能用百度语料库训练出来的模型。

自然语言理解

关于自然语言理解,Zuckerberg 的 《Building Jarvis》已经解释得非常充分了,这是一个非常复杂和困难的技术领域。讯飞和百度也都在自身语音识别能力基础上,开放了自然语言理解的能力。用户甚至可以在云端自定义自己的语义,这样识别后不仅能拿到一个纯文本识别结果,还可以获取结构化的分析后结果。

百度语义理解
百度语义理解

我对 WhatIsWhat 这个 APP 的要求很简单,只需要理解“什么是什么?”这个问题即可。我没有用到百度的语义理解能力,而是简单地写了一个正则表达式匹配,主要是希望后续能充分利用语音识别的 Partial Result 对性能进行优化。

问题回答

目前很多搜索引擎(比如谷歌、百度)对语音发起的搜索,在给出搜索结果的同时,往往附带着一句或者几句语音的回答。但搜索引擎针对的往往是开放领域的搜索词,所以语音回答的覆盖比例并不高。限定到“什么是什么”这个特定的领域,百度百科的满足比例就高了。尤其是秒懂百科,使用视频的方式讲解百科词条,样式非常新颖。

在这个最初的版本中,我只采取了秒懂百科的结果。也就是先抓取百科结果页,提取秒懂百科链接,然后打开秒懂百科结果页。为了让播放视频更方便,我用 WebView 执行了一个自动的点击事件,这样第一条视频结果在打开页面后会直接播放,不需要再点击。

演示视频

下面是“WhatIsWhat”这个 APP 的演示视频,请点击查看,因为录音设备的冲突,视频的后半部分没有声音,敬请谅解。

演示视频,点击查看

源代码地址

你可以到 https://github.com/solrex/WhatIsWhat 这个链接查看“WhatIsWhat”的全部源代码。代码总共 700 多行,不多,需要有一点儿 Android 和 Java 基础来理解。

总结

WhatIsWhat 是从一个朴素 idea 出发的非常简单的 APP,这个产品集成了“语音识别、语音合成、语音唤醒、自然语言理解”几类人工智能服务。想要实现 Jarvis,可能还需要人脸识别、智能对话、开放硬件 API 等几项能力,并且需要一定的工程能力将这些功能整合起来。

虽然 WhatIsWhat 与 Jarvis 的复杂度不可比,但它演示了如何使用公共领域已有的人工智能服务,构造一个落地可用的产品。更重要的是,它便宜到不需花一分钱,简单到只有 700 行代码。

就像 Zuckerberg 所说“In a way, AI is both closer and farther off than we imagine. ”虽然很多人并没有意识到语音交互这类 AI 技术能够那么地触手可及,但技术的开放对 AI 应用普及的影响是巨大的。在这一点上,国内的人工智能产业巨头们做得并不差。这篇文章,WhatIsWhat 这个 APP,只能帮你迈出第一步,希望不远的将来,我们能够有更多的开放 AI 服务,使得搭建自己的专属 Jarvis 变成一件轻而易举的事情。

第一笔博客收入

博客上放百度网盟广告2318个月,终于迎来了第一笔联盟分成103.37元。我还以为是补充医疗保险的理赔款,因为款额不对纳闷了半天,刚刚登邮箱看到上周广告报表才突然想起来。我的博客总算赚钱了!

另外,感谢部分同事的关心:我注册百度联盟是早在进百度之前的事情,而且由于存在利益相关,我一年多前就将个人博客投放百度联盟广告报公司备案了,公司并没有禁止这种行为。

上图,都是一分一毛地攒出来的啊!

第一笔博客收入

百度新人开放日见闻

前天收到百度邮件说邀请约百个校园招聘录取同学到百度大厦参加开放日活动,最近非常忙,本来打算推掉不去的。后来想想见见未来的同事也是有好处的,于是今天就横穿北京城到上地的百度大厦转了一圈。

先说说新落成的百度大厦。虽然有些人嫌它内部结构过于复杂,但我还是很喜欢的,以前南大浦口校区的教学楼比它弯弯绕多了。大厦外面有篮球场,一楼有乒乓球场,地下一层有很大的健身房和瑜伽室,食堂也在负一楼。

每层都有很多休息区,这一点我非常欣赏。休息区有免费的水果、纯净水和咖啡,零食贩卖机也比外面便宜一些。整个大厦几乎都是玻璃幕墙,阳光的通透性很好,负一楼、五楼顶和七楼顶都有花园,散散步挺不错的。

最好玩的是三楼还有专门的睡眠室和母婴室,七楼还有两个禅院。整个建筑唯一不方便的地方就是门禁太多,几乎每个门都有门禁,连进个电梯间都要刷卡。

虽然参加活动的总人数挺多,但是分到部门也就那么几个人。eCom 总共来了九位同学,其中有一个是和我一起面过斯伦贝谢 BGC 的北航女生,还有一个是我相熟的一位 IBM 前辈带过的人大男生。有点儿关系的居然占到 1/4,这世界真小!了解了一些部门的具体结构和工作内容,我想以后我应该是在 eCom 做后台相关的开发工作了。

没有管饭,每人发了本“brainwash”的书——《百度世界》。坐地铁回来的,在复兴门坐一号线,历史上第一次被工作人员硬推入车厢中。被风吹了一路,前两天刚刚好转的鼻子又有点儿不舒服了,头晕。这学期来一直很忙,都顾不上锻炼,导致抵抗力严重下降。打个流感疫苗把我的鼻炎症状加重很多,赶紧好起来吧。

搜索引擎和我的博客

今天想起了两件比较有意思的搜索引擎的事情:

1. Google PageRank 没有停止更新。

我今天忽然发现我的博客 http://blog.solrex.cn 的 PageRank 变成了 3,而去年 PageRank 在传说中停止更新半年后恢复时我的 PageRank 才是 2。这说明 Google 没有再次停止更新 PageRank。PageRank 是 Google 对网页重要性的意见,虽然一个数字代表不了什么,但是看着自己的网站被 Google 欣赏总是开心的事情 :-)。

2. 百度服务器资源紧缺是真的。

由于域名服务器问题,我的域名 solrex.cn 在 07 年末到 08 年初有 6 天时间无法解析 IP 地址。我发现问题后曾经尝试过在 Google 和百度搜索和我相关的关键字,Google 给出的结果没有什么差别,而百度却没有一条来自 solrex.cn 相关的记录。但是在 IP 解析恢复一天后,再百度搜索“solrex”,blog.solrex.cn 就成为搜索记录的第一条。这说明:一,百度服务器资源确实短缺,否则它没有必要删除一个仅仅6天不能访问的网站,不然要百度快照干什么?二,百度抓取蜘蛛反应很快,才恢复一天的网站就已经被重新收录了。