開源了!Facebook超大規模圖嵌入演算法,十億個節點也能快速搞定,不用GPU

方栗子 發自 凹非寺

量子位 報道 | 公眾號 QbitAI

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

就是這樣的網。

處理這類數據,要用到圖嵌入 (Graph Embedding) :把高維的網路,轉換成低維的向量。加工之後之後,機器學習

模型才能輕易食用。

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

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

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

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

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

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

LeCun老師還轉發了兩次。

如何養成

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

訓練過程中,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預訓練的模型。

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

代碼傳送門:

github.com/facebookrese

食用索引:

torchbiggraph.readthedocs.io

論文傳送門:

arxiv.org/abs/1903.1228

博客傳送門:

ai.facebook.com/blog/op

量子位 · QbitAI

?? ? 追蹤AI技術和產品新動態

戳右上角「+關注」獲取最新資訊↗↗

如果喜歡,請分享or點贊吧~比心?

推薦閱讀:

TAG:機器學習 | PyTorch | 人工智慧 |