扎克伯格开发笔记:打造Jarvis的日子,我庆幸自己从未停止过编程
作为一家科技巨头的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这样的。
声音和语音识别
尽管我认为文本在与AI沟通方面比人类意识到的更加重要,但是语音也仍将占据非常重要的地位。语音最大的好处是它的速度。你不需要掏出你的手机,打开App,然后开始打字,你需要做的仅仅是说话。
为了能够让Jarvis能够拥有语音识别功能,我需要为Jarvis建一个能在后台采集语音信息的的App。虽然Messenger Bot能够做很多事,但是要实现语音交互对它来说还是比较困难的。我设计的Jarvis专用App能够让Jarvis在我把手机放在桌上的时候,听我说话。我可以在各个房间里都放上手机,这样我就可以在每个房间都可以和Jarvis对话了。虽然这和亚马逊的Echo很相似,但是根据我的经验,当我不在家的时候会经常用手机和Jarvis对话。因此把手机当作主要的交互入口比家庭设备更可靠。我已经开发了iOS版的Jarvis App,下一步计划开发安卓版的App。从2012年起我就没有开发过iOS的App了,在这次的开发过程中,Facebook为开发App和语音识别提供的工具链让我印象非常深刻。
虽然语音识别系统最近已经有了很大的进步,但是目前还没有哪一个AI系统在理解会话语言方面做的足够好。语音识别依赖于听懂你的话并预测你将要说什么,因此相比非结构化语言,结构化的语言要容易理解的多。
语音识别系统,或者更广泛的机器学习系统,都有其限制,它们往往更适用于特定的问题。比如理解人和机器的对话与理解人和人之间对话是不同的。当你用来自谷歌的人机对话数据来训练机器学习系统,那么这个机器学习系统在理解Facebook上人与人之间对话的表现将会相对较差。训练一个能够只需要近距离对话的AI,和训练一个在更大的空间范围内使用的AI(比如Echo),也有很大的不同。这些系统的限制很多,这意味着我们离更通用的AI系统还有很大的距离。
从心理学层面上来说,一旦你对着一个AI说话,那么就会比你使用文本或者图形界面与计算机交互要投入更多感情。我观察到的很有意思的一点是,当我为Jarvis 植入声音之后,我会希望它能更幽默一些。其中一部分原因是因为它现在可以与Max对话,我希望对话有趣一些,能够逗Max开心。另一部分原因感觉它一直在我们身边。我教了他一些有趣的小游戏,比如我和Priscilla可以问它我们应该挠谁的痒痒,他会随机告诉我们一个名字:Max或者Beast。我还会增加一些经典台词,比如“对不起,Priscilla。恐怕我做不到”。
在语音这一领域还有很多需要探索。AI技术刚刚变得能够成为一款伟大产品的基础,在未来的几年它会变得越来越好。同时,我认为最好的产品应该可以随身携带而且可以进行私密性对话的。
Facebook的工程环境
作为Facebook的CEO,我并没有多少时间写代码,但我从未停止过编程。不过这些日子以来我主要是在创建我的个人项目Jarvis。我本来只希望今年能够了解一些AI的现状和进展,但是我发现学到的远远超出了我的预期,感觉自己就像是Facebook的一个工程师。
我在Facebook的代码库中升级的经验可能和大多数新的工程师类似。我们的代码结构组织非常好,不管是脸部识别、语音识别、Messenger Bot框架(messenger.com/platform)还是iOS开发。你很容易找到你想要的。为了能够在GitHub的Atom文本编辑器上使用,我们创建了开源包——基于Atom的Nuclide(github.com/facebook/nuclide),这让开发工作变得更容易。我们也创建了Buck系统(buckbuild.com)来开发大型项目,这节省了我很多时间。我们开源的文本分类工具FastText(github.com/facebookresearch/fastText) 也值得一看。如果你对开发AI也有兴趣的话,也可以看看Facebook Research(github.con/facebookresearch)在Github上的所有开源项目。
”快速行动“是我们的价值观之一。这意味着到Facebook来的人创建App的速度必须比在其他任何地方都快,包括自主开发。到我们这来的员工可以使用我们的基础设施和AI工具来创建那些依靠自己需要很长时间的东西。创建让工程更高效的内部工具对任何的科技公司来说都是非常重要的,而Facebook在对待这一问题上更加重视。在这里,我要给我们的团队一个大大的赞!
接下来的工作
尽管这个挑战已经结束了,但我仍将继续优化Jarvis,因为我每天都在使用它,而且常常发现我想添加的新功能。
近期,下一步工作应该是创建安卓App,在更多的房间里放置Jarvis语音终端,连接更多的家电。希望未来能够用Jarvis来控制我的Big Green Egg碳炉。
未来,我还会探索如何教会Jarvis如何自主学习的技能,而不是让我去教它执行特定的任务。如果我要花费一年的时间来应对这个挑战,那么我会专注于理解学习本身这个过程是如何运作的。
最后,随着时间的推移,如果能够找到方法让Jarvis可以让全世界的人都使用将会更有趣。我考虑过开源我的代码,但是目前Jarvis跟我自己的家、家里的电器以及网络设置的联系太紧密了。如果我能创建一个能够将更多通用的智能家庭功能集合起来的layer,或许那时候我会开源。当然,那可能会是创建新产品的好的基础。
结语
创建Jarvis是一个有趣的智力挑战。它给了我在创建AI工具方面的直接经验,而AI对我们的未来非常重要。
我曾经预测,在未来的5-10年内,我们的AI系统将比人类的感官更加准确——视觉、听觉、触觉,以及其他的领域,比如语言等。
与此同时,我们距离了解学习的本质仍然很遥远。我今年所做的一切,包括自然语言、面部识别、语音识别等等,都是基于基础模式识别技术的变体。我们知道如何给一台计算机很多例子来让它的识别更精确,但是我们仍然不知道将从一个领域中获得的想法应用到另一个完全不同的领域中去。
今年,我在构建Jarvis上花了差不多100个小时。现在我有了一个能理解我而且能为我做很多事的系统。但是就算我花1000个小时,估计也打造不出一个能完全自主学习新技能的系统。除非我在AI技术上取得了基础性的突破。
在某种程度上,AI离我们很近,也离我们很远。但是AI未来能够能够做的事会超出很多人的预期:驾驶汽车,治疗疾病,发现行星,理解媒体。这些都会对我们所处的世界产生重大影响,但是我们仍然需要弄清楚,到底什么才是真正的智慧。
总之,这是一个很棒的挑战。它教会我的东西比我预期的要多得多。我不仅了解了AI,还了解到了家居自动化和Facebook内部技术的知识。这正是这些有这些挑战有趣的地方。在未来的几周里,我会分享我给自己制定的2017年的挑战。
via Facebook
雷锋网版权文章,未经授权禁止转载。
本文链接: http://www.yixieshi.com/67145.html (转载请保留)