Neo4j图数据库亚太地区技术专家详解:基于图数据库实现即时推荐引擎

AI Talking

编辑整理:萝卜兔

本期活动邀请到了Neo4j亚太地区技术专家俞方桦博士,作为资深从业者,他将带我们了解更多关于图数据库的知识。本期的分享主题是:基于机器学习和图数据库实现即时推荐引擎。

近几年来,在这个领域有很多研究和创新,特别是结合机器学习、深度学习等算法来处理图数据,从而实现更加精准的信息分类、数据处理、推荐引擎等应用。

如今,信息推送的速度和用户对信息接受的速度都大大提高,好的推荐引擎应该具备即时性和精确性,实时推荐是成功的秘诀。

要实现推荐,需要建立对用户的了解。比如了解用户曾经购买过什么产品、评论过什么产品、浏览过什么产品以及他们在社交媒体网络与他的朋友或者其它用户建立起的各种关系、交互。而这些数据往往都是非结构化的数据,传统的数据架构或者说关系型数据库显得力不从心,所以才出现了图数据库。

什么是图数据库

图数据库——也可称为面向/基于图的数据库,对应的英文是Graph database。图数据库的基本含义是以“图”这种数据结构存储和查询数据,不是存储图片的数据库。图数据库的基本存储单元为:节点、关系、属性。简单的说就是所有的数据是被建模和处理成图的形式(节点和连接节点的关系),在节点和关系上面都可以定义相应的属性来提供丰富的语义描述这些节点和关系的内容。

关系型数据库和图数据库的对比

关系型数据库存储数据是按照表的方式存储,这样可以较好的避免数据冗余,提高存储效率。但是,其缺陷就是需要把描述不同事物的数据分别存储在不同的表上。当进行查询时,又要把表中成千上万的数据进行连接,这样一来,查询性能就非常慢了。相比之下,图数据库存储数据的同时也保存关系。所以在查询时就不需要再做连接了,因为这种连接已经保存在了数据库中。对于图数据库来说,只是一个简单的地址跳转。

关系型数据库和图数据库查询性能比较

在一个拥有百万用户的社交网络中,假设每个人有50个朋友,从A成员出发不断查询朋友节点。传统关系型数据库RDBMS查询到第4个朋友节点时响应时间激增,到第5个时已经不能返回查询结果了。但是图数据库,还具有良好的响应性能。

推荐引擎

推荐引擎某种意义上看是一种搜索,比如我们要买手机,去电子商务网站上搜索,网站就会相应的推荐一些相关产品。比如不同手机型号的列表、相关配件等等。搜索引擎的目的是让用户当前查询最相关的结果以某种方式进行排序,显示在推荐结果的最顶端。

精准的推荐需要很多用户的相关知识,包括用户过去购买过的产品,过去与网站的交互,在某个时段输入过的搜索内容,甚至天气都可能是一个影响因素。好的推荐要充分考虑与用户相关的知识。

有了相关知识作为输入,可以得到一个推荐结果。用户也会对这个推荐结果做进一步反馈,比如说他是否点击浏览了推荐的内容,是否促进了他的购买等等。我们也会将这些信息收集保存到数据库当中,后台模型则会根据相关规则不断进行调整和监控。推荐会随着数据量的增加越来越相关,越来越精准。

Meetup社交论坛应用

我们来看一个应用案例,详细了解一下如何搭建一个即时分享引擎。Meetup是一个在线论坛,提供一个平台让有不同兴趣的人群组织一些定期的聚会活动,分享自己的见解和知识。用户可以在Meetup发起活动,邀请嘉宾,指定场地等等,也可以搜索自己感兴趣的活动报名参加。

对于Meetup来说,推荐其实是很重要的。他们盈利的关键就在于如何把相应的活动精准的推荐给参与者,同时带动组织者组织更多活动。

在该推荐引擎中,我们主要是以图数据库的模型来表示。数据是以节点和连接节点之间的关系来表示的。这里我们看一个简单的模型:用户会选择自己感兴趣的主题,根据这些主题我们可以搜索有哪些兴趣小组是关于这个主题的,然后去找这些小组组织的活动,推荐给对这些主题感兴趣的用户。

图模型:User代表的用户节点,Topic就是主题节点,还有兴趣小组节点以及Event就是活动节点。

图数据是以节点和连接节点之间的关系来表示。推荐的一个过滤方式,找到相关结果所需要的步骤和路径越长,那么这个相关度就越低,推荐评分就可以相应的调低。还有更多的一些规则,比如用户和相应的兴趣小组共享的主题越多,相关度越高;用户与用户之间会有关系,如果用户A和用户B是朋友关系,那么A参加的活动也可以推荐给B。

图数据库中是怎么表示节点和关系的?在Neo4j中我们用CREATE创建关系。

Dan和Ann是两个节点,节点类型都是Person。关系用方括号包括是loves,方括号两边的减号和大于号代表了关系的方向。

查询关系,使用MATCH。

通过MATCH查询一个节点,并沿着LOVES这个关系找到其它节点,并把查询的结果保存在whom变量中,并返回whom。whom实际上是个列表,可能是空的,也可能有很多个节点。

同样,我们可以进一步的扩展节点,人与人之间会有很多种关系,比如朋友、恋人、同事等等。同时,在关系上还可以定义属性,比如两个人何时成为朋友,在何地认识,等等。通过属性可以对这个图数据模型提供更加丰富的含义。

接下来继续该推荐引擎的设计。

使用Cypher查询语言发现最热门的主题,查询都是从某个节点出发,沿着某一类关系,然后得到其他的节点。

具体的实现过程

用户注册时会选择感兴趣主题,兴趣小组注册的时候会选择感兴趣的主题。所以用户和Group之间有一个Member_of的关系。兴趣小组和主题之间有HAS_TOPIC 的关系。用户和主题之间有interested的关系。这样一来可以通过关系路径来寻找用户感兴趣的主题、活动。同时,我们可以根据用户和兴趣小组之间的共同主题数量来判断相关度,相关度越高,用户对推荐的活动的兴趣就可能越大。当然,也可以根据时间进行排序(具体代码如图中所示)。

为用户推荐朋友参加了的活动,这个推荐要稍微复杂一些。根据用户自己以及用户朋友感兴趣的主题、报名的活动、加入的兴趣小组等信息来找到一系列的活动,再根据时间或者相关度进行排序(实现代码如上图)。

对推荐结果进行评分,如果一个结果被多个规则所选中,那么他的总分就会提高,也会在最后的推荐结果中排在比较前面的位置。

更多的规则

基于协同的规则:在历史数据中,有两个人共同参加了多场活动,那么就可以把其中一人报名的活动推荐给另一个人;还有可以根据两个人对活动的评价进行相似度的判断;

常见的图论算法

常见的图论算法——中心性分析说

一个社区中会有比较中心的人物,比如一个群的群主,一个版块的版主。那么这种中心性的数据分类和分析可以通过节点和关系计算。

社区检测算法——通过不同用户参加了不同的主题活动、兴趣小组,可以自动对人群进行分类,针对性的进行内容的推荐。

路径寻找——如何寻找到最短路径,寻找任何两个人之间关联的方法,推荐新的朋友,发现共同兴趣,是否有相同内容的评价,优化活动安排的时间和地点。

最后,需要了解用户对推荐结果的反馈。用户是否点击和浏览了推荐的内容,是否参加了活动,是否收藏和喜欢了活动,根据这些信息来调整规则。比如某一规则推荐给用户的结果,用户的反馈很少或者出现负面的反馈,那么我们就要降低该规则的权重或者进行修改。根据用户实际选择的结果,比如用户会更多选择朋友参加的活动还是会从个人兴趣出发选择活动?我们就可以利用机器学习来学习用户选择的模式,从而作出更好的推荐。

总结

图数据库对于AI、机器学习的应用有很大的增强,比如说知识图谱,大规模网络数据可视化,基于图的分析应用,GCN等。图数据库将会在很多方面极大地增强AI的应用。

图数据库的数据模型具有很好的一致性和灵活性,在非结构化数据上具有很大的性能优势。可以对关系进行灵活的建立、修改、去除等等。另一方面他的理论基础也相当完善和丰富。图数据库在即时推荐引擎的应用上取得了许多成功。一个优秀的推荐引擎不仅要建立在对产品、关系的了解上,也需要建立对用户以及用户的社交网络、用户的交互等各种数据基础之上,而这实际上是非常庞大、复杂的网络。当使用图数据库进行数据存储,当查询性能不再成为问题时,更加精准实时的推荐结果才能成为可能。

图数据和相关免费资源获取途径:

Website:http://neo4j.com

下载桌面版:https://neo4j.com/download/

在线数据库沙箱:

https://neo4j.com/sandbox-v2/

技术问题(英文):

http://stackoverflow.com

Github开源项目和代库:

https://github.com/neo4j-contrib/

中文社区:http://neo4j.com.cn

《Neo4j权威指南》

《图数据库(第二版)》(电子书):

https://neo4j.com/graph-databases-book/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180906A0A42O00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券