使用Facebook的Pytorch的BigGraph從知識圖譜中提取知識


機器學習使我們能夠訓練一個可以將數據轉換為標簽的模型,從而把相似的數據映射到相似或相同的標簽。

例如,我們正在為電子郵件構建一個垃圾郵件過濾器。我們有很多電子郵件,其中一些標記為垃圾郵件,另一些標記為正常郵件(INBOX)。我們可以構建一個模型,該模型學習識別垃圾郵件。被標記為垃圾郵件的郵件在某種程度上類似於已經標記為垃圾郵件的郵件。

相似性的概念對於機器學習至關重要。在現實世界中,相似性的概念與某個主題相關,它取決於我們的知識

另一方面,數學模型定義了相似性的概念。通常,我們將數據表示為多維向量,並測量向量之間的距離。

0_LXrVzPbG3uA0gd--

https://www.quora.com/Why-do-we-use-cosine-similarity-on-Word2Vec-instead-of-Euclidean-distance

特征工程是將我們對現實世界中的某個對象的知識轉換為數字表示的過程。我們認為相似的對象轉化為數字后的向量也會很靠近。

例如,我們正在估算房價。我們的經驗告訴我們,房屋是由卧室的數量,浴室的數量,房齡,房屋面積,位置等來定義的。位於同一社區,具有相同大小和房齡的房屋的價格應該大致相同。我們將對房屋市場的了解轉化為表征房屋的數字,並用它來估算房屋的價格。

不幸的是,如上所述,手動特征工程在將我們的知識轉換為描述性特征的能力方面存在局限性。

有時,知識的使用僅限於相似性原理,而不是對象的確切相似特征。通常,我們對現實世界的了解要比簡單的表格所代表的要復雜得多。它通常是相互聯系的概念和圖形。

嵌入模型使我們能夠獲取原始數據,並根據我們的知識自動將其轉換為特征。

Word2Vec

Word2Vec可能是最著名的嵌入模型,它為單詞建立相似度向量。在這種情況下,我們對世界的了解用文字來進行表示,即文字序列。

雖然數十年來,人們嘗試使用手動定義的特征來刻畫單詞,但收效甚微。這些解決方案通常無法擴展到全部知識,也無法在有限的情況下起作用。

托馬斯·米科洛夫Tomas Mikolov)和他在Google的團隊決定建立模型時,一切都改變了,該模型基於眾所周知的相似性原理進行工作。在相似上下文中使用的詞通常相似。在這種情況下,上下文由附近的單詞來定義。

0_T7wsEHGyun-cqnyi

單詞序列的圖形表示。

我們看到的是,只要牢記這些原則,我們就可以通過在預定義窗口(通常為5個單詞)內將每個單詞與其相鄰單詞簡單地連接起來,從而在文本中構建圖形。

現在我們有了一個基於我們的知識連接起來的真實單詞對象的圖形。

最簡單/最復雜的單詞表示

我們仍然無法建立任何模型,因為單詞沒有以表格或向量表示。

如果我們需要將單詞轉換為數字,那么有一個簡單的解決方案。讓我們來看看字典,並為每個單詞指定其在字典中的位置。

例如,如果我有三個單詞:貓(cat),毛毛蟲(caterpillar),小貓(kitten)。

我的向量表示法如下:cat—[1],caterpillar—[2],和kitten—[3]。

不幸的是,這不起作用。通過這樣分配數字,我們隱式地引入了單詞之間的距離。貓和毛毛蟲之間的距離是1,貓和小貓之間的距離是2。這樣進行表示就等於,我們說貓比起小貓更像毛毛蟲,這與我們的知識是相互矛盾的。

另外一個解決方案也稱為獨熱編碼(one-hot encoding)

cat — [1,0,0]

caterpillar — [0,1,0]

kitten — [0,0,1]

該方法表示所有單詞都彼此正交。我們沒有單詞相似性的先入觀念。我們將依靠我們的知識圖譜(如上所述)和的單詞相似性原理來構建嵌入模型。

在現實世界中,字典的大小遠遠大於3。字典的維數可能是數萬到數百萬。這些向量不僅不能真正代表我們的相似性概念,而且它們的體積也很大,無法在實際中使用。

建立詞嵌入(word embeddings)

我們的知識圖譜為我們提供了非常多的邊,每條邊都可以解釋成輸入數據作為邊的起點,標簽為邊的終點。我們正在構建一個模型,該模型試圖使用被標簽包圍的單詞來預測單詞。通常以兩種方式完成。我們要么從某個單詞的所有鄰居來構造單詞向量,要么從某個單詞來構造其所有鄰居。
0_1vIH7iHHene0u7d6
https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf

該模型的詳細信息超出我要講的范圍,並且在許多其他文章中都有詳細描述。從根本上講,該團隊使用基本的編碼器/解碼器模型來學習從高維空間(數百萬個維)到有限維空間(通常為300個)到高維空間的投影。訓練的目的是在壓縮過程中保留盡可能多的信息(用最小化交叉熵的方法)。

0_ikyY6V-JYhpfk7Or

http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/

把稀疏,正交,高維的數據空間投影到更密集的低維空間,這一概念是許多其他嵌入訓練模型的基礎。

該模型通常使用Google,Twitter或Wikipedia數據集等來進行訓練。我們消耗世界的知識,以此建立我們的單詞嵌入模型。

Word2Vec嵌入的屬性

Word2Vec的重要屬性是保留單詞之間的關系和表示結構關系。

下圖顯示了國家與首都之間的聯系。
0_K4K24XlR-RWIUKAc
或其他不同的概念。
0_2N0COC6bTB2SIWw1

https://www.tensorflow.org/tutorials/representation/word2vec

本質上,它允許像這樣對單詞進行代數運算:

國王-男人+女人=女王。

使用單詞嵌入

單詞嵌入可以極大地改善諸如文本分類,命名實體識別,機器翻譯等等任務的執行效果。

更多信息:http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/

Node2Vec

Node2Vec(作者:A. Grover and J. Leskovec)是在Word2Vec思想的基礎上,對齊次加權圖進行分析。本文的思想是通過探索圖節點的周圍環境來刻畫圖節點的特征。我們對世界的理解是建立在兩個原則的基礎上的——同質和結構對等。

同質

相似的節點位於附近。

示例:

  • 社交網絡-我們與像我們這樣的人有更多的聯系

  • 商業地點-金融公司、醫生辦公室或營銷公司似乎通常位於同一條街上

  • 組織結構-同一團隊的人有相似的特征

結構對等

不同的社區共享相同的結構:

  • 組織結構-雖然團隊之間可能存在弱連接,但團隊的結構(經理、高級成員、新成員、初級成員)在團隊之間重復。

1_LV1J~1

https://arxiv.org/pdf/1607.00653.pdf

為了將這兩個原則結合到我們的嵌入中,Node2Vec的作者提出了一種結合廣度優先采樣和深度優先采樣的隨機游走方法來捕獲同質性和結構等價性。

如我們所見,節點(u)在組(s1、s2、s3、s4)中充當中心,這類似於s6是(s7、s5、s8、s9)的中心。我們通過BFS發現(s1,s2,s3,s4)社區,通過DFS發現(u)<->(s6)相似性。

我們通過探索每個節點的周圍環境來了解它們。這種探索將圖轉換為隨機游動產生的大量序列(句子),將BFS和DFS探索結合起來。BFS和DFS的混合由圖邊的權值和模型的超參數控制。

一旦我們有了完整的序列(句子),我們就可以像應用於文本一樣應用Word2Vec方法。它產生了基於我們定義的原則和從圖中獲得的知識的圖節點嵌入。

Node2Vec 性質

Node2Vec表示改進了節點的聚類和分類模型。嵌入中學習到的相似性將有助於欺詐檢測等任務。

node2vec生成的Les Misérables共現網絡的互補可視化,標簽顏色反映了同質(頂部)和結構等價性(底部)。— https://arxiv.org/pdf/1607.00653.pdf

1_LBFW~1

https://arxiv.org/pdf/1607.00653.pdf

Node2Vec在鏈路預測(link prediction)方面有顯著的改進。它能夠提高重建圖的能力,其中刪除了一定比率的邊。本文將進一步討論鏈路預測評估過程。

知識圖譜

下面我們將討論PYTORCH-BIGGRAPH:一個大規模的圖嵌入系統論文(進一步命名為PBG)以及相關論文。

知識圖譜是一種特殊的圖形類型,它包含已知的實體和不同類型的邊。它代表結構知識。

在知識圖譜中,節點通過不同類型的關系連接起來。
1_SIM2~1

https://arxiv.org/pdf/1503.00759.pdf

訓練的目標是產生代表知識的嵌入。一旦我們有了節點的嵌入,就應該很容易通過特定類型的關系來確定相應的節點在我們的知識圖譜中是否是連接的(或應該連接的)。

