图平台技术及应用实践

本文来自OPPO互联网技术团队,如须要转载,请注明出处及做者。欢迎关注咱们的公众号“OPPO_tech”算法

图论是计算机科学中最重要、最有趣的分支之一,对于存在拓扑关系的业务场景,理解和使用图能够对业务有不少帮助。本文主要针对图理论在大数据量下的技术和应用场景作全貌性的介绍。数据库

1. 图论的起源

在18世纪,一个叫作柯尼斯堡的城市,河流将该城市切成了四部分,割裂的土地之间经过七座桥链接起来了。服务器

当时,有一个与柯尼斯堡的桥相关的问题:如何只经过每座桥一次而穿过整个城市。网络

为了分析并解决这个问题,人们把该问题作了进一步的抽象:将割裂的区域抽象成一个节点,链接两个区域的桥抽象成两个节点之间的一条边,进一步将该问题转换成了最先的有关图论的问题:柯尼斯堡七桥问题,也叫做一笔画问题。数据结构

到了19世纪50年代,又有了一个关于地图染色的问题将图论的影响和关注起到了必定的推动——四色猜测。主要是说可否只用四种颜色就能为全部地图染色?该问题也能够抽象成图的问题作进一步的分析。并发

后来随着计算机技术的发展,实际应用中业务场景的不断丰富,人们发现了更多的应用场景中的数据结构均可以使用图来表示。最典型的场景就是社交网络,关于图在社交网络中的应用,也有不少基础理论方面的研究,最有名的就是六度关系理论。less

该问题说的是:咱们构建一张全世界人口组织成的社交关系网络,其中每一个人就是一个图中的节点,人和人之间的关系就是一条边,好比:朋友关系、同事关系、上下级关系等。运维

在这个社交网络中的任何两我的之间,最多须要经过六次关联,就能够将他们链接起来。好比你和比尔·盖茨之间,中间经过六次关系扩展,大家两个之间就能够创建起来链接。对于这种很神秘的链接,想一想有没有很激动。dom

再后来,Facebook在本身的社交网络中作了研究分析,将以前的六度关系,逐步缩短到了2008年的五度关系,2011年的四度关系。机器学习

对于一个几十亿实体,百亿甚至千亿关系的图,它的直径却只有4,可想而知在它之上要作的各类分析工做的复杂性。

复杂问题先定义并作好分类,有助于咱们开展工做。在此处,咱们将图的分支分为四个部分:图的理论研究、图存储、图计算和图神经网络。

  • 图的理论研究偏向本质的数据问题的分析研究,与实际应用还有一些差距,不是咱们目前要考虑的问题点,就先归为一类,本文不作展开;

  • 图存储及检索侧重点在于实时或准实时的在线分析为主,主要是作实体检索、关系检索、关系拓展、路径计算等;

  • 图计算和图神经网络以离线计算为主,主要用于分析整个图的拓扑特性、社区特性等。

2. 图定义模型

在海量数据下,要构建、检索、分析一张大图,须要合理的数据结构来进行。当前已有的图定义的方式能够分为三种:超图-HyperGraph,属性图-PropertyGraph,三元组-RDF。

超图-HyperGraph

在超图中,实体之间是经过超边进行链接的。一条超边对应一类关系,如图所示,相同颜色区域中的实体之间都是该类边。

属性图-PropertyGraph

基于超图来理解属性图,不一样点是属性图中的实体之间的边是独立存在的,没有共用。每一个实体有本身的属性信息,好比公司的职员实体,具备属性:姓名、生日、工号等,职员和公司之间雇佣关系,雇佣关系也有本身的属性:入职日期等。

三元组-RDF

三元组是对RDF格式的一种形式化说法。由于RDF的每一条记录有三个部分的内容:资源信息、属性、属性值。所以而得名三元组。

RDF数据格式定义来源于W3C的标准,是最先用于表征语义网的一种数据规范。

知识图谱领域在90年代就已开始,最先的形式就是使用W3C标准的RDF表征语义网,后来随着不断的发展,国内外各个大厂也不断在提出本身的知识图谱产品。但底层用于存储语义关系的存储引擎却不局限在RDF模式下了,也有不少使用属性图的方式进行存储。

超图、属性图、RDF虽是定义图的拓扑关系的三种不一样范式,可是均可以正确表征图的拓扑特征,并且三者之间是能够相互转换的。

不过随着如今图的应用早已不局限在知识图谱领域了,在社交、推荐、金融风控、运维等多个领域都有了丰富的应用场景,不一样业务对于使用场景也有了更多的要求。

RDF这种schema-less的存储模式在实际应用中逐渐须要搭配其余DB来配合使用才能知足业务要求。因此属性图的存储模式反而更受欢迎,从市面上能看到的图数据库选择的图存储模式也能佐证这点。

3. 图数据库

从数据关系及检索场景来分,数据存储及检索能够大的方向上分为四类:

  • K-V存储

  • 列式存储

  • 对象存储

  • 图数据存储

KV存储类数据库:主要针对惟一性键值来查找检索对应的值,或是数值、字符串,或是列表、字典等。

列式存储类数据库,是结构性数据存储的广泛选择。能够进行按键值检索、按列聚合分析和多表关联分析等。对象存储主要应用在离线数据存储及平常服务数据冷备等场景中。

而图数据的检索需求与以上三个相同点,又不局限在相同点上。好比在查找具体一个实体时,相似于KV类按键值检索;在进行关系拓展分析时,相似于列式存储中多表join操做。

所以构建一个高效可用的图数据库也须要兼顾考虑到不一样检索使用场景下的特色来进行全局分析。

回想下在大学期间学习数据结构时,对里面的图是如何定义和分析使用的。

以该有向图为例,咱们使用邻接矩阵的形式来表示图中的节点和边,矩阵为|V| * |V|规模的方阵,矩阵中的值表示两个节点之间是否存在关系,若是有则置为1,没有则置为0。

对于这种小数据量的图数据,在实际的应用程序中进行处理的时候,为了便于扩展,一般使用链表来存储。

然而这些美好的、简单易用的处理逻辑也只能停留在课堂做业中而已,对于互联网业务场景中的海量数据,想构造一个百万乘百万、一亿乘一亿的邻接矩阵来进行运算,基本不具有可行性。

因此咱们须要对海量图数据的存储及检索方式作相应的合理设计。不一样的图数据库对于图数据存储的格式总有些异同,可是对于图中的关联关系确定都是不变的,好比实体和自身属性的关联关系、实体和关系的对应关系等。

主流的图数据库中,对于图数据的存储主要有两种方式:

  • 拓扑关系和属性数据集成

  • 拓扑关系和属性数据分离

拓扑关系和属性数据集成的存储方式中,能够将属性数据和关系列表数据统一做为实体这个Key对应的Value。

这样能够经过查找到实体后,很方便的扩展到属性数据集关系数据。一般为了查询上的高效,会将关系数据存储两份,根据出节点和入节点各对应一组相同的边列表。

拓扑关系和属性数据分开存储的方式中,拓扑关系只存储边数据,属性数据可使用KV存储引擎进行管理。

这样在进行检索的时候,按照不一样查询场景进行区分操做:好比只查询单实体及其属性信息时,就能够只经过KV进行检索便可;而查找拓扑关系时,须要结合拓扑存储及属性存储二者交互进行。

这样的分类存储的方式在某些场景的效率较高。可是实际图数据库的检索应用场景中,大多数的请求都是须要结合拓扑和属性数据共同进行的,这就须要在两个存储引擎中进行交互来整合最终结果数据。

除此以外,拓扑关系和属性数据分开存储也有本身的进阶版设计。

就是在拓扑关系存储中,扩展存储少许经常使用的属性数据,而不是单单只有拓扑数据。这样对于某些常见的查询也能够只使用拓扑关系类数据便可获得检索结果。

在近年来,随着应用场景的逐渐丰富,图数据库市场逐步趋热的背景下,图数据库产品的发展也有了长足的进展。从DB-Engines的最新统计分析中也能够看到,图数据库的趋势一骑绝尘。

在图数据库市场中,实际的产品矩阵咱们这里分红三个维度来看:

  • 企业服务版

  • 开源版

  • 云服务商

图数据库的企业服务提供商中,典型的表明就是TigerGraph、DataStax、Neo4j等。

