覃超评价扎克伯格的Jarvis AI代码——富可敌国之后尚能饭否?

标签: jarvis ai 代码 | 发表时间:2017-01-07 17:26 | 作者:
分享到:
出处:http://news.cnblogs.com/

雷锋网按:本文作者覃超,前 Facebook 软件工程师,现为 FREES 资本技术合伙人。

文章来自@覃超的知乎回答: 如何评价扎克伯格自己写的 Jarvis AI? 此问题缘起于扎克伯格 2016 年 12 月 19 日发布的文章 Building Jarvis,小扎称自己打造了一个像钢铁侠里 Jarvis 那样的家庭 AI 助手。雷锋网已在第一时间翻译出这篇笔记: 《扎克伯格开发笔记:打造 Jarvis 的日子,我庆幸自己从未停止过编程》,建议没看过的读者可以先浏览一下。

Zuck 原贴

Jarvis demo 视频: Jarvis From the Perspective of Priscilla Chan (is different)

帖子头图是一段 Jarvis 的代码。作为一个技术流作者,我在最后的附录解读那段代码:

Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

文章开头 Zuck 先叙述了自己编写 Jarvis 的心路历程:

Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

这个技术架构如下:一个 Jarvis server 在服务端跑,上面主要是做语言处理、 语音识别和人脸识别     (Zuck 家的大门需要用)。

输入端为各种家用硬件,也就是上图中左边那一列,依次是:

1. CrestronCrestron Home Automation for SmartHome 此为美国最著名的 智能家居控制器的厂商,专门提供一整套硬件和技术方案让爱折腾的老美实现这些功能:

"Alexa, turn on the kitchen lights"

"Alexa, raise the living room lights by fifty percent"

"Alexa, set the basement thermostat to 70 degrees"

黑人脸 -_- 这也能解释为什么在网上看到的智能家庭的视频来来回回都是这几个控制指令。

2. Lights:灯

3. Thermostat:调温度的

4. Doors:门和门禁系统

5. Sonos:老美喜欢的智能音响品牌: Sonos PLAY:1 Compact Wireless Smart Speaker for Streaming Music (White)

6. Spotify:美国版的网易云音乐。Spotify 由 Sean Parker 创立(前 Facebook CEO 和联合创业人之一;也就是在《社交网络》电影里抽大麻的那个。注意:大麻在美国一些州已经合法,另外它的成瘾性和危害都小于香烟),Spotify 和 Facebook 关系很好,在 2011 年深度集成在 Facebook 中。

7. Cameras:摄像头

8. Toaster

Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

老美耿直,早餐都吃的是 toast,这个机器用来加热它,然后涂点果酱和黄油,就是一顿丰盛的早餐。

9. T-shirt cannon:T恤加农炮。很多读者这时估计懵逼了,问:“小魔王同学,你是不是说错了?扎克伯格没事在家里放一个加农炮干嘛?” 对的,其实他的衣柜里安装了一个T恤的发射器,可以直接把T恤喷射出来,打到他的手里。

架构图里的右侧为三个用户系统:messenger bot、语音 app 和门禁摄像头。接下来小扎说了他一步步是如何走过来的:

第一章:连接家里的家具设备。

这块 Zuck 坦言做这个 AI 家庭系统比跑 365 英里的任务要稍微简单一些(至少少费时),但是最麻烦的环节就是连接这些家里的各种设备。他甚至需要“逆向工程”一些硬件设备的 API(比如灯和音响),使得可以通过程序来控制它们。Toaster 换了一个 1950 年的硬件,另外 Zuck 还专门给 Beast(zuck 的狗)的喂食器以及T恤的弹射炮做了硬件的改动。

由此可见以后 IoT(物联网)的重要性和前景。

第二章:自然语言处理

分为两部分:文字消息处理和语音处理。前者处理的难度是同义词和上下文,而后做音乐控制的时候发现播放指令的处理更加麻烦,比如:

