当前位置: 首页 > 编程日记 > 正文

Facebook开源图嵌入“神器”:无需GPU,高效处理数十亿级实体图形 | 极客头条...

640?wx_fmt=gif点击上方↑↑↑蓝字关注我们~

640?wx_fmt=png

2019 Python开发者日」全日程揭晓,请扫码咨询 ↑↑↑


编译 | Major、一一

出品 | AI科技大本营(ID: rgznai100)


有效处理大规模图对于促进人工智能的研究和应用至关重要,但特别是在工业应用中的图,包含数十亿个节点和数万亿个边,这超出了现有嵌入系统的能力。


因此,Facebook 人工智能团队已经创建并正在开放源代码 PyTorch Biggraph(PBG)。


640?wx_fmt=jpeg


PBG 是一个用于学习大规模图嵌入的分布式系统,特别适用于处理具有多达数十亿实体和数万亿条边的大型网络交互图。它在 2019 年的 SysML 会议上发表的大规模图嵌入框架论文中提出。


640?wx_fmt=png


论文链接:

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


PBG 比常用的嵌入软件更快,并在标准基准上生成与最先进模型质量相当的嵌入。有了这个新工具,任何人都可以用一台机器或多台机器并行地读取一个大图并快速生成高质量的嵌入。


PBG 对传统的多关系嵌入系统进行了多次修改,使其能够扩展到具有数十亿个实体和数万亿边的图。PBG 使用图分区来在单个机器或分布式环境中训练任意量级的嵌入。研究人员在通用基准测试中展示了与现有嵌入系统相当的性能,同时允许在多台机器上扩展到任意大的图和并行化。他们在几个大型社会网络图以及完整的 Freebase 数据集上训练和评估嵌入,其中包含超过 1 亿个实体和 20 亿条边。


具体而言,PBG 通过摄取图的边列表来训练输入图,每条边由其源实体和目标实体以及可能的关系类型进行标识。它为每个实体输出一个特征向量(嵌入),试图将相邻实体放置在向量空间中彼此靠近,同时将未连接的实体分开。因此,具有相似邻近分布的实体最终将位于附近位置。


可以使用在训练中学习的参数(如果有的话),用不同的方法配置每种关系类型来计算这个“接近度得分(proximity score)”,这允许在多个关系类型之间共享相同的基础实体嵌入。


其模型的通用性和可扩展性使得 PBG 能够从嵌入文献的知识图谱中训练出多种模型,包括 TransE、RESCAL、DistMult 和 ComplEx。


PBG 的设计考虑到了规模化,并通过以下方式实现:


  • 图分区(graph partitioning),这样模型就不必完全加载到内存中;

  • 每台机器上的多线程计算;

  • 跨多台机器的分布式执行(可选),所有机器同时在图的不相交部分上运行;

  • 批量负采样(batched negative sampling),允许处理的数据为> 100 万边/秒/机器。


作为一个示例,Facebook 还发布了包含 5000 万维基百科概念的 Wikidata 图的首次嵌入版本,该图用于 AI 研究社区中使用的结构化数据。这些嵌入是用 PBG 创建的,可以帮助其他研究人员在维基数据概念上执行机器学习任务。


需要注意的是,PBG 不适用于小规模图上具有奇怪模型的模型探索,例如图网络、深度网络等。


安装步骤及更多信息,请参考 GitHub 相关介绍和 PyTorch-BigGraph 文档:


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

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


建立数十亿个节点的嵌入图


640?wx_fmt=png

图是表示多种数据类型的核心工具。它们可以用来对相关实体的网络进行编码,例如关于世界的事实。例如,像 Freebase 这样的知识库具有不同的实体(如“Stan Lee”和“New York City”),作为描述它们之间关系的节点和边(例如“出生于”)。


图嵌入方法通过优化目标来学习图中每个节点的向量表示,即具有边的节点对的嵌入比没有共享边的节点对更接近,这类似于 word2vec 等词嵌入在文本上的训练方式。


图嵌入是一种无监督学习,因为它们只使用图结构学习节点的表示,而不使用基于任务的节点“标签”。与文本嵌入一样,这些表示可用于各种下游任务。


超大规模图形嵌入


当前,超大规模图形有数十亿个节点和数万亿条边,而标准的图嵌入方法不能很好地扩展到对超大规模图的操作,这主要有两大挑战:首先,嵌入系统必须足够快,以便进行实际的研究和生产使用。例如,利用现有的方法,训练一个具有万亿条边的图可能需要几周甚至几年的时间。


另外,存储也是一大挑战。例如,嵌入每个节点具有 128 个浮点参数的 20 亿个节点,这需要 1TB 的数据,超过了商用服务器的内存容量。


PBG 使用图的块分区来克服图嵌入的内存限制。节点被随机划分为 P 分区,这些分区的大小可以使内存容纳两个分区。然后,根据边的源节点和目标节点,将边划分为 P2 簇(Buckets)。


640?wx_fmt=png      

大规模图的 PBG 分区方案。节点被划分为 P 分区,分区大小适合内存。边根据其源节点和目标节点的分区划分为簇。在分布式模式下,可以并行执行具有非重叠分区的多个存储簇(如蓝色方块所示)。


节点和边进行分区之后,就可以一次在一个簇上执行训练。bucket(i,j)的训练只需要将节点分区 i 和 j 嵌入存储在内存中。


PBG 提供了两种方法来训练分区图数据的嵌入。在单机训练中,嵌入件和边在不使用时被交换到磁盘上。在分布式训练中,嵌入分布在多台机器的内存中。


分布式训练


PBG 使用 PyTorch 并行化原语(parallelization primitives)进行分布式训练。由于一个模型分区一次只能由一台机器调用,因此一次最多可以在 P/2 机器上训练嵌入。只有当机器需要切换到新的簇时,模型数据才会进行通信。对于分布式训练,我们使用经典参数服务器模型,同步表示不同类型边的共享参数。


640?wx_fmt=png      

APBG 分布式训练体系结构。我们使用锁服务器协调机器在不相交的存储簇上进行训练。分区模型参数通过分片分区服务器交换,共享参数通过分片参数服务器异步更新。


负采样


图嵌入和文本嵌入相似,构造随机的“假”边与真正的边一起作为负训练样例。这大大加快了训练速度,因为每个新样本只需更新一小部分权重。通常,这些消极的例子是由随机源节点或目标节点的“腐蚀”真边构成的。然而,我们发现对标准负抽样的一些修改对于大规模图是必要的。


首先,我们注意到在传统的图嵌入方法中,几乎所有的训练时间都花在了负边上。我们利用函数形式的线性特点,重用一批 N 个随机节点,生成 N 个训练边的损坏负样本。与其他嵌入方法相比,此技术允许我们以很小的计算成本在每个真边上训练许多负示例。


我们还发现,为了生成在各种下游任务中有用的嵌入,一种有效的方法是破坏边,将 50% 的节点和另外 50% 的节点(根据其边数进行采样)混合在一起。


最后,我们引入了“实体类型”的概念,它限制了如何使用节点构造负样本。例如,考虑一个包含歌曲、艺术家和流派节点的图,并假设艺术家和歌曲之间存在“创作”关系。如果我们为这个关系统一抽样源实体,我们将绝大多数抽样歌曲(因为歌曲比艺术家多),但这些不是有效的潜在边(因为歌曲只能由艺术家制作)。PBG 可以基于关系的实体类型限制构造哪些负样本。


评估 PyTorch-BigGraph


为了评估 PBG 的性能,我们使用了公开的 Freebase 知识图,它包含超过 1.2 亿个节点和 27 亿条边。我们还使用了一个较小的 Freebase 图子集(FB15K),它包含 15000 个节点和 600000 条边,通常用作多关系嵌入方法的基准。


640?wx_fmt=png

T-SNE 绘制的由 PBG 训练的 Freebase 知识图嵌入。国家、数字和科学期刊等实体也有类似的嵌入。


可以看出,对于 FB15k 数据集,PBG 和最新的嵌入方法性能相当。


640?wx_fmt=png

图:FB15K 数据集的链路预测任务上嵌入方法的性能。PBG 使用其模型来匹配 transe 和复杂嵌入方法的性能。我们测量了 MRR,并在 FB15K 测试集上对链接预测进行 hit@10统计。Lacroix 等人使用非常大的嵌入维数实现更高的 MRR,我们可以在 PBG 中采用同样的方法,但这里暂不涉及。


下面,我们使用 PBG 对完整的 Freebase 图训练嵌入。现代服务器可以容纳这个规模的数据集 但 PGB 分区和分布式执行既节约了内存,也缩短了训练时间。我们发布了 Wikidata 的首次嵌入,这是一个相似数据中更新的知识图。


