深度 | 萬物向量化:用協作學習的方法生成更廣泛的實體向量
2017-12-11
選自blog.insightdatascience
作者:Javed Qadrud-Din
來自 Insight 的 Javed Qadrud-Din 開源了一種通用的實體嵌入算法,相比谷歌的 word2vec 模型能實現更廣泛實體(包括名人、商家、用戶等)的嵌入、更高的準確率以及少 4 個數量級的數據需求量。
GitHub 鏈接:https://github.com/javedqadruddin/person2vec
Javed Qadrud-Din 先前曾在 IBM 公司的 Watson 團隊擔任業務架構師。他在 Insight 開發了一種新方法,使得企業能夠將用戶、客戶和其他實體有效地表示,以便更好地理解、預測和服務他們。
企業通常需要了解、組織和預測他們的用戶和合作夥伴。例如,預測哪些用戶將離開平臺(流失預警),或者識別不同類型的廣告夥伴(集羣)。這一任務的挑戰性在於要用一種簡潔而有意義的方式來表現這些實體,然後要將它們輸入一個機器學習分類器,或者用其他方法進行分析。
靈感來自 NLP
最近,自然語言處理(NLP)領域最重要的進展之一是來自谷歌的一組研究人員(Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, Jeffrey Dean)創建了 word2vec,這是一種將單詞表示爲連續向量的技術,這種連續向量稱爲「嵌入」(embeddings)。
他們在 1000 億個單詞(已開源)上訓練出的嵌入,成功地捕捉到了它們所代表的單詞的大部分語義含義。例如,你可以將「國王」的嵌入,減去「男人」的嵌入,再加上「女人」的嵌入,這些操作的結果會很接近「女王」的嵌入——這個結果說明谷歌團隊設法編碼人類文字含義的能力已經到了幾乎令人毛骨悚然的程度。

一些詞嵌入的例子(Mikolov et. al.)
從那以後,word2vec 一直是自然語言處理的基本組成,爲許多基於文本的應用程序(如分類、集羣和翻譯)提供了一個簡單而高效的基礎模塊。我在 Insight 的時候有一個疑問是,類似於詞彙內嵌的技術如何應用於其他類型的數據,比如人或企業。
關於嵌入
讓我們首先來想想「嵌入」究竟是什麼。在物理上,一個嵌入只是表示某個實體的數字列表(即一個向量)。對 word2vec 來說,這些實體就是英文單詞。每一個單詞擁有一個自己的數字列表。
通過訓練任務過程中的梯度下降進行不斷調整,這些數字列表被優化爲它們所代表的實體的有用表示。如果訓練任務要求記住有關對應實體的一般信息,那麼嵌入將會最終吸收這些一般信息。
單詞的嵌入
以 word2vec 爲例,訓練任務涉及提取一個單詞(稱爲單詞 A),並在一個巨大的文本語料庫(來自谷歌新聞中的一千億單詞)中預測另一個單詞(單詞 B)出現在單詞 A 的前後 10 個單詞範圍的窗口中的概率。

