天天看點

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

雷鋒網按:作為一家科技巨頭的ceo,紮克伯格卻依然保持寫代碼的習慣。可怕的自制力,超強的執行力,當比你有錢的人還比你更聰明更勤奮的時候,雷鋒網編輯不禁開始懷疑人生。

以下文章來自紮克伯格的筆記“building jarvis”,由雷鋒網(公衆号:雷鋒網)編譯,未經許可不得轉載。

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

2016年我給自己制定了一個挑戰:打造一個像鋼鐵俠裡 jarvis 那樣的家庭ai助手。

我的目的是了解人工智能發展的現狀。雖然人工智能已經比人們能察覺到的要先進得多,但是依然還有很長的路要走。通過完成這些挑戰,我不僅熟悉了facebook的工程師們使用的内部技術,而且還對智能家居有了全面的了解。

在這一年裡,我打造了一個可以通過手機和電腦進行對話的ai系統。它能夠控制我家裡的燈光、溫度、電器、音樂和安防系統,而且這個ai還能了解我的品味和習慣,可以學習新的詞彙和概念,甚至可以逗我的女兒max開心。jarvis是由python、php和objective c編寫的,運用了包括自然語言處理、語音識别、面部識别以及強化學習在内的人工智能技術。

在本文中,我将會解釋我建立的jarvis到底是什麼,以及我從中學到了什麼。

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

從某些方面來說,這個挑戰比我預想的要容易。實際上,我給自己制定的跑步計劃(2016年跑365公裡)累計花費的時間比這還更多。不過,将我家裡所有的系統全部連接配接起來,并讓系統之間互相通信,卻比我預想的要難得多。

在可以建構ai之前,我必須首先編寫代碼将使用不同語言和協定的系統連接配接起來。我們的電燈、恒溫器和門使用的是crestron系統,音樂流媒體spotify搭配的是sonos音箱,還有一台三星電視機,以及為max準備的nest cam攝像頭,當然,我的工作室連接配接的是facebook的系統。為了能夠通過我的電腦釋出諸如開燈、播放歌曲之類的指令,我不得不對其中一些系統的api進行逆向開發。

此外,大多數的電器甚至都不能連接配接到網際網路。雖然通過支援連接配接到網際網路、可遠端控制的電源開關能夠控制其中的一些電器,但是這還遠遠不夠。比如,如果你希望烤面包機能在接通電源的時候自動開始烤面包,但你很難找到能夠讓你在斷電的情況下将面包按下去的烤面包機。最終,我最終找到了一個1950年代的古董烤面包機,然後把它插在了智能插座上。同樣的,要想連接配接beast(紮克伯格的寵物狗)的自動投食器,則需要涉及到硬體改造工作。

對于jarvis這樣的助手來說,要想能夠幫助更多的人控制家裡的一切,我們需要将更多的裝置連接配接起來。而業界也需要開發通用的api和标準,讓裝置與裝置之間能互相通信。

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

當我寫完能夠讓我的電腦控制我家的代碼之後,下一步就是讓我和電腦之間的溝通變得像日常對話那樣自然。這裡的過程分為兩步:首先實作通過文本資訊來對話,然後增加将語音轉錄成文本的功能。

從尋找關鍵詞開始,比如通過“卧室”、“燈”、“開”這幾個關鍵字,它可以知道我是在告訴它把卧室的燈打開。很快,我就發現它需要了解同義詞,“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(紮克伯格的妻子)在跟它說話,這樣它就可以根據我們的口味推薦不同的歌曲。相比非常具體的指令,我發現我們更常使用開放式的指令。就我所知,目前還沒有哪個商業化的産品在做這個,這應該是一個巨大的機會。

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

人類三分之一的大腦都負責視覺,而ai在了解圖像和視訊方面也有很多難題。這些難題包括追蹤(比如max在嬰兒床中移動是不是說明她醒了?),對象識别(例如房間裡的是beast還是一塊毯子(注:beast是一條長得很像地毯的寵物狗)),以及面部識别(例如誰在門口?)。

面部識别是對象識别中一個特别難的問題,因為大部分人的長相是很相似的,相比之下,區分任意兩個不同的物體,比如一個三明治和一座房子,就簡單得多。但是facebook在面部識别方面的技術能力很強,它能夠很輕易地識别你照片庫中的朋友。當你的朋友站在你的門前的時候,通過面部識别,ai系統就能決定是否讓他進來。

為了做到這一點,我在門口裝了好幾個攝像頭,確定各個角度都能夠捕獲圖像。ai系統目前還不能識别後腦勺,是以多裝幾個攝像頭可以確定我們可以看到那個人的臉。我設定了一個簡單的伺服器,可以持續檢查攝像頭的傳回的圖像,并執行以下兩個程式:

首先,通過面部檢測,來檢視是否有人出現在攝像頭的視野之中,如果它發現人臉出現在畫面之中,就會執行面部識别程式來确定這個人是誰。

一旦确定這個人是誰,就會檢查一個清單來确定他是不是我正在等的人。如果是,就會讓他進來并通知我,客人已經到了。

這種類型的視覺ai系統在很多地方都非常有用:比如知道max什麼時候醒,這樣就可以開始播放音樂或者國語課程;知道我們在哪個房間裡,這樣就可以在不提供位置的情況下,正确地執行沒有上下文的類似開燈這樣的指令。和ai其他的方面一樣,當把視覺提供的資訊與其他能力結合起來時就能發揮最大的功效。比如知道哪些是你的朋友,以及如何在他們到你家的時候給他們開門。當ai系統擁有的資訊量越多,它就會變得越聰明。

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

雖然我在電腦上編寫jarvis,但為了讓它更有用,我希望不管在任何地方都能和它對話。這意味着我必須通過我的手機,而不是放在家裡的某個裝置來和它進行通信。

我開始建立一個messenger bot來和jarvis對話,這比開發一個單獨的app要容易地多。messenger為開發自動程式提供了一個簡易的架構,它可以自動幫你完成很多事情,比如可以跨平台(ios和android)工作,支援文字、圖像和語音内容,推送通知,管理不同人的身份和權限等等。

我可以通過messenger bot發送任何的文本資訊,發送的文本會被立即傳送到jarvis伺服器上并被處理。我也可以發送語音片段,伺服器會将語音準換成文本,然後執行指令。如果在我不在家的時候有人到訪,jarvis會給我發送一張圖檔,然後告訴我是誰來了。

有一點我沒想到的是,雖然我既可以通過語音也可以通過文字來和jarvis對話,但是我使用文字的幾率比我預想的多得多。大多數情況下,打字不會幹擾到我身邊的人。如果我做的事涉及所有人,比如為大家播放音樂,那麼我會選擇語音,但是大多數時候用打字更合适。同樣的,當jarvis和我溝通的時候,我更希望收到文本資訊而不是語音。因為聲音有時候會突然打擾到你,而文本則讓你可以在想看的時候再看。就算是我對着jarvis釋出語音指令,但是如過我正在使用手機,我會更喜歡它通過文本資訊來回應。

這種選擇文字而不是語音交流方式的偏好,其實跟messenger和whatsapp上文字消息比語音消息更收歡迎這一現象是吻合的。這表明,未來的ai産品不能隻專注語音互動,私人消息界面也應該是标配。如果你想讓ai能夠通過文本溝通,那麼選用像messenger這樣的平台比你從零開始開發一個app要容易的多。我一直以來都對ai機器人持樂觀态度,當我開發了jarvis之後,這種互動的體驗讓我更相信智能家庭的未來應該是像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的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年的挑戰。

本文作者:周翔

繼續閱讀