不同的模型提出了不同的比較嵌入的方法。最簡單的模型使用余弦或向量積距離來比較嵌入向量。比較復雜的模型在比較之前對向量的元素應用不同的加權方案。加權方案表示為矩陣,並且特定於關系類型。作為訓練的一部分,我們可以學習加權矩陣。

1_Y8SY~1

https://www.sysml.cc/doc/2019/71.pdf

我們需要找到一種方法來度量邊之間的相似性得分,並使用該得分來估計這些節點連接的可能性。

知識圖譜的表示

知識圖譜可以表示為鄰接張量。要建立它,我們需要一個平方矩陣來表示每種類型的關系。每個矩陣的列或行數與圖形中的節點數相同。通過這種類型的關系,如果這些節點中相互連接,則矩陣的值將是1,否則為0。很明顯,這個矩陣非常大,非常稀疏。

為了學習我們的嵌入,我們需要將每個節點轉換成固定大小的向量。讓我們討論“好”嵌入的性質。

好的嵌入以圖邊的形式表示我們的知識。位於“附近”的嵌入向量應該表示更有可能連接的節點。基於此觀察,我們將訓練我們的模型,使相鄰張量中標記為1的連接節點的相似度得分更高,相鄰張量中標記為0的連接節點的相似度得分更低。
1_4M22~1
https://arxiv.org/pdf/1503.00759.pdf

我們正在訓練我們的嵌入以最小的信息損失從節點嵌入重建 知識圖譜的邊。

負采樣

我們的訓練方法有點問題。我們正在嘗試使用圖數據來區分1(節點已連接)和0(節點未連接)。然而,我們實際擁有的唯一數據是連接在一起的節點。就像只看貓就學會了分辨貓和狗。

負采樣是一種通過使用非常簡單的觀測來擴展數據集並提供更好的訓練數據的技術。任何隨機選擇的節點,如果沒有作為我們的圖的一部分進行連接,將用標簽0表示一個樣本數據。出於訓練的目的,PBG提出讀取圖的每條邊,然后提出一個負樣本,其中一個節點被隨機選擇的節點替換。

對於每一條邊,我們可以指定一個正相似度得分和一個負相似度得分。基於節點嵌入和邊關系類型權重計算正相似度得分。用同樣的方法計算負相似度得分,但是邊的一個節點被損壞並被隨機節點替換。

排名損失函數,將在訓練期間進行優化。它的構造是為了在圖中所有節點和所有關系類型的正負相似度得分之間建立一個可配置的邊距(margin)。排名損失是節點嵌入和特定關系權重的函數,通過尋找最小的排名損失進行學習。

訓練

現在我們有了訓練嵌入模型所需的一切:

  • 數據-負邊和正邊

  • 標簽-(1或0)

  • 優化函數(可以是排名損失、更傳統的logistic回歸損失或在word2vec中使用的交叉熵softmax損失)

  • 我們的參數是用於相似性評分函數的嵌入和權重矩陣。

現在是用微積分來尋找參數-嵌入的問題,優化我們的損失函數。

隨機梯度下降

隨機梯度下降的實質是逐步調整損失函數的參數,使損失函數逐漸減小。為此,我們以小批量方式讀取數據,使用每個批次計算對損失函數參數的更新,以將其最小化。

隨機梯度下降有多種方法。PBG論文利用隨機梯度下降的一種形式ADAGrad來尋找使損失函數最小化的參數。我強烈推薦這個博客來了解梯度下降的所有類型:http://ruder.io/optimization-gradient-descent/index.html#adagrad

tensorflow和Pythorch等軟件包為不同的類型提供了開箱即用的實現。

梯度下降的關鍵是模型參數的多次更新,直到損失函數最小化。在訓練結束時,我們期望能有嵌入和評分函數,以滿足我們整合知識的目標。

HogWild-分布式隨機梯度下降

隨機梯度下降的分布式是一個挑戰。如果我們同時通過調整參數來訓練以最小化損失函數,就需要某種鎖定機制。在傳統的多線程開發中,我們在更新過程中通過悲觀或樂觀鎖定來鎖定數據。鎖定會減慢進度,但會確保結果的正確性。

幸運的是, hogwild paper 證明了我們不需要鎖定機制。我們可以簡單地批量讀取數據,計算參數調整,並將這些數據保存在共享參數空間中,而不考慮其正確性。HogWild算法正是這樣做的。訓練可以是分布式的,每個HogWild線程可以更新我們的參數,而不考慮其他線程。

我推薦這個博客來獲取更多關於HogWild的信息: https://medium.com/@krishna_srd/parallel-machine-learning-with-hogwild-f945ad7e48a4