640?wx_fmt=png我们还评估了几个公开的社交图数据集的 PBG 嵌入,发现 PBG 优于其他竞争方法,并且分区和分布式执行减少了内存使用和培训时间。对于知识图、分区或分布式执行使得训练对超参数和建模选择更加敏感。然而对于社交图来说,嵌入质量似乎对分区和并行化选择并不敏感。


利用分布式训练的优势进行嵌入


PBG 允许 AI 社区为大规模图(包括知识图谱)以及其他如股票交易图、在线内容图和生物数据图训练嵌入,而无需专门的计算资源(如 GPU 或大量内存)。我们还希望 PBG 将成为小型公司和机构的有用工具,他们可能拥有大型图数据集,但没有将这些数据应用到其 ML 应用程序的工具。


虽然我们在 Freebase 等数据集上演示了 PBG,但 PBG 真正的设计意图是处理比此图大 10~100 倍的图。我们希望这能鼓励实践者发布和试验更大的数据集。计算机视觉(通过对标签的 Deep Learning 来改进图像识别质量)和自然语言处理(word2vec、BERT、Elmo)的最新突破是对海量数据集进行未知任务预训练的结果。我们希望通过对大规模图的无监督学习,最终能够得到更好的图结构化数据推理算法。


相关链接:

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


