天天看點

頭條實驗室科學家李磊:準确率更高的問答系統和機率程式語言

頭條實驗室科學家李磊:準确率更高的問答系統和機率程式語言

李磊博士在 ACL 2016 現場,右側是本篇論文

一、關于 ACL2016 收錄的論文

/

頭條實驗室科學家李磊:準确率更高的問答系統和機率程式語言

機器之心:首先能否介紹一下這篇論文嗎?包括研究背景,研發方法,以及核心的 CFO 模型等。

李磊:這項工作是我當時在美國百度深度學習研究院時開展的,當時 CMU 的實習生戴自航,百度 IDL 同僚徐偉,和我一起合作,來了頭條之後這項研究繼續進行 。

首先,我們研究的問題是要解決知識類問答,比如說「美國總統是誰」、「哈利波特是誰寫的」,它有别于更加開放和困難的通用問答。我們做的是整個問答系統中的知識類。知識類的背後有個知識庫,我們用的是谷歌做的Freebase,解決的英文問題,但同樣的技術也适用于其他語言的知識庫上,隻要有生成好的知識資料。

頭條實驗室科學家李磊:準确率更高的問答系統和機率程式語言

知識庫裡的資訊表達成三元組形式,比如說有哈利波特、J.K.羅琳,以及兩者之間的「作者關系」。但我們系統回答的問題實際上不是這種三元組形式(直接提三元組形式的問題比較簡單),而是一個自然語言問題,比如說「Who wrote harry potter ?」。知識在知識庫裡表達成三元組形式的結構化資訊,系統要做的事情是問了這個自然語言問題後,從知識庫裡找出這樣的答案。

這個問題的難度在于,1)知識庫非常大,經過篩選後還有 500 萬實體資訊、 7,500 組關系和 篩選之後的 2,200 萬三元組事實資訊(篩選之前是 19 億事實)。是以,從這些海量資料中找出答案是非常困難的。2)除了知識庫很大之後,自然語言的問題本身也比較複雜,因為有多種問法和表達方式。即使同一個問題,對于同一個實體和關系,也會有不同表示,同一個名字也會指向不同實體。比如說「哥倫布因什麼而聞名?」這個主題有可能指發現新大陸的哥倫布,也有可能是俄亥俄州的哥倫布市,甚至是其他實體。3)而我們的訓練資料是有限的,隻有 10 萬個标注資料(注:Facebook做的資料集),包括問題和答案,我們用了其中的 7 萬來做訓練,剩下的 來做驗證和測試。

我們用的方法是深度學習方法加上知識庫,我們的方法分為幾步,首先,我們觀察到,需要把自然語言問題表達成結構化 query ,這種query形式比較接近資料庫裡的SQL,也是選擇一個什麼樣的 object 滿足什麼樣的條件,我們需要把這個結構化 query 裡的條件資訊從問題裡找出來,比如說 Harry Potter 對應知識庫裡的哪個實體(subject),我們需要把這個問句裡的關系(relation)找出來,有了這兩個之後,就能做一個結構化的查詢語句,然後從知識庫裡找出答案。

舉個例子,比如說「What theme is the book that amies of memory ?」,傳統的做法是,為了找到實體,需要把這句話裡所有的詞都當成可能出現實體的集合,比如說 the book 是一個實體,theme、memory 等。但我們真正要找的實體是 amies of memory ,而且要知道這指的是那本書。如果按照傳統方法,會出現很多噪音。

頭條實驗室科學家李磊:準确率更高的問答系統和機率程式語言

而我們的方法是通過神經網絡,用了一個Stacked Bidirectional GRU ,它是一個上下疊加起來的多層雙向循環神經網絡,我們通過這個模型去計算出問題中的實體以及實體之間的關系,之後就是建構結構化的查詢語句以及從知識庫裡尋找答案。

此外,在測試結果上,我們的準确率超過了微軟和 Facebook。(見下圖)

頭條實驗室科學家李磊:準确率更高的問答系統和機率程式語言

