Facebook开源了一个超大规模的图嵌入算法,数亿个节点可以快速完成。图是一种非常有用的数据结构,用节点(Node)和边(Edge)编织了一个网络。比如知识图谱就是这样一个网络。为了处理此类数据,使用了图嵌入:将高维网络转换为低维向量。经过处理后,机器学习模型就可以轻松吃掉了。如果像上图这样只有几个节点和十几条边,图嵌入并不困难。如果有数十亿个节点和数万亿条边呢?传统的图嵌入方法很匆忙。但现在,Facebook开源了一个名为PyTorch-BigGraph(简称PBG)的新工具。有了它,即使是更大的图(原文是任意大的,任意大的)也可以快速生成graphembeddings。此外,根本不需要GPU。除了自训练开源模型外,还有使用维基数据7800万节点数据预训练的模型,可以直接下载使用。PBG发表后,小伙伴们争先恐后地告诉对方:LeCun先生亲自转载了两次。如何开发PBG是一个分布式系统,使用1.2亿个节点的完整FreeBase知识图谱进行训练。在训练过程中,PBG会吃掉图上所有边(Edge)的大列表。每条边由其两端的节点定义,一个是源(Source),另一个是目标(Target)。定义中的两点之间也存在关系(RelationType)。然后,PBG为每个节点输出一个特征向量(即embedding),使得两个相邻节点在向量空间中距离更近,非相邻节点距离更远。这样,那些周围环境相似的节点在向量空间中的位置就会靠得很近,从而保留了图的原始意义。此外,针对每一种不同的关系,“ProximityScore(接近分数)”可以自定义不同的计算方式。这样,节点的嵌入可以在不同种类的关系之间共享。更快,更快为了快速处理大规模图数据,PBG使用了这些法术:一个是GraphPartitioning,这样就不需要将整个模型加载到内存中。在不损失图像嵌入质量的情况下,与无分区相比节省了88%的内存使用。第二个是用于多线程计算的机器。三是同时在多台机器上跑,每台跑一个地图上不相邻的区域。第四种是批量负采样(BatchedNegativeSampling),它允许一个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/