“播放周杰伦”:这句命令在处理的时候要判断周杰伦到底是人还是歌名;另外 Zuck 的例子:

"Play someone like you", "Play someone like Adele",前者是歌名,后者则是进行类似风格的歌曲推荐。Zuck 通过不断训练和加强 Jarvis AI,使得它现在对于 Zuck 的歌曲喜好有记忆和认知,所以 Zuck 一般直接说:“Play me some music”。Jarvis 便直接开始播放,另外 Zuck 有时心情不对的时候,想听轻音乐,便说:“that's not light, play something light”,Jarvis 自己换歌曲并且学习。

第三章:视觉和面部识别

人的大脑有1/3 的部分专门用来做视觉处理,包括图像、模式识别和追踪。Zuck 的房子门禁同样也需要支持视觉和面部识别功能:

Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

这部分在 AI 领域一直是发展前沿,所以有不少现成的 model 和开源框架。Facebook 之前就开放了一套 API 来判断这个图片里是否有你 fb 好友,以及将面部位置可以从图片中定位出来。

Zuck 为了做智能门禁,在大门口装了好几个摄像头,为了可以更好地捕捉人脸图片。Jarvis 系统 24 小时不断进行人脸探测和识别,当有人且是 Zuck 好友的时候,给 Zuck 发消息询问是不是想见的人。

AI 视觉还帮助 Jarvis 做其他事情,比如看 Max(Zuck 女儿)是否睡醒,如果醒了的话,Jarvis 边自动开始播放 Max 喜欢的歌曲或者给 Max 上中文课(从小开始学习中文 -_-)。另外借助视觉系统,可以更加有效地知道家里的人的所在位置,这对于更好地执行有上下文的指令有巨大帮助。比如当有人说:“Turn on the lights”,肯定最佳的动作是打开此人所在位置的灯。

第四章:Messenger bot

老外现在喜欢用 bot,所以 Zuck 把各种操作指令都放在手机上,具体说来是 Facebook messenger 的   bot 上(类似于 Slack 的 bot 或者微信的一个公众号)。于是 Zuck 只需要像这个公众号发消息即可。如下图:

Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

Zuck 介绍用 messenger bot 开发的各种便利之处,它比起做一个 app 来更轻,更容易跨平台,同时也不同处理 push、启动、注册等一系列繁琐 routine 的事情。平时 Zuck 可以通过发文字或者语音消息(原文:audio clip,这个功能是小魔王我当年亲手做的~ :D),然后 Jarvis AI 将其发送到 server 上, 进而开始做文字或者语音处理,提炼出需要执行的指令来操作 Zuck 家。同时 Jarvis AI 还会主动发消息给 Zuck,比如有人在门口时,Jarvis 会把照片和识别出的人的信息发给 Zuck,让他确认是否是自己要见的人。

Zuck 自己没有料想到的是:平时和 Jarvis 的交流大部分都是通过文字信息;虽然开始 Zuck 以为自己会是说话为主,但是后来发现 text 更加方便更加能保护个人隐私,不打扰别人。这从一个侧面也能反应出来       voice message 在北美的 messenger 流行不起来的一个重要原因:随着社会进步,人会越来越重视隐私或是变得有些缄默。Zuck 还透露不管是 FB messenger 还是 WhatsApp 上也看出类似的趋势:文本信息的消息数量远比语音消息增长得快。这里给做 AI 的各位公司一个启示:虽然现在语音识别仿佛是标配,但是 AI 系统可能更加需要注意在文本处理上的成熟度,因为人们会大量使用文本控制而不是之前设想的语音控制。虽然后者让 PM 或者 CEO 觉得好像是更便捷更 cool 的人机交互方式。

第五章:语音处理

Zuck 当然也做了语音识别的模块来辅助控制 Jarvis:

Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