機器之心:這次提出的 CFO 方法會考慮上下文的語境了解嗎?

李磊:現在還沒有用上下文資訊,問題之間都是獨立的。

機器之心:在整個模型的幾個部分中,比如說 relation network 、subject network,詞向量是共享的嗎?

李磊:并沒有共享,但也可以做成共享的。另外,我們也基于額外訓練好的詞向量做了實驗,發現效果差不多。

機器之心:在 relation network 中, 對問題用雙向 GRU 模組化的時候,在測試階段是不是可能出現了詞彙表以外的 unknown words(文章中提到有) 出現了之後,是怎麼處理這些詞的,随機初始一個相應次元的 embedding 嗎? 

李磊:對 unknown words 我們是用了傳統方法,特殊标記。

機器之心:注意到整個模型的不同部分之間的關聯性,應該是比較拟合資料集的。最終選擇的從 subject-relation 建構的查詢,應該幾乎都可以從知識庫中找到答案(不論正确與否),是這樣嗎?

李磊:如果這個問題的答案沒有在這個知識庫的話,是沒有辦法找到答案。但我們不需要知識庫裡的每個知識點都有人提過問題,比如說我問過「哈利波特是誰寫的」這個問題,但從來沒有遇到過「冰與火之歌是誰寫的」這個問題,但它依然知道冰與火之歌是本書,而且知道要找的是兩者的關系。

機器之心:把聯合機率的求解近似為分步計算确實是極大提高了計算的效率。那麼,更高層地,有沒有考慮在 single-fact question 的基礎上,做一些多輪的推理工作? 從某種意義上來說,都是一種鍊式優化的過程。

李磊:多輪推理我們已經做了,我們現在也基于 CFO 的方法做了多輪推理,但論文還沒發表。

機器之心:這項研究是在哪個平台上完成的?

李磊:模型和運算用的是 Torch ,整個問答系統是 Python 加 Torch,再加存儲查詢三元組知識庫的 Virtuoso 系統。

機器之心:論文中的方法其實是用神經網絡等方法改進了傳統問答系統 pipeline 的查詢語句的 suject 和 relation 的選擇。有沒有考慮過用生成式模型自動來建構類似于 SPARQL 語句?  目前為止,端對端的模型是否還是比較難以在這種場合下應用?

李磊:我們現在已經是生成式模型,生成了一個 SPARQL Query,隻不過這個 SPARQL 是非常結構化的,實際上這是一個模闆,我們隻需要把模闆中空的地方填進去就行了,而這些空的地方是通過我們的模型從問題裡找出來的。

端對端還是有必要的,如果以後要處理通用問題,有些問題會有非常複雜的 SPARQL 問法,需要非常複雜的 SPARQL 語句才能問出來,在這種情況下就需要生成了,這也是非常難的。

現在流行的端對端訓練的确可以優化整個流程裡面的所有參數,同時獲得新的資料後,非常容易對系統重新訓練。但同時端對端的訓練對模型裡面的每一步都要求能夠後向傳輸梯度。通過知識庫來自動回答問題,實際上是一個多步決策過程,裡面的每一步決策是離散的,包含的知識實體的搜尋和候選結果排序,這裡面通過反向梯度比較困難。更好的做法是通過強化學習(reinforcement learning),就是今年大紅的AlphaGo的類似算法。如何更高效的做到搜尋與排序統一的端對端的訓練,這是一個非常值得研究的問題。

機器之心:接下來,這項研究成果會應用在今日頭條的那些産品和功能中?

李磊:今日頭條有個産品叫「頭條問答」,類似于 Quora 。我們希望對于一些簡單的問題和事實類的問題可以通過自動回答的方式去解決,這樣就可以節省專家人力。頭條問答中還有大量複雜的問題以及觀點性的問題,目前我們的方法還不能解決這些問題,但我相信這方面的研究是會在這類産品上有應用的。

機器之心:根據你的了解,其他問答類産品有用到類似的方法嗎?

