Facebook開源了超大規模圖嵌入算法,上億個節點也能快速完成

方栗子 發自 凹非寺

量子位 報道 | 公眾號 QbitAI


,是很有用的數據結構,用節點 (Node) 和 (Edge) 織成一張網。比如,知識圖譜就是這樣的網。


Facebook開源了超大規模圖嵌入算法,上億個節點也能快速完成


處理這樣的數據,要用到圖嵌入 (Graph Embedding) :把高維的網絡,轉換成低維的向量。處理之後,機器學習模型才能輕易食用。

如果像上圖這樣,只有幾個節點,十幾條邊,圖嵌入沒什麼難度。

如果有幾十億個節點,幾萬億條邊呢?傳統的圖嵌入方法就捉急了。

但現在,Facebook開源了叫做PyTorch-BigGraph (簡稱PBG) 的新工具。

Facebook開源了超大規模圖嵌入算法,上億個節點也能快速完成


有了它,再大的圖 (原文是arbitrarily large,任意大) 都能快速生成圖嵌入。而且,完全不需要GPU

開源模型除了可以自己訓練之外,還有拿7,800萬節點的Wikidata數據預訓練過的模型,可以直接下載來用。

PBG發表之後,小夥伴們紛紛奔走相告:


Facebook開源了超大規模圖嵌入算法,上億個節點也能快速完成

LeCun老師還親自轉發了兩次。

如何養成

PBG是一個分佈式系統,用1.2億個節點的完整FreeBase知識圖譜來訓練的。


Facebook開源了超大規模圖嵌入算法,上億個節點也能快速完成


訓練過程中,PBG會吃進圖上所有 (Edge) 的大列表,每條邊都是用它兩端的節點來定義,一個是源 (Source) ,一個是目標 (Target) 。定義中也有兩點之間的關係 (Relation Type) 。

然後,PBG給每一個節點,輸出一個特徵向量 (就是嵌入) ,讓兩個相鄰的節點在向量空間中離得近一些,讓不相鄰節點的離遠一些。

這樣一來,那些周圍環境分佈相近的節點,在向量空間裡的位置也會彼此靠近,圖原本要表達的意思就保留下來了。

另外,針對每種不同的關係,“近似度得分 (Proximity Score) ”都可以定製不同的計算方法。這樣,一個節點的嵌入,就可以在不同種類的關係裡共享了。

快一點,再快一點

要快速處理大規模的圖數據,PBG用了這幾個法術:

一是圖分區 (Graph Partitioning) ,這樣就不需要把整個模型加載到內存裡了。在圖嵌入質量不損失的情況下,比不分區時節省了88%的內存佔用。二是一臺機器進行多線程計算。三是在多臺機器上同時跑,在圖上各自跑一個不相鄰的區域。四是批次負採樣 (Batched Negative Sampling) ,能讓一臺CPU每秒處理100萬條邊,每條邊100次負採樣。

訓練完成之後,在FB15k、Youtube、LiveJournal等等圖譜上,都測試過。

團隊說,PBG和大前輩們的圖嵌入質量相當,但需要的時間明顯縮短了。

你也試一試吧

你也去訓練一個PBG吧。

反正,也不用GPU。

不想訓練的話,還有用完整WikiData預訓練的模型。

你需要的傳送門,都在這裡了。

代碼傳送門:

https://github.com/facebookresearch/PyTorch-BigGraph

食用索引:

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

論文傳送門:

https://arxiv.org/abs/1903.12287

博客傳送門:

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

誠摯招聘

量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回覆“招聘”兩個字。

量子位 QbitAI · 頭條號簽約作者

վ'ᴗ' ի 追蹤AI技術和產品新動態

相關推薦

推薦中...