|
雷锋网按:作为一家科技巨头的CEO,扎克伯格却依然保持写代码的习惯。可怕的自制力,超强的执行力,当比你有钱的人还比你更聪明更勤奋的时候,雷锋网编辑不禁开始怀疑人生。
以下文章来自扎克伯格的笔记“Building Jarvis”,由雷锋网(公众号:雷锋网)编译,未经许可不得转载。
2016年我给自己制定了一个挑战:打造一个像钢铁侠里 Jarvis 那样的家庭AI助手。
我的目的是了解人工智能发展的现状。虽然人工智能已经比人们能察觉到的要先进得多,但是依然还有很长的路要走。通过完成这些挑战,我不仅熟悉了Facebook的工程师们使用的内部技术,而且还对智能家居有了全面的了解。
在这一年里,我打造了一个可以通过手机和电脑进行对话的AI系统。它能够控制我家里的灯光、温度、电器、音乐和安防系统,而且这个AI还能了解我的品味和习惯,可以学习新的词汇和概念,甚至可以逗我的女儿Max开心。Jarvis是由Python、PHP和Objective C编写的,运用了包括自然语言处理、语音识别、面部识别以及强化学习在内的人工智能技术。
在本文中,我将会解释我创建的Jarvis到底是什么,以及我从中学到了什么。
开始:把家变成“互联网”
从某些方面来说,这个挑战比我预想的要容易。实际上,我给自己制定的跑步计划(2016年跑365公里)累计花费的时间比这还更多。不过,将我家里所有的系统全部连接起来,并让系统之间互相通信,却比我预想的要难得多。
在可以构建AI之前,我必须首先编写代码将使用不同语言和协议的系统连接起来。我们的电灯、恒温器和门使用的是Crestron系统,音乐流媒体Spotify搭配的是Sonos音箱,还有一台三星电视机,以及为Max准备的Nest Cam摄像头,当然,我的工作室连接的是Facebook的系统。为了能够通过我的电脑发布诸如开灯、播放歌曲之类的指令,我不得不对其中一些系统的API进行逆向开发。
此外,大多数的电器甚至都不能连接到互联网。虽然通过支持连接到互联网、可远程控制的电源开关能够控制其中的一些电器,但是这还远远不够。比如,如果你希望烤面包机能在接通电源的时候自动开始烤面包,但你很难找到能够让你在断电的情况下将面包按下去的烤面包机。最终,我最终找到了一个1950年代的古董烤面包机,然后把它插在了智能插座上。同样的,要想连接Beast(扎克伯格的宠物狗)的自动投食器,则需要涉及到硬件改造工作。
对于Jarvis这样的助手来说,要想能够帮助更多的人控制家里的一切,我们需要将更多的设备连接起来。而业界也需要开发通用的API和标准,让设备与设备之间能相互通信。
自然语言
当我写完能够让我的电脑控制我家的代码之后,下一步就是让我和电脑之间的沟通变得像日常对话那样自然。这里的过程分为两步:首先实现通过文本信息来对话,然后增加将语音转录成文本的功能。
从寻找关键词开始,比如通过“卧室”、“灯”、“开”这几个关键字,它可以知道我是在告诉它把卧室的灯打开。很快,我就发现它需要理解同义词,“family room”和“living room”在我们家里指的是同一个房间,这就需要建立一种能教它学习新的词汇和概念的方法。
理解语境对任何AI来说都非常重要。例如,当我告诉它打开我办公室里的空调时,这和Priscilla说同样的话的意思完全不同。这造成了一些混乱。比如,当你在没有指定房间的情况下让它把灯调暗一点或者播放一首歌的时候,如果它不知道你在哪个房间,那么很可能打开Max房间里的播放器,然后在我们希望她能打个小盹的时候把她吵醒。
音乐是一个更有趣也更复杂的自然语言领域。对于一个识别关键字的系统来说,有太多的艺术家、歌曲、专辑,因此你可以问的东西也非常宽泛。电灯只能关闭或打开,然而当你说“play XX(播放XX歌曲)”时,即使细微的差别也可能意味很多不同的意思。比如,“play someone like you(播放歌曲someone like you)”,“play someone like Adele(播放和Adele风格相似的歌手的歌曲)”,“play some Adele(播放Adele的歌)”,这些听起来很相似,但其实是完全不同的指令。第一个指令是播放一首特定的歌曲,第二个是推荐一位歌手,第三个则是创建一个Adele最好听的歌曲播放列表。不过,通过一个有反馈的系统,AI可以学习到这些差异。
一个AI系统对语境的了解越多,就能越好地处理开放式问题。我经常只对Jarvis说“play me some music(播放音乐)”,它会查看我过去的听歌习惯,大部分情况下它播放的都是我想听的歌。如果它播的歌不符合当时的气氛,我可以直接告诉它,比如,“这不是舒缓的,播放一些舒缓的音乐”,它就会学习到那首歌的分类,并立即做出调整。而且它也知道是我在跟它说话,还是Priscilla(扎克伯格的妻子)在跟它说话,这样它就可以根据我们的口味推荐不同的歌曲。相比非常具体的指令,我发现我们更常使用开放式的命令。就我所知,目前还没有哪个商业化的产品在做这个,这应该是一个巨大的机会。
视觉和面部识别
人类三分之一的大脑都负责视觉,而AI在理解图像和视频方面也有很多难题。这些难题包括追踪(比如Max在婴儿床中移动是不是说明她醒了?),对象识别(例如房间里的是Beast还是一块毯子(注:Beast是一条长得很像地毯的宠物狗)),以及面部识别(例如谁在门口?)。
面部识别是对象识别中一个特别难的问题,因为大部分人的长相是很相似的,相比之下,区分任意两个不同的物体,比如一个三明治和一座房子,就简单得多。但是Facebook在面部识别方面的技术能力很强,它能够很轻易地识别你照片库中的朋友。当你的朋友站在你的门前的时候,通过面部识别,AI系统就能决定是否让他进来。
为了做到这一点,我在门口装了好几个摄像头,确保各个角度都能够捕获图像。AI系统目前还不能识别后脑勺,因此多装几个摄像头可以确保我们可以看到那个人的脸。我设置了一个简单的服务器,可以持续检查摄像头的传回的图像,并执行以下两个程序:
- 首先,通过面部检测,来查看是否有人出现在摄像头的视野之中,如果它发现人脸出现在画面之中,就会执行面部识别程序来确定这个人是谁。
- 一旦确定这个人是谁,就会检查一个列表来确定他是不是我正在等的人。如果是,就会让他进来并通知我,客人已经到了。
这种类型的视觉AI系统在很多地方都非常有用:比如知道Max什么时候醒,这样就可以开始播放音乐或者普通话课程;知道我们在哪个房间里,这样就可以在不提供位置的情况下,正确地执行没有上下文的类似开灯这样的指令。和AI其他的方面一样,当把视觉提供的信息与其他能力结合起来时就能发挥最大的功效。比如知道哪些是你的朋友,以及如何在他们到你家的时候给他们开门。当AI系统拥有的信息量越多,它就会变得越聪明。
Messenger Bot
虽然我在电脑上编写Jarvis,但为了让它更有用,我希望不管在任何地方都能和它对话。这意味着我必须通过我的手机,而不是放在家里的某个设备来和它进行通信。
我开始建立一个Messenger Bot来和Jarvis对话,这比开发一个单独的App要容易地多。Messenger为开发自动程序提供了一个简易的框架,它可以自动帮你完成很多事情,比如可以跨平台(iOS和Android)工作,支持文字、图像和语音内容,推送通知,管理不同人的身份和权限等等。
我可以通过Messenger Bot发送任何的文本信息,发送的文本会被立即传送到Jarvis服务器上并被处理。我也可以发送语音片段,服务器会将语音准换成文本,然后执行指令。如果在我不在家的时候有人到访,Jarvis会给我发送一张图片,然后告诉我是谁来了。
有一点我没想到的是,虽然我既可以通过语音也可以通过文字来和Jarvis对话,但是我使用文字的几率比我预想的多得多。大多数情况下,打字不会干扰到我身边的人。如果我做的事涉及所有人,比如为大家播放音乐,那么我会选择语音,但是大多数时候用打字更合适。同样的,当Jarvis和我沟通的时候,我更希望收到文本信息而不是语音。因为声音有时候会突然打扰到你,而文本则让你可以在想看的时候再看。就算是我对着Jarvis发布语音指令,但是如过我正在使用手机,我会更喜欢它通过文本信息来回应。
这种选择文字而不是语音交流方式的偏好,其实跟Messenger和WhatsApp上文字消息比语音消息更收欢迎这一现象是吻合的。这表明,未来的AI产品不能只专注语音交互,私人消息界面也应该是标配。如果你想让AI能够通过文本沟通,那么选用像Messenger这样的平台比你从零开始开发一个App要容易的多。我一直以来都对AI机器人持乐观态度,当我开发了Jarvis之后,这种交互的体验让我更相信智能家庭的未来应该是像Jarvis这样的。 |
|