在开源的图数据库中,关注比较多且社区比较活跃的有JanusGraph、DGraph、Neo4j、S2Graph。(Apache孵化中的一个图数据库产品,目前功能还比较简单,并且感受活跃度也比较低)

同时,在愈来愈多的公司上云的趋势下,国内外各大云服务商也将图数据库加到了本身的产品矩阵中。好比:AWS的Neptune、Azure的CosmosDB、阿里云的GraphDB、腾讯云的星图(TKGD)、华为云的GES等。

另外一方面,不一样的图数据库产品之间也有各类藕断丝连,分不清理还乱的关系。好比Neo4j,既有收费的企业版,也有开源的单机版。

不过Neo4j的单机版有些使用上的限制:

好比同时只能有一个打开的图,进程使用的核数也有限制;

好比企业版的DataStax公司的图数据库是收购了Titan而来的,Titan在被收购后,开源社区有fork出了新的分支:JanusGraph。百度的HugeGraph也是基于Titan、JanusGraph的基础之上开发而来的。

从图数据的存储范式上来看,使用属性图是绝大多数图数据库的选择,也有少部分使用的是RDF的存储方式,好比DGraph,Stardog等。

值得一提的是,在使用图数据库时,须要使用到图查询语言,而图查询语言也有多个不一样形态的语言。典型的有:TinkerPop Gremlin、Neo4j的Cypher、TigerGraph的GSQL、用于RDF类图数据查询的SparQL等。

不过Gremlin的图遍历语言目前的使用面应该是最广的,在没有统一标准的图查询语言中,感受也算是半个不成文的标准了。

在实际应用中,图数据库可以提供的主要检索功能有:

实体查找:即根据实体的ID或者某几个属性信息进行过滤查找具体的实体信息;

关系拓展:主要是实体的邻居查找,多跳关系查找,以及基于多跳关系查找基础之上的各类条件过滤查询;

路径分析:根据已知的两个实体,查找他们之间的最短路径,全路径等信息。

在拓扑关系的拓展检索场景中,与传统数据库对比,图数据库少了屡次的交互及表间关联操做。

举个例子,对比下关系型数据库与图数据库在相同查询场景下的区别:

在这个例子中,咱们如今要查找员工Alice所处的部门名称。

Q:假设Alice能够同时任职于多个部门

在关系型数据库中,可能存在三张表:员工信息表、员工与部门关系表、部门信息表,咱们写SQL进行查找,须要进行两次JOIN操做才能获取Alice所处的部门名称。

而对于使用图数据库来存储及检索的话,能够将员工和部门都定义为实体,而他们之间的关系就是从属关系,这样可使用图查询语言一句话查找获得结果。

对比能够看到,不管是操做的复杂度仍是所需计算复杂度,都大大下降了。

得益于图数据库在拓扑关系类分析中的优点,实际落地在有图应用的场景里面也变的愈来愈多,举几个典型的例子:

知识图谱,是图数据库最先发挥价值的场景之一。

从知识存储沉淀到知识检索发现,经过知识内部的关联关系不断拓展,强化知识表达的内容丰富度。

如今的知识图谱会扩充了更广义的应用场景,将NLP技术的应用加入进来。

从原始的非结构化文本中进行实体的抽取、关系的抽取和预测、实体的不一样说法之间的消歧等等。这些都对知识图谱的图数据构建及使用提供了极大的便利和业务场景的拓宽。

社交网络与图结构自然适配,经过图数据库将社交网络中的实体与关系数据存储起来后,能够用做好友推荐、兴趣群组推荐等,如今这种网络也能够扩展到将社交网络与内容推荐网络整合起来,给用户推荐商品、咨询等。

除此以外,还有金融风控、企业IT运维等也能够将图数据库应用起来并发挥价值,好比金融机构能够经过图来分析我的及公司的信贷风险,IT运维工程师能够经过图来分析服务器异常、交换机故障的影响范围并制定应对措施等。

4. 图计算

图计算:是图理论技术在实际应用中的另外一个主要阵地,图计算的发展也经历了算力发展、场景丰富、技术研究对图计算的不断推动。

到如今为止,除了PageRank,LPA等常见的算法外,也有了与神经网络结合的图神经网络算法,可应用在对拓扑结构的嵌入向量表达及节点、关系预测中。

咱们这里介绍几个常见的图算法:PageRank、Label Propagation、Random Walk。

PageRank

PageRank:是Google公司所使用的对其搜索引擎搜索结果中的网页进行排名的一种算法。

PageRank本质上是一种以网页之间的超连接个数和质量做为主要因素粗略地分析网页的重要性的算法。其基本假设是:更重要的页面每每更多地被其余页面引用。(或称其余页面中会更多地加入通向该页面的超连接)

其将从A页面到B页面的连接解释为“A页面给B页面投票”,并根据投票来源(甚至来源的来源,即连接到A页面的页面)和投票对象的等级来决定被投票页面的等级。简单的说,一个高等级的页面能够提高其余低等级的页面。

该算法以谷歌公司创始人之一的拉里·佩奇(Larry Page)的名字来命名。谷歌搜索引擎用它来分析网页的相关性和重要性,在搜索引擎优化中常常被用来做为评估网页优化的成效因素之一。

当前,佩奇排名算法再也不是谷歌公司用来给网页进行排名的惟一算法,但它是最先的,也是最著名的算法。

Label Propagation

Label Propagation算法:是一种基于标签传播的局部社区划分算法。

对于网络中的每个节点,在初始阶段,Label Propagation算法对每个节点一个惟一的标签。在每个迭代的过程当中,每个节点根据与其相连的节点所属的标签改变本身的标签。

更改的原则是选择与其相连的节点中所属标签最多的社区标签为本身的社区标签,这即是标签传播的含义。随着社区标签的不断传播,最终紧密链接的节点将有共同的标签。

Label Propagation算法最大的优势是其算法过程比较简单。

想比较于优化模块度的过程,算法速度很是快。Label Propagation算法利用网络的结构指导标签的传播过程,在这个过程当中无需优化任何函数。在算法开始前咱们没必要要知道社区的个数,随着算法的迭代,在最终的过程当中,算法将本身决定社区的个数。

Random Walk

Random Walk是一种数学统计模型,它是一连串的轨迹所组成,其中每一次都是随机的。

它能用来表示不规则的变更形式,如同一我的酒后乱步,所造成的随机过程记录。随机游走的探寻过程主要是基于过去的表现来选择下一步,没法预测未来的发展步骤和方向,相似于物理学中的布朗运动。

近几年深度学习的技术在CV和NLP领域取得了长足的发展,图在结合神经网络的基础上也发展出了图神经网络方面的相关算法。

主要有Graph Embedding、Graph Convolution Network、Graph Attention Network等;

其中Graph Embedding和GCN在实际的业务场景中的使用居多,咱们这里主要对这两类方法作个简单介绍。

Graph Embedding

DeepWalk主要方式是与天然语言处理中重要的Word Embedding方法Word2Vec联系了起来,使得Network Embedding问题转化为了一个Word Embedding问题。

DeepWalk经过从每一个结点出发n_walks次,每一步都采起均匀采样的方式选择当前结点的邻接结点做为下一步的结点随机游走。

当游走的路径长度达到walk_length后,中止一次游走。

这样就生成了一个个游走的序列,每一个序列都称为一个walk。每一个walk都被当成Word2Vec中的一个句子,而每一个结点都是Word2Vec中的一个词。

有了具体的图中的“词”和“句子”后,以后的算法几乎和Word2Vec的SkipGram版本彻底同样。使用一个大小为window_size的滑动窗口做为一条walk的context,使用一个context中的中心词去推测全部context中的其余词,使用的目标函数也与Word2Vec一致。

类比可知,这里的Embedding就是每一个节点在整个图的拓扑结构中的嵌入表达。可使用预训练获得的embedding向量作进一步的业务使用,如推荐等。

虽然DeepWalk经过随机游走的方式,将图结构数据转化为了天然语言处理的任务来完成。

可是,图结构中节点的关系每每比词上下文关系更加的复杂。一般部分的图结构数据中边具备权重,使用现有的Word2Vec方法没法很好的应对这个问题。

此外,在现实世界数据中,图的规模每每过于庞大,以致于存下全部的walk的开销将十分惊人。

LINE(Large-scale Information Network Embedding)再也不采用随机游走的方法。相反,他在图上定义了两种类似度:一阶类似度与二阶类似度。

  • 一阶类似度:一阶类似度就是要保证低维的嵌入中要保留两个结点之间的直接联系的紧密程度,换句话说就是保留结点之间的边权,若两个结点之间不存在边,那么他们之间的一阶类似度为0。例以下图中的六、7两个结点就拥有很高的一阶类似度;

  • 二阶类似度:二阶类似度用一句俗话来归纳就是“我朋友的朋友也多是个人朋友”,他所比较的是两个结点邻居的类似程度。

若两个结点拥有相同的邻居,他们也更加的类似。若是将邻居看做context,那么两个二阶类似度高的结点之间拥有类似的context。这一点与DeepWalk的目标一致。例以下图中的五、6两点拥有很高的二阶类似度。

Node2Vec是一份基于DeepWalk的延伸工做,它改进了DeepWalk随机游走的策略。

Node2Vec认为,现有的方法没法很好的保留网络的结构信息。

例如图所示,有一些点之间的链接很是紧密(好比u, s1, s2, s3, s4),他们之间就组成了一个社区(community)。网络中可能存在着各类各样的社区,而有的结点在社区中可能又扮演着类似的角色(好比u与s6)。

Node2Vec的优化目标为如下两个:

  • 让同一个社区内的结点表示可以相互接近;

  • 在不一样社区内扮演类似角色的结点表示也要相互接近。

为此,Node2Vec就要在DeepWalk现有的基础上,对随机游走的策略进行优化。Node2Vec提出了两种游走策略:

1.广度优先策略

2.深度优先策略

就如上图的标注所示,深度优先游走策略将会限制游走序列中出现重复的结点,防止游走掉头,促进游走向更远的地方进行。

而广度优先游走策略相反将会促进游走不断的回头,去访问上一步结点的其余邻居结点。

这样一来,当使用广度优先策略时,游走将会在一个社区内长时间停留,使得一个社区内的结点互相成为context,这也就达到了第一条优化目标。

相反,当使用深度优先的策略的时候,游走很难在同一个社区内停留,也就达到了第二条优化目标。

那么如何达到这样的两种随机游走策略呢,这里须要用到两个超参数p和q用来控制深度优先策略和广度优先策略的比重,经过p和q的调整,就能够是业务跟进本身的特色来选择对于BFS和DFS的偏重了。

GCN

深度学习的应用中最广的是CV领域的CNN和NLP领域的RNN。可是这二者一种适用于处理规范的网格数据,一种适用于处理序列化数据。

而对于图数据,拓扑关系属于非欧结构的,好比CNN在Non Euclidean Structure的数据上没法保持平移不变性。

简单理解就是在图中的每一个节点的邻居节点数据是不一样的,因此没法使用一样一个尺寸的卷积核来进行卷积运算。

可是人们又但愿在这样的数据结构上有效的提取空间特征来进行机器学习,因此GCN就成了研究的重点。

GCN的本质目的就是用来提取拓扑图的空间特征。

简单来讲就是使用拉普拉斯矩阵来计算并构造卷积核,输入图网络结构,中间传递过程保持住了图的拓扑关联性。GCN能够用于节点预测、关系预测及生成Embedding向量用做其余场景的应用。

GraphEmbedding和GCN目前应用场景最多的当属推荐了,这里给一个推荐中使用DeepWalk进行效果提高的主流方案。

区别于传统推荐的基于用户和商品之间之间关联和画像特征来进行整合,并设计推荐算法。图神经网络在该场景中,从两个方面提出了新的思路:

  • 针对用户浏览商品的顺序,构建商品的序列关系;

  • 根据用户浏览商品的关联关系,构建二部图。(用户和商品之间存在关系,用户之间和商品之间无关联)

针对这两类图都可以使用DeepWalk生成Embedding向量,并进一步用做推荐。

5. 总结

全文从三大部分进行图的技术及应用概述:

  • 图的起源发展及定义方式;

  • 图数据库的技术及应用;

  • 图计算和图神经网络的介绍

图数据库和图计算,这两个分支都是有不少内容值得详细深挖研究的,这里只作了概述性的引入,后续逐步来经过专题进行学习和分享。

相关文章
相关标签/搜索