扎克伯格開發筆記:打造Jarvis的日子,我慶幸自己從未停止過編程

作爲一家科技巨頭的CEO,扎克伯格卻依然保持寫代碼的習慣。可怕的自制力,超強的執行力,當比你有錢的人還比你更聰明更勤奮的時候,雷鋒網編輯不禁開始懷疑人生。
圖片描述
2016年我給自己制定了一個挑戰:打造一個像鋼鐵俠裏 Jarvis 那樣的家庭AI助手。
我的目的是瞭解人工智能發展的現狀。雖然人工智能已經比人們能察覺到的要先進得多,但是依然還有很長的路要走。通過完成這些挑戰,我不僅熟悉了Facebook的工程師們使用的內部技術,而且還對智能家居有了全面的瞭解。
在這一年裏,我打造了一個可以通過手機和電腦進行對話的AI系統。它能夠控制我家裏的燈光、溫度、電器、音樂和安防系統,而且這個AI還能瞭解我的品味和習慣,可以學習新的詞彙和概念,甚至可以逗我的女兒Max開心。Jarvis是由Python、PHP和Objective C編寫的,運用了包括自然語言處理、語音識別、面部識別以及強化學習在內的人工智能技術。
圖片描述
開始:把家變成“互聯網”
從某些方面來說,這個挑戰比我預想的要容易。實際上,我給自己制定的跑步計劃(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

歡迎學習c語言c++的小夥伴進c交流學習羣552838805教程和各種資料和工具都放羣裏了歡迎來和小夥伴們一起交流學習進步走上人生巔峯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章