李磊:Quora 等比較難的社群類問答還沒有用到,但像 Stackoverflow 這種就用到了機器學習,它不一定是直接回答,而是說可以去做推薦。比如,這個問題推薦給誰來回答,那就需要對問題進行語義了解,以及回答了之後怎麼來評判這個答案正确與否,品質有多高。是以 Stackoverflow 上的問題就更适合用機器學習來做。因為這些問題通常比較具體,且答案唯一。

二、關于機率程式語言(PPL)

機器之心:能否解釋一下機率程式語言的概念,它和貝葉斯網絡、馬爾科夫網絡之間的關系?以及機率程式語言的研究進展?

李磊:機率程式語言是 2013 年興起的提法,這條線的研究非常多,從最早的貝葉斯網絡開始,對于含有邏輯和不确定兩部分内容的事件如何表示,這個問題從八十年代末到現在一直都有研究。

頭條實驗室科學家李磊:準确率更高的問答系統和機率程式語言

1)八十年代出現的是 Judea Pearl 提出的貝葉斯網絡,他在 2011 年拿到了圖靈獎。九十年代中期研究比較多的是邏輯程式設計,那時主要是基于邏輯規則的,當時有個很著名的程式設計語言叫 Prolog ,後來有人對它做了擴充,加上了機率,叫做機率邏輯程式(Probabilistic Logic Programming),把表達能力提升到可以去描述不确定事件。

2)2000 年到 2005 年前後,又有很多人把一階邏輯和機率結合起來,因為一階邏輯比傳統的邏輯變成的表達能力還要強一些,這展現出追求表達能力的研究主線,最早的貝葉斯網絡實際上是命題邏輯和機率結合,而一階邏輯的表達能力比命題邏輯要強,後面要做的是把一階邏輯和機率結合起來,這個叫做機率一階邏輯。

3)這個發展到 2006 年,我當時的博士後導師 Stuart Russell(作者注:人工智能專家,經典教材《人工智能:一種現代方法》作者) 帶領他的博士Brian Milch發明了貝葉斯邏輯 BLOG ,這不光包含了一階邏輯和不确定,還融入了指代不确定性,比如「我知道這個屋子裡有幾個人,但我不知道他們是誰」。當時把一階邏輯、機率和指代不确定三個東西都加起來,把機率程式語言方面的表達能力又提升了,進而發明了一種新的機率程式語言。

4)同期還有些其他語言,比如華盛頓大學在 2006 年提出的馬爾科夫邏輯網絡,也是把一階邏輯和機率結合起來,但機率是用通過馬爾科夫無向圖來表示的;Joshua Tenenbaum和他的學生Vikash Mansinghka 和Noah Goodman在 2008 年發明的 Church,但表示方式是不一樣的,這個語言也是非常通用的。

5)2012 年底 2013 年初,DARPA 把一些機器學習、程式語言和計算機系統的專家集中起來去探讨如何擴充機器學習技術,讓更多的人去使用機器學習,我當時代表加州大學伯克利分校去參加。當時會議上提出來的一個新的概念就是機率程式設計(Probabilistic Programming),包含了之前的很多特例。機率程式設計的核心思路是給機器學習或者人工智能提供一個程式設計語言,它可以很容易的描述一些模型,同時自動為這個語言上的模型做機率推理和邏輯推理。一些應用方,比如社會學家、心理學家、經濟學家和資料科學家,他們不需要特别深入的了解機器學習,隻需要了解他們所在領域的問題,然後建立一個模型來描述人的認知,他就可以很容易的用這個語言去寫一些模型出來,而且可以自動推理。模組化的人不需要寫非常多的程式去做計算和推理,因為通常這些部分都是比較難且耗時間的。這是當時提出的一個目标。

6)2013 年 DARPA 還釋出了一個很大的研究計劃(作者注:即 PPAML 項目,用于先進機器學習的程式程式設計) ,現在美國在機率程式和程式推理系統方面的研究是非常前沿的。當然,目前這個領域的研究還處在初級階段,因為大家很有野心,一方面要把機率程式語言做的非常通用,能夠去描述各種模型,不管是機率的,還是非機率的;同時又希望最後做出來的自動推理算法運算速度非常快,既要有表示性又要有高效性,這兩個目标同時達到是非常困難的。

機器之心:之後,你還為 Blog 語言做了優化機率推理的 Swift 。

頭條實驗室科學家李磊:準确率更高的問答系統和機率程式語言

李磊:在這個之前,大家做機率程式推理采用的方法都是通過解釋型的,而我們是寫了一個編譯器對機率推理做優化,使得我能夠為使用者寫出來的每一個模型專門做推理方面的優化,就像我寫了一個 C++ 程式,用編譯器可以對這個程式做優化,使它的計算速度可以非常快。如果類比一樣,用 C++ 寫的程式要比用 Python 寫的快幾十倍,同樣,我們寫的編譯器也會比傳統的機率推理快幾十到上百倍。

頭條實驗室科學家李磊:準确率更高的問答系統和機率程式語言

三、關于知識表示、問答和自然語言處理

機器之心:知識表示是人工智能領域裡的研究難題,你能否介紹一下這方面的研究進展?

李磊:知識表示是人工智能最核心的問題,一般有五個架構。第一個是深度學習,它是用神經網絡去逼近任何一個函數,這種表示方法在有監督學習裡是非常有效的,尤其是在現在資料量非常大的情況下。第二類是基于機率圖模型,比如貝葉斯網絡和馬爾科夫網絡,這是去表達變量之間依賴關系的,不确定性。現在對這類架構又有了一些擴充,比如機率程式語言,可以表達既有機率同時又有邏輯的關系,将機率和邏輯結合起來去描述這個事件的不确定性。第三類是矩陣分解和稀疏方法,這種架構認為,表達每個物體需要多個特征,但并不是每個物體的所有特征上都有觀測值,真實的表示可能是比較稀疏的,用稀疏模型去描述這個世界和物體之間的關系,這個在推薦裡用的非常多。第四類是核方法(Kernel Method),它的核心是去描述兩個物體之間的相似度,可以是用線性的方法和非線性的方法。最後一類是基于決策樹,以及樹的組合。這五類是從八十年代至今用的比較多的知識表示的架構,各有優劣。

具體到我們的這篇論文,我們在解決這個問題(知識類問答)是用的第一類深度學習的方法,我們在解決其他問題時也有用到機率圖模型的。

機器之心:問答的發展離不開知識圖譜,而目前知識圖譜的建構又比較困難,你認為特定領域内的知識圖譜有什麼比較好的快速建構方法嗎?

李磊:我不是知識圖譜方面的專家,專門做這方面的主要是研究資訊提取,知識圖譜還是比較困難的。那對于問答來說,并不一定依賴于知識圖譜,後者隻是其中的一個方法。但知識圖譜确實非常有用的,在建構方面最近出現了一些新思路,比如華盛頓大學Oren Etzioni 提出了Open information extraction,CMU  Tom Michell 提出了 Never Ending Learning ,不斷去讀網上的文本資料,希望從中抓出實體和實體之間的關系,然後每天不斷的讀,不斷的積累 confidence ,這樣對實體的資訊擷取就越來越多,每天都在進步,就像人在擷取知識一樣。

機器之心:問答和自然語言處理也有着密不可分的關系,你如何看待這方面的研究?

李磊:我把自然語言處理問題分成簡單任務和困難任務,簡單的又分成兩種,一是對句法結構進行分析,比如中文需要分詞;另一種是淺層語義了解,比如說「從北京到上海乘火車怎麼走?」,你把起點「北京」、終點「上海」找出來,把方式「乘火車」找出來,那整個句子的語義就了解了。這是淺層了解。

困難的任務包括機器翻譯、閱讀了解、對話、問答(問答是對話的一類),我認為可以把自然語言處理問題都歸約成對話問題。

©本文由機器之心原創,轉載請聯系本公衆号獲得授權。