上图中的指令就是控制衣柜中的“加农炮”给自己发射体恤(具体可以参考后面的视频)。这个 app 是   Zuck 专门做的 iOS app 来进行语音识别和理解的。之所以做一个全新的 app,而不是用 messenger bot,是因为在 messenger 里打开语音消息需要太多的步骤,有点繁琐。而 Zuck 的使用场景是希望把手机放在桌上,自己可能干其他事,而手机一直在那里听着。这种使用方式有点类似 Amazon Echo: Amazon Echo - Amazon Official Site - Alexa-Enabled

Zuck 说之前开发 iOS 还是在 2012 年,现在再次开发,他感受到整个 ios 和 fb 的 toolchain 的改进巨大,语言和 xcode 的增强使得编程和做 app 的门槛大大降低。

通过开发和使用这个 voice app,zuck 对于 AI 和语音识别在产品上的思考:

  • 语音识别的算法在上下文和联想方面需要加强得还不少;类比人类进行语音识别的时候,不仅在听你当前说什么并记下来,同时要时刻在预测你接下来准备说什么,大脑表现得非常自然而且高效。而计算机,即使最近开始使用 RNN(recurrent neurol network)好了不少,但是依然有很大的提升空间;

  • 语音识别现在在理解人类的支离片语上表现不佳,另外对于常规情况下使用的语音识别能力比较弱。大部分的系统都在做特别功能范围(比如 Google Search, Amazon Echo)内的语音识别。

  • 语音的加入让产品和人之间更加有情感交流,Zuck 觉得这肯定是以后产品发展的方向。能用语音进行交流之后,Zuck 自己越用越觉得有意思,然后开始改进 Jarvis,让其变得更加幽默有趣。还加入了一些游戏和黑话给 Jarvis。

  • 语音的识别和运用方面,zuck 认为可以做的创业才刚刚开始。(所以各位抓住机会!)

第六章:Facebook 的工程师环境

这一段,Zuck 说自己虽然是 CEO,但是从未停止过 coding,但主要以个人项目为主。通过这次开发        Jarvis,zuck 又重新体会了一次整个 FB 的技术环境的魅力,就类似于一个新入职的工程师一样走完了整个 bootcamp 的过程。他说不仅上手实践 AI 和了解了最新 AI 方面的进展,同时意外收获了很多关于开发技术方面的知识。Zuck 赞赏 FB 的代码非常有条不絮,另外在开源上做得很好,甚至 zuck 在文章里亲自列举出 Jarvis 上使用的开源框架:

最后 zuck 欢迎开发者都来使用下这些开源库,来感受下 AI 最新发展的魅力。另外他一直坚持内部工具和技术的基础设施对于一个互联网公司的重要性,所以最后他说:“Building internal tools that make engineering more efficient is important to any technology company, but this is something we take especially seriously. So I want to give a shout out to everyone on our infra and tools teams that make this so good.” 所以这里可以看出,硅谷公司把技术部门真真切切地当做是公司的重要资产,去鼓励去培养;而国内很多公司对于技术团队,更多当成是一种工具,甚至是开支部门。所以各位想单纯醉心于技术钻研的人,早点去硅谷是一条最好的出路。

第七章:下一步

Zuck 的文章到了这里,已经进行到了尾声。Zuck 说虽然 2016 年的挑战已经结束,但是对于 Jarvis 的开发和优化会继续。具体需要做:

  • 开发 Android 下的语音识别 app

  • 接入更多的室内硬件和更多的应用

  • 让 Jarvis 拥有学习能力。Zuck 原话:“If I spent another year on this challenge, I'd focus more on learning how learning works.” 即希望教会 Jarvis 如何学习,或者说得更加酷炫:让 Jarvis 学习如何学习。(小魔王补充:chunk it up,deliberate practicing,feedbacks,10000 hours theory!)

最后 Zuck 准备再抽象一层自己的代码,然后在明年将其开源(接受小魔王覃超的进一步 code review :-D)

第八章:结论