(本文为 AI大本营原创文章,转载请微信联系 1092722531


精彩推荐

「2019 Python开发者日」演讲议题全揭晓!这一次我们依然“只讲技术,拒绝空谈”10余位一线Python技术专家共同打造一场硬核技术大会。更有深度培训实操环节,为开发者们带来更多深度实战机会。更多详细信息请咨询13581782348(微信同号)。

640?wx_fmt=jpeg

推荐阅读:


  • 萌新养成 | AI科技大本营实习生招募计划

  • 80+机器学习数据集,还不快收藏

  • 推荐收藏 | Python爬虫干货资料,内含入门、实战、视频

  • GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!

  • 靠找Bug赚了6,700,000元!他凭什么?

  • 移动开发或将被颠覆?

  • 他曾主导世界上第一台安卓智能机, 如今能否靠区块链手机找回昔日的光荣?|人物志

  • 轻松了解面试官心理!ElasticSearch写入数据的工作原理是什么? | 技术头条

  • 程序员与程序媛的神仙爱情 | 程序员有话说


640?wx_fmt=png

点击“阅读原文”,查看历史精彩文章。

相关文章:

【opencv】ubuntu14.04上编译opencv-4.0.1 + opencv_contrib-4.0.1

1、要求 编译器版本:c11 cmake版本:3.5.1 2、安装camke 2.1 官网下载:https://cmake.org/download/ 选择:Linux x86_64 cmake-3.14.1-Linux-x86_64.sh 2.2 安装: 将cmake-3.14.1-Linux-x86_64.sh拷贝考ubuntu中&…

软件开发文档模板 (学习)

1 可行性研究报告   可行性研究报告的编写目的是:说明该软件开发项目的实现在技术、经济和社会条件方面的可行性;评述为了合理地达到开发目标而可能先择的各种方案;说明论证所选定的方案。 可行性研究报告的编写内容要求如下: …

Unix数据中心主宠儿

曾几何时UNIX一直是除个人电脑之外的领域中应用最为广泛的操作系统,并且为现代操作系统的成型奠定了基础,可以说UNIX的历史就像应用程序本身一样耐人寻味。UNIX的过去回首1983年,肯.托马森和D.里奇由于对操作系统发展史以及UNIX操作系统应用所…

【AI】基本概念

1、什么是人工智能 人工智能(AI)是通过研究、开发,来找到用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的综合性的科学技术。其表现为,让计算机系统通过机器学习等方式,来获得可以履行原本只有依…

在浏览器中进行深度学习:TensorFlow.js (四)用基本模型对MNIST数据进行识别

2019独角兽企业重金招聘Python工程师标准>>> 在了解了TensorflowJS的一些基本模型的后,大家会问,这究竟有什么用呢?我们就用深度学习中被广泛使用的MINST数据集来进行一下手写识别的操作。 MINST数据集 MINST是一组0到9的手写数字…

不止临床应用,AI还要帮不懂编程的医生搞科研

近日,推想科技发布 AI 学者科研平台 InferScholar Center,该平台为更多的医生提供零门槛的 AI 科研能力,让医生可以快速将深度学习、影像组学以及文本数据处理相关的前沿技术应用到自己的临床科研实践中,他们将为平台上的医疗科研…

rhel6Inode详解

在Linux文件系统中,很多人对Inode都不太明白,今天我就和大家一起来分享一下我对Inode的认识,如果有理解错误的地方,请大家多多批评指点。在上一篇一天一点学习Linux之认识文件系统中,在最后给出了一张EXT3文件系统结构…

争论不休的TF 2.0与PyTorch,到底现在战局如何了? | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓,请扫码咨询 ↑↑↑作者 | Jeff Hale译者 | Jackey编辑 | Jane出品 | AI科技大本营(id:rgznai100)【导语】 TensorFlow 2.0 和 PyTorch 1.0 陆续发布后,…

struts2实验2:struts2.xml action中* ,{}以及${}

p.s 关键在于struts.xml中的匹配&#xff0c;使用* ,{}以及${}可以让代码更加简洁清晰 代码核心思路 在struts.xml中通过路由(url)去指定控制逻辑的Action中的方法,例如 <package name"admin" namespace"/admin" extends"struts-global">&…

【Ubuntu】dpkg-deb -c :查看deb文件中的内容

1、dpkg-deb -c :查看deb文件中的内容 $ dpkg-deb -c packageeg&#xff1a; $ dpkg-deb -c sogoupinyin_2.2.0.0108_amd64.deb drwxr-xr-x root/root 0 2018-04-18 16:50 ./ drwxr-xr-x root/root 0 2018-04-18 16:50 ./etc/ drwxr-xr-x root/root …

捕获Camera并保存图片到本地(照相功能) -samhy

Flex博文 捕获Camera并保存图片到本地(照相功能) -samhy作者:admin 日期:2010-07-12字体大小: 小 中 大捕获Camera并保存图片到本地(照相功能)这几天对Camera类进行了一下规整&#xff0c;并利用JPGEncoder类实现了照相的功能,代码如下&#xff1a; XML/HTML代码import flash.m…

【C++】模板函数的声明和定义必须在同一个文件中

1、问题描述 习惯性的将函数的定义和实现&#xff0c;分别写在头文件和源文件&#xff08;.cpp&#xff09;中。今天也按照这个习惯实现了一个模板函数。然后编译时报错 ... error: undefined reference to ...2、原因分析 c中模板的声明和定义不能分开。C中每一个对象所占用…

基于AWS-ELK部署系统日志告警系统

前言 运维故障排障速度往往与监控系统体系颗粒度成正比&#xff0c;监控到位才能快速排障 在部署这套系统之前&#xff0c;平台所有系统日志都由GraylogZabbix&#xff0c;针对日志出现的错误关键字进行告警&#xff0c;这种做法在运维工作开展过程中暴露出多个不足点&#xff…

《周志华机器学习详细公式推导版》发布,Datawhale开源项目pumpkin-book

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑来源 | Datawhale&#xff08;ID&#xff1a;Datawhale&#xff09; 如果让你推荐两本国内机器学习的入门经典作&#xff0c;你会推荐哪些呢&#xff1f;相信大家同我一样&#xff…

JVM内存泄漏检测与处理

JVM内存泄漏检测与处理&#xff08;JVM Memory Leak detection and handling&#xff09; JVM垃圾回收机制的原则和方法 JVM垃圾回收中一个基本原则是对象没有被引用或则引用其它对象&#xff0c;换句话说当一个对象在heap 中是隔离(isolation)状态的时候&#xff0c;垃圾回收器…

【Dlib】dlib和opencv的互转

一、dlib::matrix转换成cv::Mat 1、注意事项&#xff1a; 1&#xff09;将dlib::matrix转成BGR格式后&#xff0c;再转换成cv::Mat&#xff0c;因为cv::Mat中是按照BGR顺序存储 2&#xff09;注意最后添加的cv::Mat::clone()函数&#xff0c;因为dlib::toMat(tmp)返回的mat数…

原创 人物志|山东省临沭县 - 一位身残志坚的奋斗青年 - 吴忠军

原创 人物志|山东省临沭县 - 一位身残志坚的奋斗青年 - 吴忠军 02972018-04-29 16:15:27 人物志|山东省临沭县 - 一位身残志坚的奋斗青年 - 吴忠军 齐鲁晚报 2018年04月29日 2018年4月29日&#xff0c;山东省临沂市临沭县&#xff0c;一位年轻的小伙子。吴忠军&#xff0c;山东…

百度SLG拿下前锤子科技CTO钱晨,还要合并小鱼在家? | 极客头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑整理 | 一一出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;2016 年 7 月&#xff0c;锤子科技前 CTO 钱晨从该公司退休的消息被证实&#xff0c;关于其离职的…

【Dlib】dlib实现深度网络学习之 input层

1、 dlib::input 模板类&#xff0c;深度神经网络的简单输入层&#xff0c;它将某种图像作为输入并将其加载到网络中。 这是一个基本的输入层&#xff0c;它只是简单地将图像复制到一个张量中。 注意&#xff1a;dlib::input只支持输入dlib::matrix和dlib::array2d类型&#x…

首发 | 13篇京东CVPR 2019论文!你值得一读~ 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑编者按&#xff1a;计算机视觉和模式识别大会 CVPR&#xff08;Conference on Computer Vision and Pattern Recognition&#xff09;作为人工智能领域计算机视觉方向的重要学术会议…

Windows 活动目录(AD)服务器系统升级到2012之活动目录角色迁移(三)

4.5迁移服务器角色到AD20121. 打开powershell&#xff0c;使用命令迁移服务器角色到AD2008输入命令Ntdsutil输入命令Roles输入命令Connections输入命令Connect to server AD2012&#xff0c;连接AD2012控制器输入命令QUIT输入Transfer infrastructure master命令&#xff0c;转…

《星际争霸2》引擎技术解析

就在SIGGRAPH大会刚结束之后&#xff0c;AMD和暴雪在AMD官方网站上放出了《星际争霸II》的官方技术文档&#xff0c;通过游戏引擎技术的展示让星际迷们感受到越来越多的惊喜。画面优化给CPU带来考验着色方面&#xff0c;在使用原型的基础上利用3D Studio MAX让程序员对整体效果…

回顾与展望:大热的AutoML究竟是什么? | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑来源 | 第四范式编者按&#xff1a;AutoML&#xff08;Automatic Machine Learning&#xff0c;自动机器学习&#xff09;旨在研究在没有专业知识的情况下使用的低门槛甚至零门槛的…

【Python】深度学习中将数据按比例随机分成随机 训练集 和 测试集的python脚本

深度学习中经常将数据分成 训练集 和 测试集&#xff0c;参考博客&#xff0c;修改python脚本 randPickAITrainTestData.py 。 功能&#xff1a;从 输入目录 中随机检出一定比例的文件或目录&#xff0c;移动到保存 测试集目录 中&#xff0c;原输入目录作为训练目录。 import…

docker 系列之 配置阿里云镜像加速器

1.登录阿里云 2.登录后找到右上角的“管理中心”,点击进入后》点击“镜像加速器”;剩下的安装文档配置就好 问题1&#xff1a;配置完后还是提示&#xff1a;Tag latest not found in repository 【本人也是在这里被困了好久,尝试了各种方法】 解决方案&#xff1a;最后发现这里…

LVM-HOWTO/学习笔记(二)

1. 在3块scsi磁盘上创建lv Run pvcreate on the disks # pvcreate /dev/sda # pvcreate /dev/sdb # pvcreate /dev/sdc Create a volume group # vgcreate my_volume_group /dev/sda /dev/sdb /dev/sdc/ Run vgdisplay to verify volume group # vgdisplay # vgdisplay…

【python】使用python脚本将LFW数据中1672组同一个人多张照片拷贝出来

使用python脚本将LFW数据中1672组同一个人多张照片拷贝出来 dataCleaning4multiple.py 源码如下&#xff1a; import os, random, shutil import sys, getopt import stringdef getDir(argv):inPath outPath num2try:opts, args getopt.getopt(argv,"hi:o:n:",[&…

EXP6 信息搜集与漏洞扫描

1.实验有关问题 &#xff08;1&#xff09;哪些组织负责DNS&#xff0c;IP的管理。 ICANN是一个集合了全球网络界商业、技术及学术各领域专家的非营利性国际组织&#xff0c;负责在全球范围内对互联网唯一标识符系统及其安全稳定的运营进行协调&#xff0c;它能决定域名和IP地址…

百度发的208亿春晚红包,靠这样的技术送到了你手上 | 解读

2019 年的春晚红包项目对百度而言是一次大考&#xff0c;背后需要强大的技术来支撑。如你所见&#xff0c;百度不负“技术大厂”的标签&#xff0c;春晚红包期间系统稳定运行&#xff0c;没有出现宕机事故。在这样一个庞大而复杂的项目面前&#xff0c;他们是如何去用技术去化解…

一步一步学Silverlight 2系列(10):使用用户控件

概述 Silverlight 2 Beta 1版本发布了&#xff0c;无论从Runtime还是Tools都给我们带来了很多的惊喜&#xff0c;如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython&#xff0c;对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlig…