近日,阿里巴巴开源了面向图神经网络(GNN)的框架Graph-Learn(GL,原AliGraph)。该框架由阿里内部团队研发,面向工业场景而设计,为当下主流GNN算法提供了基础运行框架。
由于起源于工业界,GL天然支持大规模图数据、异构图、属性图等十分必要但棘手、而当下深度学习框架(TensorFlow、PyTorch等)又不擅长的问题。同时,考虑到上层NN极具面向业务定制化的特点,GL支持与任意Python接口的深度学习框架结合。GL框架轻便灵活,内部模块都预留了充足的扩展空间,方便基于不同的场景进行定制。此外,GL内置了基于TensorFlow实现的各类GNN模型和编程接口,供复用和参考。
阿里内部早在几年前就开始了GNN相关的探索,从研究到实际落地积累了很多有价值的经验。现在把这些经验传递出来,希望能对相关从业者有所帮助。
GL 设计初衷
GNN是当下AI领域中非常热门的子领域,被研究者给予了很高的期待。在一切皆向量的深度学习中,深度学习逐渐由感知学习迈向认知学习。
从深度学习过渡到GNN,开发者深知落地一个GNN算法的难点在哪里、阻碍GNN被大范围应用的环节是什么。GNN虽热,但也并不像每个人说的那么好,应用场景的拓宽、算法理论的变化、编程范式的变化都可能带来平台的变化甚至颠覆,面对这些不确定性,平台究竟该做什么?
阿里将这些摸爬滚打的经验积累下来,融入到GL,无论是对GL的直接用户、还是参考GL做类似系统设计的同学,希望有所助益。只有更多人了解GNN,玩的起GNN,由感知到认知的跨越才不会是一句空话。
GL遵循轻便易用的原则,充分保留内部子模块的扩展性,并兼容开源生态。概括来讲包括:轻量可移植,模块可扩展,接口可复用,生态可兼容。
轻量可移植
和主流深度学习框架一样,GL平台代码由C++写成,Linux系统下,所有支持C++11的编译器都可以对源码进行编译打包,所依赖的几个外部库也都是开源社区广为人知的。第一次编译过程由于下载外部依赖,需要大概几分钟,后续每次开发编译打包只需秒级,部署成本很低。GL可运行于物理机,也可运行于Docker内,也可基于阿里云的ACK服务一键拉起,确保分布式的机器间网络连通即可。
模块可扩展
系统内部实现高度模块化,每个模块都可独立扩展。可扩展给系统足够的弹性,以适应未来发展的不确定性,以及和不同运行环境的适配。可扩展也为广大开发者提供自由伸缩的空间,快速进行原型验证,而不局限于系统当前提供的功能。
存储模块,抽象了FileSystem和Storage两层,如需扩展自定义存储,一般只需实现FileSystem接口即可,或者通过实现Storage接口直接外接其他图存储系统。Partition模块,定义了数据如何在分布式Server间分布,以及一个分布式计算请求如何正确的转发,新的Partition策略(例如某种更适合业务场景的图切分)只需扩展该模块即可。计算模块,由一个个算子组成,算子可自定义。算子被框架分布式执行,每个算子定义的计算根据指定的Partition策略进行转发,并可通过资源的形式访问全局存储。目前内置的算子种类包括:Sampling,Negative Sampling,Aggregation,Graph Traverse,Graph Query,Graph Update。RPC模块,解耦于其他模块,只负责请求的收发,很容易对接其他RPC框架。Naming模块,用于分布式地址发现,可方便对接不同的调度环境。
接口可复用
接口可复用体现在两个方面:向后兼容与功能扩展。兼容性不言而喻,很多开发者受困于版本更新后的接口兼容问题。功能扩展,一般的做法是新增API,意味着在用户能关注到的基础上带来学习成本。新增API对用户的困扰相对小于兼容性,但API增加也带来庞大的系统维护成本。在GNN快速迭代的当下,功能扩展几乎时刻都在发生,比如新增一种图采样算法,而向后兼容更是由于应用场景和算法更迭带来的变化而不容易做到,我们尽可能使得当这些变化发生时,对用户的损失最小。
GL通过提高User Interface的抽象程度,来降低上述风险。我们发现很多GNN研究者都有图的背景,因为对Gremlin或多或少有了解。Gremlin是一种抽象的图查询语言,Gremlin之于Graph,类似SQL之于Table。GL设计了一套Gremlin-Like的python接口,接口内部会翻译成各种算子实现,每新增一种算子,只需改变接口对应的参数即可。例如,用户随机采样某种顶点的邻居,当新增一种采样算法时,只需改动如下:
import graphlearn as gl
g = gl.Graph()
# sample 10 neighbors for each node in this batch by random sampler
g.V("vertex_type").shuffle().batch(512).outV("edge_type").sample(10).by("random")
# sample 10 neighbors for each node in this batch by new sampler
g.V("vertex_type").shuffle().batch(512).outV("edge_type").sample(10).by("new")
在GNN模型编程接口方面,我们也进行了一定程度的抽象,且提供了诸多可供参考示例。
生态可兼容
GL提供python形式的用户接口,结果以NumPy形式呈现,易于上手。此外,GL可与当下主流的深度学习框架,如TensorFlow、PyTorch等配套使用,丰富上层NN的表达能力。在一个e2e的GNN应用场景中,GL和深度学习框架之间有良好的互补关系,把计算交给擅长的框架,Graph->GL,Numeric->TensorFlow、PyTorch。
GL 的落地应用
GL已在阿里集团内数十个场景落地,包括搜索推荐、安全风控、新零售、知识图谱等。GL日常任务数据为规模达百亿级边、十亿级顶点的异构图,且包含百余个混合类型属性。相比之前通过大数据计算任务(如Map-Reduce)把图数据处理成可供深度学习框架使用的样本的方式,每个模型日均可节省万CPU时(core x hour)算力、百TB存储,从GNN算法开发到上线的周期被缩短到原来的1/3,而且带来了显著业务效果的提升。此外,GL还获得了2019世界人工智能大会SAIL先锋奖。
从一键运行到深度定制
GL基于大规模异构图的场景,提供了一套简洁灵活的API,加速图神经网络的开发。图神经网络学习有两种方式,一种是在全图上通过邻接矩阵计算,比如GCN/GAT等算法,这种方式受到内存的限制;另一种方式是对图采样,做mini-batch的计算,比如GraphSAGE等,这种方式更具有扩展性。
GL支持这两大类型的算法,提供了GraphEngine API、Data Model API以及Graph learning models。
工业级大规模GNN图采样
采样作为GL的核心功能,在所有使用graph-learn的作业中都起着非常重要的作用。常见的用法是遍历图的点或者边产生正样本,然后采样给定节点的n-hop邻居对节点进行编码,对于非监督学习场景使用负采样来得到负样本并对负样本做类似的邻居编码。最后对采样后的结果进行特征的组合和reshape等处理成batch的数据,接入顶层算法模型。
基于这一流程graph-learn目前支持GCN(包括采样版实现), GAT(包括采样版实现), GraphSage, 二部图GraphSage, DeepWalk, LINE, TransE等算法,并且可以方便扩展实现其他的图学习模型。
GNN风控落地场景
阿里将graph-learn应用在安全防控的各个环节之中,取得了良好的效果,下面重点介绍几个GNN的风控落地场景。
垃圾注册识别
淘宝每天新注册的用户中,正常用户占绝大多数,但也有许多黑灰产用户伪装成正常用户,企图获取一个账号从而进行刷单、垃圾评论等等活动,这些账户被称为“垃圾账户”。“垃圾账户”如果注册通过,就可能从事各种危害活动,因此在注册时将其识别并删除非常有必要。通过手机号,设备信息,ip地址等多种关系构建账户与账户之间的连接关系,基于 graph-learn 构建账户和账户之间的同构图以刻画账户的新表征,垃圾注册图模型目前线上已稳定运行近1年,相比于单纯使用账户的特征,每日额外识别10-15%的垃圾账号。
淘系假货识别
通过仔细甄别假货商品和售假卖家之间的多种关系,比如售假卖家之间的团伙关系,物流等产业链关系,并且通过这些关系构建商家-商品之间的异构图,基于graph-learn开发的淘宝假货图模型目前已在服饰类、鞋类、首饰等诸多大类中落地,相比于直接使用商品、商家的特征信息,图模型能够额外识别10%以上的假货商品。
闲鱼垃圾评论识别
闲鱼是目前国内最大的二手商品交易平台,买卖家可以在商品下面评论进行沟通和询问,但其中也有黑灰产会在商品下面留下一些涉嫌广告、欺诈、假货甚至违禁的评论,影响了用户的使用体验,也给用户带来了风险。为了识别闲鱼上的垃圾评论,阿里结合业务特点,自主设计了基于异构图卷积网络的反垃圾系统-GAS,相对于单节点的深度模型,能够在同样准确率情况下获得16%的覆盖率提升,同时我们将该项目中的方法进行总结,所著文章《Spam Review Detection with Graph Convolutional Networks》发表在信息检索领域顶级会议CIKM2019上,并斩获最佳应用论文奖。
恶意评价识别
恶意评价包括评价要挟、同行攻击和虚假评价等多种类型,在淘宝平台上一直是困扰商家的主要问题之一。和传统图模型相比,异构图神经网络通过聚合不同子图的方式消除主观上对强弱边的判断,能够通过图间融合的方式融合不同强度的边信息。在淘系恶意评价的场景上,基于graph-learn 开发的恶意评价图模型优化了整体数据准备流程,提高训练效率,上线后已稳定运行近半年,日均额外识别7%以上的恶意评价。
“职业吃货”行为识别
淘宝平台上还有一部分“职业吃货”存在,他们在淘宝、饿了吗等平台疯狂下单,收货后却立即申请“仅退款”而拒不退货,继而以职业投诉等方式威逼商家妥协,这就是典型的“职业吃货”行为。对这种滥用淘宝会员权利,损害平台正常运营秩序的人,通过各种媒介关系基于graph-learn构建“职业吃货”图模型,相对于GBDT的传统模型,“职业吃货”图模型在相同准确率的情况下,额外识别了15%的恶意买家。
GL 下一步发展规划
围绕GL,阿里未来预计会在以下几个方面投入精力。
新硬件
以图像为代表的应用催化了GPU的发展,可以预见,Graph作为实际生产中最广泛的数据格式,与NN的结合,也会引发更多从硬件角度追求卓越性能的思考。目前阿里内部已经在这方面开始了探索。
新算法
近年来GNN算法相关的paper主要在GCN框架下做延伸,编程方式比较固定,目前或多或少遇到了一些瓶颈。阿里也开始在算法理论上尝试做一些创新,GL的易用和可扩展会助力这一过程。
新业务
GNN覆盖的业务非常广,也会带来很多意想不到的效果。当前落地的应用主要集中在了少数大公司内,还没有普及开来。GL的开源也希望能够助力相关从业者,共同扩大GNN的生态。