关于结论这部分,Zuck 原文相当得精炼且有意义,我实在觉得应该把英文贴上来,各位都能阅读一下:

“Building Jarvis was an interesting intellectual challenge, and it gave me direct experience building AI tools in areas that are important for our future.

I've previously predicted that within 5-10 years we'll have AI systems that are more accurate than people for each of our senses -- vision, hearing, touch, etc, as well as things like language. It's impressive how powerful the state of the art for these tools is becoming, and this year makes me more confident in my prediction.

At the same time, we are still far off from understanding how learning works. Everything I did this year -- natural language, face recognition, speech recognition and so on -- are all variants of the same fundamental pattern recognition techniques. We know how to show a computer many examples of something so it can recognize it accurately, but we still do not know how to take an idea from one domain and apply it to something completely different. 

To put that in perspective, I spent about 100 hours building Jarvis this year, and now I have a pretty good system that understands me and can do lots of things. But even if I spent 1,000 more hours, I probably wouldn't be able to build a system that could learn completely new skills on its own -- unless I made some fundamental breakthrough in the state of AI along the way. 

In a way, AI is both closer and farther off than we imagine. AI is closer to being able to do more powerful things than most people expect -- driving cars, curing diseases, discovering planets, understanding media. Those will each have a great impact on the world, but we're still figuring out what real intelligence is.

Overall, this was a great challenge. These challenges have a way of teaching me more than I expected at the beginning. This year I thought I'd learn about AI, and I also learned about home automation and Facebook's internal technology too. That's what's so interesting about these challenges. Thanks for following along with this challenge and I'm looking forward to sharing next year's challenge in a few weeks.”

这里可以看出 Zuck 的执行力以及实践能力。一方面通过写 Jarvis 来亲自学习了一下 AI 现在的最近进展,另一方面这种第一手经验很好地反馈回来让他更加有信心来判断以后5-10 年 AI 和相关产品的发展方向。我觉得我自己以及中国的广大创业者特别是投资人都应该学习这种实干的态度,而不是停留在嘴皮上预测未来。

Zuck 认为计算机智能在某些领域做得已经很好,但是最关键的“自学能力”和“举一反三”能力几乎没有(原文:We know how to show a computer many examples of something so it can recognize it accurately, but we still do not know how to take an idea from one domain and apply it to something completely different.)。Zuck 自己话了 100 个小时来做 Jarvis,但是他认为就算花 1000 个小时,也无法让机器能够有自学能力,除非在人工智能领域可以有学术、科学上的重大突破。

从 demo 视频里来看的话,很多时候 Jarvis 感觉并不好用。但是毕竟能够用 messenger+ 声音来控制自己的家庭设备是一件非常酷炫的事情。

---- 附带图片中代码的解读 ----

Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

这段代码是用 PHP 外加 Facebook 的 FBT 写就,总体逻辑:将异步 task 设置好(其中一个 task 就是做图片的人脸识别),另外从 AI API 中取得并设置好 config,最后调用接口并且等待结果。

其中代码细节:

Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

从代码逻辑来看,这应该是 Jarvis 的源代码。从代码细节看,作者的水平还行,但也不够完美。可以看出逻辑清晰但是代码功力不太够 -_-。 这也合情合理,毕竟 Zuck 没时间保持一个高频次写代码的状态,所以肯定是“三天不写手生”。举例来说(如果严格的 code review 的话;哈哈!给 Zuck 做 code review 真是三生有幸!):

  1. 最开始两行:$task 这个变量不需要,直接往 "image" => ... 这里灌即可;而且 $task 这个太泛的名字也没有具体含义。要不就改成:$face_detect_task,当然最好就直接放入 map 里算了。

  2. Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

    这两句写得一般,看起来有点学生时代写大作业的代码的风格;同名变量反复使用,另外对于 null 的检查不对称。

  3. Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

    看到这段代码,我想很多程序员会哭笑不得。首先代码逻辑有点 hacky,初步判断应该是 JARVIS_FACEREC 没来得及完成。。。所以赶鸭子上架暂时用 RC_MODEL 来顶上;毕竟马上就 Christmas 和新年了,Zuck 没做完也要先赶在 deadline 之前发布嘛。注意!我觉得这个态度和做事方式才是对的, 不要拖,也不要等到完美的时候才发布,因为一个项目一个作业永远都无法达到你想要的完美状态。正如 Zuck 自己之前在 Facebook 里强调:“Done is better than perfect!”

  4. Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

    idx 是一个 helper method,其实就等于 $api_config['detection_tier'],但是用 idx 的好处是如果 $api_config 为空,那么 idx 不会崩溃,而是返回 null,而 $api_config['detection_tier'] 直接触发异常。所以这里回头看,Zuck 的 80 行写得并不好,最好写成:$api_config = idx (api_config, 'facer'); 对了,idx 还可以支持第三个参数,就是默认值;如果这个 key 在 map 中没有的话,就直接返回默认值。

  5. Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

    这句是技术含量最高的一句。FaceDetectRequestConfig::gen,这里 gen 代表 generator,由于历史原因,Facebook 的代码用的是 generator,所以异步操作就起名 gen;但是这里用的是新的        resumable function;也就是 ::gen 返回一个 awaitable object(类似 promise,如果你玩 js 或者其他语言),然后前面的 await 就将异步操作出发执行,最后得到从 detection_tier 来的 config。具体关于 async & await,以及 resumable function 可以参考:http://meetingcpp.com/index.php/br/items/resumable-functions-async-and-await.html (这里 PHP 中的 resumable function 是 Facebook 自己做的语法加强;C#里一直就有,而 C++ 会在下一代的C++1y 里引入 resumable    function)。

  6. print "Configured...\n" 这句话太萌,典型的学生项目代码。

    类似于: console.log (xxx) 或者 System.out.println ("Configured...) 或 NSLog (@"Configured..."); 要是公司项目的代码这么写,估计要被 tech lead 直接骂死。

不过这里 Zuck 敢于自己动手开始写代码,并且最后可以有一个 prototype 上线开始能够使用,已经非常厉害了(毕竟很多 CEO 一天到晚忙除了开会,几乎什么都做不了)。

最后 Zuck 那段代码的最佳形态是:

Facebook 早期员工评价扎克伯格的 Jarvis AI 代码——富可敌国之后尚能饭否?  深度

雷锋网特约稿件,未经授权禁止转载。详情见 转载须知

本文链接

相关 [jarvis ai 代码] 推荐:

覃超评价扎克伯格的Jarvis AI代码——富可敌国之后尚能饭否?

- - 博客园_新闻
雷锋网按:本文作者覃超,前 Facebook 软件工程师,现为 FREES 资本技术合伙人. 文章来自@覃超的知乎回答: 如何评价扎克伯格自己写的 Jarvis AI.  此问题缘起于扎克伯格 2016 年 12 月 19 日发布的文章 Building Jarvis,小扎称自己打造了一个像钢铁侠里 Jarvis 那样的家庭 AI 助手.

AI vs AI--当AI与自己聊天

- Tim - Solidot
Shawn the R0ck 写道 "最烦人的事情之一莫过于被强迫与一个白痴对话. 但当你发现你最讨厌与之交谈的白痴其实就是你自己的基于人工智能程序的拷贝...康奈尔创造性机器实验室决定看看当AI尝试跟自己交谈会发生什么. 他们的健谈的AI程序Cleverbot与自己进行文本交互,之后朗读出文本并且显示到视频中.

贪吃蛇AI挑战赛第二季

- 温柔一刀 - 黑客志
如果你对这个活动感兴趣,可以先从这里开始,编写一个AI程序,然后将你的AI程序以及你对平台的改进建议发送到jin.cai20#gmail.com,主办方将会从中选择12名选手参加6月24到25持续一个周末的编程派对,并提供往返交通及住宿费用,下面是活动的详情:. 时间: June 24th – June 26th *.

与其迷恋AI 不如“摸摸”这些开源平台|AI科技评论周刊

- - 雷锋网
自Open AI的成立把AI平台的开源推向高潮后,Google,Facebook,微软,Twitter等公司也“半推半就” 地踏上了自家平台的开源之路,以此来吸引学术界, 工业界的研究人员,让他们更多地分享自己的研究成果. 不管这些巨头的所为(公开分享软件和硬件设计),是为了加速人工智能行业的整体发展进度的初心,还是出于应对竞争对手的被迫之举,对于那些迷恋AI的人来说,都是一件好事.

爱艾未未 -Love Ai Weiwei: 阿飞姑娘:被喝茶

- 立里 - loveaiww.blogspot.com
今天在今日美术馆正在采访陈丹青. 我说,请等等,请给我一点时间和他沟通. 我说,麻烦你找一个帅一点的人来跟我说话. 对方在电话里笑;我特别想认识你. 我走时,陈丹青用力拥抱了一下我. 我有点害羞起来,歪歪扭扭罗圈腿往外走. 他一直送到门口,在后面大笑:走路这么怪. 我递上杂志名片,他们惊讶说,你不是唱歌的吗.

能通过读说明书来学习的AI

- 大宝PKU - 煎蛋
读说明书是学习怎样使用了物品最好途径,尽管大家的习惯一般都是拿起来先试一试,当出了问题之后才急急忙忙去翻看使用说明书. 现在科学家们正试图让机器也能够通过阅读使用说明书来学习,而且他们成功了. MIT计算机科学和人工智能研究中心的研究员们弄出来的两台电脑,一台能够从微软的网站上学习怎样在Windows系统环境中安装软件,另外一台电脑则在通读游戏说明书,并且联系上下文进行理解的过程中学会了如何玩……文明II.

AI能根据625像素判断性别

- Mathack - Solidot
西班牙研究人员开发出一套系统,能实时分析视频信号,根据25x25像素的面部图像判断性别. 这项研究证明了625像素包含了判断性别的足够信息. 新的算法未来可内置于设备中,通过收集观众的人口统计信息测量电视或广告的观众群,或者用于购物中心、商店、银行或任何摄像头获取人口数据的场所.

2017年,语音交互和 AI 发展的 7 种预测

- - 疯狂简报 | MADBRiEF.COM
与2016年的其他热点话题不同的是,语音交互和AI没有让我感到乏味. 我希望你也这样觉得,因为在2017年我们将会看到更多关于这方面的讯息. 来源: 36Kr 翻译:虫洞翻翻. 随着标准和直观功能的出现,并当每一个数据设计师都意识到这有多重要时,语音交互会大幅度提升. 我们如今所定义的和创造的语音交互助理模型,如Alexa和Siri,会长时间影响着未来.

最大对冲基金用AI替代经理

- - Solidot
世界最大的对冲基金管理公司桥水联合基金(Bridgewater Associates)正在构建软件去自动化公司的日常管理工作,其中包括雇佣、解雇和其它战略决策. 基金创始人Ray Dalio希望公司能按照他的愿景运行,即使是在他不在公司的情况下. 根据他的要求,桥水联合基金成立了由精通分析和人工智能的软件工程师组成的实验室Systematized Intelligence Lab.

普通程序员如何转向AI方向?

- - IT瘾-bigdata
眼下,人工智能已经成为越来越火的一个方向. 普通程序员,如何转向人工智能方向,是知乎上的一个问题. 本文是我对此问题的一个回答的归档版. 本文的目的是给出一个简单的,平滑的,易于实现的学习方法,帮助 “普通” 程序员踏入AI领域这个门. 这里,我对普通程序员的定义是:拥有大学本科知识;平时工作较忙;自己能获取的数据有限.