每一個單詞在訓練過程中都需要重複成千上萬次預測,對應的單詞 B 既包括通常一同出現的那些,也包括從不會出現在相同的語境中的那些(這叫做負採樣技術)。
這個任務要求每個單詞的嵌入編碼與這個單詞共同出現的其他單詞的信息。與類似的單詞一起出現的單詞最終會有類似的嵌入。例如,「聰明(smart)」這個詞和「有智慧(intelligent)」這個詞經常可以互換使用,所以通常在一個大型語料庫中,與這兩個單詞一起出現的那些單詞集合是非常相似的。因此,「聰明」和「有智慧」的嵌入會非常相似。
用這個任務創建的嵌入被強制編碼了很多關於這個單詞的一般信息,所以在不相關的任務中,它們仍然可以用來代表對應的單詞。谷歌 word2vec 嵌入廣泛用於自然語言處理的各種應用程序,如情緒分析和文本分類。
還有其他團隊使用不同的訓練策略設計的單詞嵌入。其中最流行的是 CloVe 和 CoVe。
任何東西的嵌入
單詞向量是多種 NLP 任務的必要工具。但是,對於企業通常最關心的實體類型來說,預先訓練的詞向量並不存在。對於像「紅色」和「香蕉」這樣的單詞,Google 已經爲我們提供了預訓練好的 word2vec 嵌入,但是並沒有爲我們提供諸如一個社交網絡、本地企業或是其他沒在 Google 新聞語料庫中頻繁出現的實體的嵌入。因爲 word2vec 是基於 Google 新聞語料庫進行訓練的。
企業關心的是他們的客戶、他們的僱員、他們的供應商,以及其他沒有預先訓練的嵌入的實體。一旦經過訓練,實體的矢量化表示就可以用以輸入大量機器學習模型。例如,他們可以用在預測用戶可能會點擊哪些廣告的模型上,可以用在預測哪些大學申請者很可能以優異的成績畢業的模型上,或者用在預測哪個政客有可能贏得選舉的模型上。
實體嵌入使我們能夠利用與這些實體相關聯的自然語言文本來完成這些類型的任務,而這類文本往往是企業手中一直保存着的。例如,我們可以通過一個用戶寫的帖子,一個大學申請人寫的個人陳述,或者人們關於一個政治家的推特和博客帖子來生成實體嵌入。
任何有對應文本的實體的公司都可以利用實體嵌入,當你考慮這個問題的時候,大多數企業都以不同方式擁有這樣的實體及對應文本:Facebook 擁有用戶和他們發佈或標記的文本;LinkedIn 擁有用戶和他們簡介的文本;Yelp 擁有用戶和他們寫的評論,以及商家和關於商家的評論;Airbnb 擁有住的地方和關於這些地方的描述與評論;大學擁有申請者和他們寫的申請論文。這樣的例子不勝枚舉。事實上,Facebook 最近發表了一篇論文,詳細介紹了實體嵌入技術。(論文鏈接:https://arxiv.org/abs/1709.03856)
我的 entity2vec 項目的目標是找到一種方法,使用與實體關聯的文本來創建能夠代表這些實體的通用嵌入。爲了做到這一點,我使用了一種類似於 word2vec 的負採樣的技術,將已知與某個實體關聯的大量文本中的信息提取到實體嵌入中。
實例 1:名人
爲了開發和測試這種技術,我嘗試了訓練嵌入來代表傑出人物(例如:巴拉克·奧巴馬、Lady Gaga、安吉麗娜·朱莉、比爾·蓋茨)。傑出人物是一個很好的起點,因爲,對於這些非常有名的人的名字,在預先訓練的 Google word2vec 嵌入是存在的,而且可以免費使用,所以我可以將我的嵌入和這些人的名字的 word2vec 嵌入的進行比較。
和 word2vec 一樣,我需要一項訓練任務,它將迫使實體嵌入來學習它們所代表的實體的一般信息。我決定訓練一個分類器,它可以從一個人的維基百科文章中獲取一個文本片段,然後學習猜測這個片段是關於誰的。
訓練任務將以幾個實體嵌入作爲輸入,並輸出文本片段所涉及的真實實體嵌入。在下面的例子中,分類器將會看到一個關於奧巴馬的文本片段,以及奧巴馬和另外三個隨機選擇的人物的嵌入。分類器將輸出一個數字表示哪一個輸入是奧巴馬的嵌入。

所有的嵌入都將在每個步驟中被訓練,所以不僅正確的人物嵌入將學習對應人物有什麼相關信息,其他不正確的嵌入也會了解它們所代表的人物不相關的信息有哪些。
這種技術在直覺上似乎是合理的,但是爲了驗證我的結果,我需要嘗試將這些訓練好的嵌入應用到一些其他任務上,看看它們是否真的瞭解了它們的對應實體的一般信息。
爲此,我在其他一些任務上訓練簡單的分類器,將實體嵌入作爲輸入,然後輸出一些分類,諸如實體的性別或職業。以下是這些分類器的架構:

這是得到的結果,以及與單純猜測和用 word2vec 得到的嵌入做相同任務的對比。

我的嵌入與 word2vec 嵌入表現非常接近,儘管我的嵌入所用的訓練文本更少——大約 3000 萬字 vs. 1000 億字。文本要求少了 4 個數量級!
實例 2:Yelp 商家
接下來,我想看看這項技術是否可以推廣。它是隻能在維基百科上管用,還是更通用。我嘗試應用同樣的技術,以 Yelp 數據集來訓練商家的嵌入。
Yelp 在網上提供了其數據集的一部分,包含商家以及關於這些商家的所有建議和評論。我用與訓練維基百科人物的嵌入相同的技術來訓練嵌入,除了這次的文本是 Yelp 裏對商家的評論,而實體是這些商家。這個任務可以表示成下圖:

經過訓練後,我在一項新任務上測試了這些嵌入——弄清楚某一商家屬於哪種類型的業務,例如:CVS 藥店屬於「健康」類,而麥當勞則屬於「餐廳」類。一共有十種類別,而一個商家可能屬於多個類別——因此這是一個多達十種標籤的多標籤分類任務,很有挑戰性。與經過培訓後的猜測結果相比較如下:

考慮到這一任務的難度,這是一個很好的結果!
總之,這是一個成功的實驗。我訓練了獲取自然語言文本中的信息的嵌入,然後通過在其他任務上驗證這些信息,我就能從他們那裏得到有用的信息。任何有配對文本的業務都可以使用這種技術,能夠在他們的數據上運行預測任務。
下一步和代碼
雖然這些結果看起來已經很有潛力,但還可以通過將結構化的數據和文本結合一起用來訓練嵌入,從而進一步提升結果,我將在未來探索這個思路。
原文鏈接:https://blog.insightdatascience.com/entity2vec-dad368c5b830
留言
張貼留言