OpenAI提出新型神經網路:自動計算詞對象,實現實體消岐
選自OpenAI
作者:Jonathan Raiman
機器之心編譯
參與:許迪、黃小天
本文通過讓神經網路決策一個詞是否屬於 100 個自動發現的「類別」(非專屬範疇)之一,從而建立了一個可以自動計算單詞指稱對象的神經網路。該方法在若干個實體消岐(entity disambiguation)數據集上實現了當前最優的提升。
通過讓神經網路決策一個詞是否屬於 100 個自動發現的「類別」(非專屬範疇)之一,我們已建立一個神經網路,可以自動計算一個詞所指稱的對象。比如對於語句「獵物看到美洲虎(Jaguar)穿過叢林(Jungle)」,系統會執行「20 個問題」來分析美洲虎屬於哪個預分的類別,而不是去試圖直接把美洲虎歸類到車、動物或者其他類里。這一方法在若干個實體消岐(entity disambiguation)數據集上實現了當前最優的巨大提升。
論文鏈接:https://arxiv.org/abs/1802.01021
代碼鏈接:https://github.com/openai/deeptype
在我們的訓練數據中,jaguar 指稱汽車的概率是 70%,指稱動物的概率是 29%,餘下 1% 的概率是飛行器。按照我們的類別,第一個實例的歧義不會改變很大,這個模型明顯認可了這張圖像是美洲虎(動物)跑在高速公路上——但是第二個實例中歧義改變很多,模型不認可圖像是美洲虎(汽車)在叢林里穿梭。
我們在 CoNLL(YAGO) 上達到了 94.88% 的準確率(之前的最高是 91.5% 和 91.7%),並在 TAC KBP 2010 挑戰賽中達到了 90.85%。先前方法使用分散式表徵。類別幾乎可以在這些任務上完成,完美的類別預測也只能達到 98.6%-99% 的準確率。
高階綜述
我們的系統採取以下步驟:
1. 提出每一個維基百科內部鏈接來確定對於每一個詞所屬的類別。舉例,當在維基百科頁面上遇到這個鏈接:[jaguar](https://en.wikipedia.org/wiki/Jaguar),我們可以總結 https://en.wikipedia.org/wiki/Jaguar 是 jaguar 的意思之一。
2. 用維基百科類別樹來確定每一個實體屬於的類別。舉例,在 https://en.wikipedia.org/wiki/Jaguar_Cars 這個維基百科頁面的底部是這些類別(它們有其專屬類別,比如汽車)。
3. 選一個有 100 種類別的列表當作你的「類系統」,然後最大化這個分類從而使其可緊湊地表徵任何實體。因為我們懂得映射實體與類別,所以給出一個類系統,我們可以表示每一個實體為一個 100 維度的矢量,這個矢量表示與每一類別的所屬關係。
4. 使用每一個維基百科內部的鏈接及其內容,生產訓練數據映射一個詞+內容與那個 100 維度的對應相應類別的二進位表達式,然後訓練一個神經網路來預測映射。這個系統連接起了之前的步驟:維基百科的鏈接聯繫起了一個詞與一個實體,我們知道第二步里的每一個實體的類別,第三步在我們的種類里選擇了類別。
5. 最後,給出一個詞和附帶的內容,我們的神經網路的輸出就可以被理解成輸入詞所屬於每一類別的概率。如果知道確切的每一類別的所屬關係,我們會把類別範圍縮小到一個(假設完美分類)。但是我們必須要問大約 20 個問題,才能用貝葉斯理論去計算這個詞所屬類別的概率。
更多實例
以下是我們系統的其他實例:
清洗數據
維基百科的知識圖可轉為訓練數據源,從而把細粒度實體映射到類別。我們應用它的實例關係遞歸的去確定一個給定實例的類。舉例,任何人類節點派生的節點都是人類類別。維基百科也可以通過它的類別鏈接提供實例到類別的映射。
維基百科內部鏈接統計提供了一個有關特定片語指稱實體的概率的好的評估。但是,這個有雜訊的,因為維基百科經常鏈接到一個具體的實物而不是連接到類別本身,代指:(國王--這個詞被連接到 Charles I of England)或者鏈接有時候會鏈接到外號(轉喻)。這會造成一次關聯探索(比如國王這個詞有 974 個關聯實體)並且總有被扭曲的鏈接(舉例:女王鏈接到女王樂隊 4920 次,伊麗莎白二世 1430 次,還有 32 次君主)。
最簡單的方法是刪除少見的鏈接,但這會丟失信息。我們做的是用維基百科屬性圖來排序這些鏈接,如下圖所示:
在這個過程之後,國王從 974 個降到了 14 個關聯實體,同時女王到君主的鏈接數量從 32 增長到 3553 次。
學習一個好的類別系統
我們需要選擇最佳的類別系統和參數,從而最大化消歧精確度。這裡有大量的可能的類別集,所以讓一個準確的答案變得很棘手。相反,我們通過啟發式搜索或者隨機優化(進化演算法)選擇一個類系統,然後藉助剃度下降訓練一個類別分類器來預測類系統的行為。
我們需要去選擇有歧義的類別,(這樣可以快速削減可能的實體集),同時輕鬆學習(所以周邊的文字是用來讓一個神經網路知道這裡有這樣一個類別)。我們通過兩種啟發法為我們的搜索提供信息:可學習性(預測分類器的訓練結果的曲線面下平均面積數);預測正確性(如果我們能完美地預測所有類別,就可以完美地消除歧義)。
在給定語境窗口的情況下,我們訓練一個二值分類器來預測我們資料庫里 150000 個類別中的每一個的所屬性。這個分類器的曲線下面積就變成了這一類的「可學習性分數」。高的曲線下面積意味著這一類是容易被從內容中預測的。表現差可能意味著我們的訓練數據很少,或者詞窗口幾乎沒有任何用處(這種情況一般對於非自然的類比如 ISBN 是正確的)。訓練我們的整個模型需要數天,因次我們使用一個更小的模型作為我們的「可學習性分數」的代理,同時訓練時間只需 2.5 秒。
我們現在可用這些可學習性分數和計數統計來估計給定類型子集的性能作為我們的類型系統。下面你可以跑交叉熵方法去發現你瀏覽器里的類別。注意改變取樣大小和懲罰是如何影響解決方案的。
為了更好地可視化類別系統設計的哪一部分簡單,哪一部分又比較難,我們希望你可以親自試手設計。選擇一個高級域名後,你可以開始查看歧義實例。有可能的回答別圈起來顯示在頂端,正確答案是有顏色的圈(hover 以查看其名稱)。最下面的一排包含了你可以用的類別。連接頂端與底端的線顯示繼承關係。選擇你想要的關係。一旦你有了足夠的關係去區分正確的答案,這個實例就是有歧義的。
神經類別系統
從我們的類系統優化中選用最好的答案,然後我們可以用類系統生產出來的標籤來標註維基百科的數據。用這個數據(在我們的實驗里有英語和法語的 400M 個標記),現在我們可以訓練雙向 LSTM 來獨立地預測每個詞的所有類別屬性。在維基百科源文本中,我們只監督了內部的維基鏈接,但是這也足夠訓練出了一個在 F1 上預測類別準確率為超過 91% 的深度神經網路。
推理
預測文檔中的實體通常依賴於不同實體之間的「一致性」度量,比如:在一個長度為 O(N^2) 的文檔里,測量每一實體相互之間的契合程度。但我們的運行時間是 O(N),因為我們只需要在字典樹(trie)中查找每個短語,將短語映射到其可能的含義。我們根據維基百科裡的鏈接頻率,排序所有可能的實體,接著按照這些鏈接是否仍屬於該類而更精確地改變排序。可通過指定它們的類別歸屬(人、動物、國家、周期等)添加新實體。
下一步
在解決這一問題上,我們的方法與之前有很多不同。我們感興趣的是分散式表徵的端到端學習與這裡開發的基於類別的推理相比表現如何。這裡的類型系統是使用一個小的維基百科子集發現的,將其擴展到整個維基百科能夠帶來一個應用更廣泛的類別系統。希望我們的代碼對你有幫助!
本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。
?------------------------------------------------
TAG:機器之心 |