分布式訓練

當圖跨越數十億個節點和數萬億條邊時,很難在一台機器的內存中擬合所有參數。如果我們在開始另一批之前等待每一批的結束來完成計算,也需要很多時間。我們的圖是如此之大,這將有利於能夠同時進行並行化的訓練和參數學習。這個問題是由Facebook團隊解決的,他們發布了PBG的論文。

節點按實體類型拆分,然后組織為分區:

1_UO0R~1

https://torchbiggraph.readthedocs.io/en/latest/data_model.html

1_H6RW~1
https://torchbiggraph.readthedocs.io/en/latest/data_model.html

1_-C8N~1

https://www.sysml.cc/doc/2019/71.pdf

  1. 節點被划分為P個bucket,邊被划分為PxP個bucket。不必對基數較小的實體類型進行分區。

  2. 訓練與下列限制同時進行:

對於除第一個外的每個邊 bucket(p1;p2),在前一個迭代中訓練邊 bucket(p1;*)或(*;p2)是很重要的。

只要多個邊 buckets 在不相交的分區集上操作,它們可以並行訓練。

1_VST6~1

https://www.sysml.cc/doc/2019/71.pdf

訓練在多台機器上並行進行,並且每台機器有多個線程。每個線程根據分配的bucket和批數據計算參數更新。鎖服務器根據建立的約束分發訓練 buckets。注意,鎖服務器只控制hogwild線程中批數據的分布,而不控制參數更新。

PBG嵌入特性

知識嵌入可以通過兩種方式使用:

  • 鏈接預測。

​ 鏈接預測有助於通過查找可能連接或即將連接的節點來填補我們知識中的空白。

​ 示例:該圖表示客戶和客戶購買的產品。邊是采購訂單。嵌入可用於形成下一個購買建議。

  • 學習節點的屬性

​ 嵌入可以用作特征向量作為各種分類模型的輸入。所學的類可以填補我們對對象屬性的知識空白。

使用MRR/Hits10評估鏈路預測

這篇論文Learning Structured Embeddings of Knowledge Bases描述了這個過程,后來被用作衡量嵌入模型質量的方法,在包括Facebook PBG在內的許多其他論文上都有報道。

算法獲取測試邊的子集並執行以下操作:

  1. 通過將邊的開始或結束替換為負采樣邊來損壞邊。

  2. 在部分損壞的數據集上訓練模型

  3. 計算測試數據集邊的聚合MRR和Hits10度量。

平均倒數排序(Mean reciprocal rank)

MRR或Mean reciprocal rank是衡量搜索質量的指標。我們選取一個未損壞的節點,以距離作為相似度得分來尋找“最近鄰”。我們根據相似度得分對最近的鄰居進行排序,並期望連接的節點出現在排序的頂部。MRR會在節點沒有傾斜到頂部的情況下降低精度得分。

另一種方法是Hits10,我們期望損壞的節點出現在前10個最近的鄰居中。
1_BM_X~1

https://www.sysml.cc/doc/2019/71.pdf

PBG的研究表明,在許多數據集上,MRR指標隨着我們將資源分配到訓練中而逐漸增加。並行性不會影響排名質量,但可以節省大量時間。

可以通過簡單地探索和可視化圖來執行進一步的評估。

0_RN-J~1

https://ai.facebook.com/blog/open-sourcing-pytorch-biggraph-for-faster-embeddings-of-extremely-large-graphs/

上面的圖像是根據Freebase知識圖譜構建的嵌入的二維投影。如我們所見,相似的節點被組合在一起。即使在精心准備的二維投影圖上,國家、數字、科學期刊行業似乎也有集群。

知識圖譜模型的局限性

如上所述的知識圖譜表示的是我們知識的靜態快照。它並不能反映知識是如何建立起來的。在現實世界中,我們通過觀察時間模式來學習。雖然可以學習節點A和節點B之間的相似性,但就像3年前一樣,很難看到節點A和節點C之間的相似性。

例如,如果我們看一天森林,我們會看到兩棵大紅杉之間的相似性。然而,如果沒有對這片森林的長期觀察,很難理解哪棵小樹會長成一棵大紅杉樹。

理想情況下,我們需要探索在不同時間點構建的一系列知識圖譜,然后構建嵌入,這將包含代與代之間的相似性。

原文鏈接:https://towardsdatascience.com/extracting-knowledge-from-knowledge-graphs-e5521e4861a0

歡迎關注磐創AI博客站:
http://panchuang.net/

sklearn機器學習中文官方文檔:
http://sklearn123.com/

歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM