從NLP到「自然語言理解」,Facebook如何讓Messenger更懂人類?
雷鋒網按:Facebook的AML和FAIR團隊合作進行自然語言處理對自然語言理解進行著合作研究。在2017年4月19日舉辦的F8開發者大會上,Facebook向公眾介紹了他們的研究進展、自然語言理解在Facebook產品中的應用,並且介紹了平民化的自然語言理解平台CLUE,希望依靠大家的力量,繼續豐富自然語言理解的應用。
演講者:Facebook工程主管Benoit Dumoulin,技術項目主管Aparna Lakshmiratan。雷鋒網AI科技評論聽譯。
(首先上台的是Benoit)大家好,我是Benoit,我是Facebook自然語言理解團隊的負責人。
我們團隊隸屬於AML(applied machine learning,機器學習應用小組)。今天我想給大家講講幾個我們團隊最近的工作成果,講講我們正在研究什麼,同時也會講到我們遇到、並且正在努力解決的問題和挑戰。等一下我還會請一個同事上台來介紹一個有意思的產品,其中就用到了我們團隊開發的技術。
Facebook為什麼需要自然語言理解?進入正題,當你打開Facebook之後,你肯定會用到文字。文字是重要的溝通方式,Facebook的每個產品裡面都能看到文字,Instagram,Messenger,Whatsapp等等,文字真的到處都是。而你每天在Facebook看到的或者寫下的文字,是沒有任何要求,任何人都可以隨意發揮的,不需要戲劇化或者怎樣。所以如果我們能夠理解這些文字,那我們就肯定可以讓每個用戶的使用感受都得到提升。
理由是這樣的,拿我自己舉例吧,其實我是法國裔加拿大人,在蒙特利爾長大的(觀眾喝彩),(笑)。那我呢,工作是科學家,業餘時間喜歡冰球,所以當我每天打開Facebook的時候,我想看到我朋友們的新動向、想跟他們聊天;我也想知道最新的冰球比賽結果如何,你看現在就有一場,我挺關心我喜歡的俱樂部怎麼樣了——不告訴你們叫什麼(笑)。同時呢,除了看這些新聞,我還需要關注機器學習方面的動向,我得知道下一場會議在什麼時候、都有誰會去、我的朋友們去不去、是誰組織的、有沒有什麼優秀論文等等,各種各樣的事情。為了達到這樣的目的呢,我們就需要想辦法理解這些文字內容,然後根據我的興趣進行匹配。
我們經常提到「自然語言理解」和「內容識別」,要表達什麼意思呢?簡單說就是能給別人解釋——一段文字經過演算法處理以後,我們能夠做出結論或者進行引申。在我們能做的事情裡面,最基本的之一就是給文字分類。
比如(右邊)這段內容是我發的,把它輸到機器里,就能訓練它如何把內容分類成為話題,然後就能跟別人解釋了,「哦,這段內容是關於廚藝的。」 (左邊)還有一段關於籃球的內容是我的朋友Jole發的,不過如果你仔細看一下文字的話,你就會發現它也是關於廚藝的,只是不那麼明顯。不過不用擔心,我們訓練的機器也可以處理這樣的內容。
我們當然還能做更棒的,更深入地理解一段話,區分出其中的實體。這是另一個朋友的動態,要去看演出,這個樂隊我沒怎麼聽說過。當你仔細看一下文字部分就會發現,名字挺逗, 樂隊名字是「Muckbucket Sunshine」,演出地點是「BOM BOM ROOM」。那如果這種時候我們能區分出實體,知道了是哪個樂隊、在哪個場館演出,然後就可以把它匹配給喜歡音樂的人;然後呢,我們不需要把所有音樂相關的信息都推薦給他們,只需要推薦跟這個樂隊或者這個場館相關的就可以了。我們所講的「內容識別」大概就是這樣。
對於Messenger,你們在聽過昨天的演講、參加一些活動以後就會知道,一旦能夠理解文字內容了,就可以做一些很有趣的事情。比如這段對話,我和我的兩個朋友打算一起出去喝酒。區分一下實體的話,就是我們要去palo alto,時間也能看得出來。這裡我想強調一下,人類可以很容易地理解這段對話,實際上我們3個人用了3種不同的方式來表達時間。
Facebook的目標和方法所以我們的目標就是設計和訓練人工智慧,讓它們對文字內容的理解準確度達到人類水平,確實是這樣。這個目標其實挺難達到的,我試著跟你們解釋一下,Facebook上面的文字完全是自由地書寫的,沒有任何限制,用戶們想怎麼寫就怎麼寫,對不對。
我們打算怎樣達到這個目標呢,不是什麼秘密,我們用了深度學習的方法。我們最重要的方法之一是來自這篇論文的。它的名字叫《從零開始進行文本理解》(《Text understanding from scratch》),是幾年前公開的,其中介紹了可以用深度學習,就是只需一個標準的網路模型就能進行語言識別,並且解決大多數在其中遇到的問題。我們跟Facebook的研究團隊一起研究了這篇論文,然後我們就決定建立一個能夠支持論文中這樣的演算法的平台。
這是我們在Facebook建的這個平台建好以後的樣子,我們把它叫做Deep Text,是幫我們達成文本識別方面目標的秘密武器。我們把這個平台建立得可以靈活切換,還可以升級拓展。我們每天會拿很多文本給它訓練或者處理。它需要支持多種語言,如果你參與了之前的演講,你一定明白我們有很多用其它語言的用戶,他們同樣會用不同的語言創造很多內容,我們也需要理解。還有,這個方面有許許多多的問題需要解決,我們希望這個平台能夠以無縫的方式解決許多種不同的問題。
我剛才解釋過的內容分類、實體識別和區分只是眾多待解決問題中的幾個,我們還可以做很多別的事情。我等下還會說一個叫做「文本相似性」的,也是能夠很自然地用這樣的平台解決的。現在我們回過頭來再講一下Deep Text,看看它是怎麼解決文本分類的問題的。
剛才說過Deep Text用到了深度學習,其中很有意思的一點就是單詞是以向量的形式表示的。我們在向量空間里表示這些詞,這樣一來,語義學上相似的詞也就會處在更接近的位置上;不怎麼相似的詞就會離得很遠。這裡是一張這種表示方法的示意圖,裡面的藍色和粉色點就是單詞。可以看到,幾個球類運動的名稱挨得比較近,其它概念性的詞雖然也跟運動相關,但是離得就要遠一些。
我們實際的措施,基本上是基於卷積網路的,這是一種很自然的吸收組合上下文的方法。這裡的「上下文」是指,如果你單獨拿一個詞出來,它可能會有好多種含義,但是當這個詞在句子中、有上下文的時候,那這個詞的意思就會變得明確得多。這就是我們這種方法可以很自然地做到這件事的原因。基本上你也自己能做一個話題或者分類識別器,就用這樣的網路。
剛才我提到了文本相似性,它可以很好地說明我們這個平台的靈活性。關於文本相似性,我們就拿上一頁的那種網路,然後把它拓展成了一個複雜得多的模型,像這樣。在這裡我們要做的是,用一側的網路對一份文本內容進行分析建模,我們把這種模型叫做「雙塔模型」,如果你是業內人士的話,你肯定明白我是什麼意思。所以你用一側的網路對一條文本進行建模,用另一側的網路對另一條文本進行建模,然後再用一個函數對語義區別大的進行懲罰。
有了這樣的方法,我們就可以做很厲害的事情了。比如這個,我不是喜歡冰球嘛,那麼有了這樣的模型,如果有一個我喜歡的動態,那這個模型就可以學會找到更多的語義類似的動態,然後我就可以看到更多自己喜歡的東西。這個模型挺厲害的,我們在很多Facebook的產品中都用到了這個模型。
這是我們當前所做的,對於未來,我們想要做得更好。這是我們在通往與人類類似的文本識別準確率路上的小目標之一,我們可以把文字和圖片或者視頻進行聯合識別。還是回到我朋友Jole的這個動態,文字部分是很隱晦的,但是這張圖片非常好理解。所以如果把兩者加以結合,讓圖片和文字裡面的信息都發揮作用,建立一個聯合識別的模型,就肯定會對這份內容有很好的理解。
以上就是我們最近在做的事情,我們也一直努力做出更好的成果。那麼我就講到這裡,下面我會邀請我的同事上台,她會繼續給大家講一些的實際產品,其中就用到了我們團隊開發的技術。
(Benoit走下講台,觀眾鼓掌,Aparna走上講台)
謝謝Benoit,我是Aparna,我來跟大家講講目前Deep Text是如何運用在真實的Facebook產品中的。我不知道大家有沒有想過,實際上人們會用Facebook的群組做各種各樣的事情,尤其是用它來買賣東西。
自然語言理解已經在改善用戶體驗大概一年之前,群組的商務團隊找到我們,讓我們幫忙看看有沒有辦法知道一個動態是不是關於賣東西的;如果真的要賣東西,我們能不能幫用戶更好地達成他的目標,來給用戶更好的使用體驗。這其中的難點是,當用戶想要賣東西的時候,我們不想給用戶發動態的方式加上任何束縛,我們還是希望用戶用自然語言、自由地表達,但是我們還是要能夠識別出用戶想要賣東西的意願。當我們有了Deep Text以後,我們就可以做一個高精確度的分類器,它可以閱讀用戶的動態,看看用戶有沒有賣東西的打算。而且它還可以識別得更深,就像剛才Benoit說的那樣,識別文本中的實體,在這個場景下就可以是產品名稱、價格、主要特性,然後我們就可以給用戶提供很有吸引力的使用體驗。
再舉一個例子,社交推薦,我在自己的Facebook上都經常會使用這個功能。藉助Deep Text,我們可以觀察用戶的動態,如果你在讓你朋友幫忙推薦東西的,比如好吃的飯館、好玩的活動,又比如這個例子里,想找一個靠譜的理髮店。我們能做的就是,用Deep Text判斷用戶想要做什麼樣的事情,一旦判斷出來,接下來的事情會給用戶很棒的體驗,當你的朋友給出建議以後,評論會分類,找出其中的實體,更重要的是把找到的實體鏈接到Facebook的地址簿里,然後展示成美觀的地圖,方便用戶互動,最終達成自己的目標。
最後再說一個應用的話,你們可能在昨天的演講里已經聽過了,那就是Messenger中的M建議。當M覺得它能夠幫助你做什麼的時候,它就會自動在你的聊天中跳出來。它吸引人的地方,就是縮短了從「想做」到「做成」之間的距離。所以M可以幫忙做很多你想要做的事情。比如,當M發現你要去哪裡的時候,它可以幫你叫一輛車,看你喜歡Uber還是lift,而且可以不用離開Messenger界面就叫到車。現在這段視頻就演示了當M發現用戶打算叫外賣,只要點一下,就可以用一種新的體驗叫到外賣。
而且你還會發現這種體驗是共享化的,對話里的每個人都可以參與這個點餐的過程。點好以後仍然通過M就可以完成付款。所以這些事情都可以不用離開Messenger界面就可以搞定,而隨著M變得越來越智能,我們也希望有更多類似這樣的建議可以給更多的用戶意願帶來方便。
接下來我想講講,當我們在研發這些產品的時候都遇到了一些什麼樣的困難。
第一個困難是,很難批量複製機器學習所需要的專家。大多數時候,我們團隊的機器學習專家和產品團隊的工程師一起合作,做出這些非常高準確度的分類器。但是你會注意到,在我提到的這些應用例子里,我們還想給很多很多別的用戶意願做出分類器,還有很多很多的實體我們想要識別提取,但是很明顯,我們沒辦法像批量化建立功能一樣地讓機器專家們也批量化。
第二個問題是重複使用性,我們AML團隊很看重這件事。回想一下前面我舉的兩個例子,其中有一個提取地址的功能,我們會覺得這個功能既要用在Messenger的M建議功能里,也要用在社交推薦里是很自然的事情。所以我們也在想如何才能建立一個平台,讓不同的程序都能共享和重複使用這個平台的模型、特性以及數據,這樣它們就都可以找到突破口,避免開發的時候要每次重複做類似的工作。
第三個難點你們應該都理解,機器學習的關鍵是數據,高質量的有標籤數據;要獲得這樣的數據,大家可能都知道,不僅僅是難,而且還很費錢。所以我們也在想如何優化標籤,讓我們在訓練這些分類器和提取器的時候儘可能提高標籤的使用效率。
介紹一個平台給你認識一下吧,它叫做CLUE
這幾點就把我們引向了CLUE。CLUE是一個語言識別引擎,是一個自助式的平台。
而CLUE做的事情,是讓機器學習變得民主化,它用優秀的人工智慧和漂亮的用戶界面吸引著人們進入,這樣Facebook的每個用戶,不一定非要是機器學習專家,都可以到CLUE裡面用最先進的自然語言理解技術建立一個實體提取器和內容分類器。這樣,當任何的新應用需要的時候,都可以由CLUE這個統一的入口來建立提取器和分類器。
第二個方面是,CLUE是建立於Deep Text和Facebook的AI開發平台FB LearnerFlow2和Caffe2之上的,相信你們今天已經聽說過它們了。對Facebook整體來說,這些怕平台極大地提高了靈活性,讓人們可以共享和重複使用模型、數據和特性。
第三個方面是對標籤效率的提升。CLUE使用了「主動學習」功能,這個功能在機器學習社區經常可以見到,讓它可以為獲取到的標籤做出優化,讓分類器只學習它還需要學習的、還沒有弄明白的標籤。
接下來,我會站在一個想要運用CLUE的工程師的角度,利用它自助式的設計,建立一個分類器,就比如叫外賣的吧。那麼你首先需要做的事情是收集一些數據,你需要先給分類器一些正確的樣本,比如能表現出叫外賣意願的短語或者句子。你可以看到,CLUE提供了一個非常平易近人的用戶界面,帶有一些關鍵詞搜索來提示你,方便你輸入帶有這種意願的語句。
在這個例子里,「我想吃賽百味或者漢堡王」就帶有叫外賣的意願,算是一個不錯的開始。你可以添加許多這樣的確實具有意願的句子,來達成你的目標。正確和不正確的樣本都行,當你開始收集以後,你需要做的就是給他們加標籤。
同樣地,CLUE有一個美觀的用戶界面來讓你做這件事。你不僅可以標出哪些有意願,哪些沒意願,而像Benoit前面說的那樣,還可以給實體加標籤。對我們這個例子來講,「賽百味」和「漢堡王」都是值得加標籤的內容,可以幫助你達成你的目標。
當你添加好標籤以後,CLUE就會自動地在後台訓練出一個分類器。在你添加標籤的過程中,你就已經得到了一個可以使用的分類器了。如果你才剛剛開始的話,效果可能還不是很好,但是畢竟有一個了。然後你就可以看看分類器運行的狀況如何。
CLUE支持多種可視化方式,比如召回率曲線、AUC曲線等等,很多種圖形供你選擇。現在你還可以監控你的分類器運行狀況如何,來看看你計劃的任務完成得如何。
你還可以用CLUE做一件厲害的事情,就是你可以用這種初始狀態的分類器去分類真實的Facebook信息流,看看結果如何。我來演示一下要怎麼做,在用這個分類器對真實的信息流分類以後,可能很多東西已經分類對了,但是更重要的是,能看到有哪些東西分類錯了。
在這個例子里,CLUE就告訴你,你的分類器好像有點弄混了,分不清「能送上門嗎」和「我們端著麵條說吧」。這就可以提示你如何改進數據和標籤,給分類器更正這些錯誤,給怎樣得到越來越好的結果指明了方向。
這就是我前面提到過的主動學習循環。隨著你調整好了你的模型,當你對結果滿意的時候,就可以點一下CLUE裡面的「部署」按鈕,就這麼簡單。點一下按鈕,你的分類器就可以部署到所有的數據中心裡,這樣,只要有需要的Facebook產品團隊都可以到其中選擇、並把你的分類器應用到他們的程序中。
算上Deep Text和CLUE,我們使用在Facebook產品裡面的模型已經超過了200個。這裡面很厲害的事情是,不僅機器學習的專家們使用這些模型,Facebook里不同產品團隊的科學家和工程師也在用這些模型。
在這場演講的開頭,Benoit說我們真正的目標是通過各種各樣的應用,藉助數百萬計的內容把人和人連接起來。今天的Facebook已經做得很好的事情,是通過利用社交信息流,藉助你朋友們所說的話、所做的事把你和內容連接起來。我們很想要拓展這件事情,想要把你和這世界中你感興趣的數百萬計的內容也連接起來。即便今天說了這麼多,其實我們也只是剛剛開始,為了讓AI能夠達到這些目標、提供這些新的用戶體驗,還有很多的事情等待我們去做。謝謝大家!
雷鋒網AI科技評論聽譯
via Natural Language Understanding @Facebook
※抓住那個亂「嗶——」的人!
※「光語者"謝崇進:我對摩爾定律的承諾
※深度 | 「光語者」阿里技術總監謝崇進: 我對摩爾定律的承諾
TAG:雷鋒網 |
※自然語言的並列:preference semantics at its worst
※Teacher stretches beyond classroom into culture 「學好英語需要真實的語言環境」
※Python vs Ruby: 誰是最好的 web 開發語言?
※蘋果 Swift 語言之父 Chris Lattner 加入 Google Brain
※SCI里的語言歧義,Respectively用法解析
※使用Go語言來理解Tensorflow
※include once和require once語言結構
※詳解go語言的array和slice「一」
※即將開學,Pre-Sessional語言課程fail了怎麼辦?
※Python和Ruby 誰是最好的Web開發語言?
※PHP中require和include語言結構的比較
※Java 之外的選擇,Google 宣布 Kotlin 成為 Android 官方開發語言
※三問 Christopher Manning:超越模型存在的語言之美
※Go語言中 select和switch 的比較
※R語言讀取Google Trend數據
※Windows 10 正式迎來全新 Fluent Design 設計語言,顏值果然更高了
※C語言中define和typedef的區別
※如何看待Kotlin成為Android官方支持開發語言?
※為什麼你必須摒棄 Java,全面轉向 Kotlin 語言?