方栗子 發自 凹非寺 量子位 報道 | 公眾號 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次負採樣。
一是圖分區 (Graph Partitioning) ,這樣就不需要把整個模型載入到內存里了。在圖嵌入質量不損失的情況下,比不分區時節省了88%的內存佔用。
訓練完成之後,在FB15k、Youtube、LiveJournal等等圖譜上,都測試過。
團隊說,PBG和大前輩們的圖嵌入質量相當,但需要的時間明顯縮短了。
你也去訓練一隻PBG吧。
反正,也不用GPU。
不想訓練的話,還有用完整WikiData預訓練的模型。
你需要的傳送門,都在這裡了。
代碼傳送門:
食用索引:
論文傳送門:
https://arxiv.org/abs/1903.12287
博客傳送門:
— 完 —
量子位 · QbitAI
?? ? 追蹤AI技術和產品新動態
戳右上角「+關注」獲取最新資訊↗↗
如果喜歡,請分享or點贊吧~比心?
推薦閱讀:
TAG:機器學習 | PyTorch | 人工智慧 |