levycui 发表于 2019-9-18 22:15:18

Graph Embedding技术在知乎的应用实践

问题导读:
1、什么是Graph Embedding 技术?
2、我们为什么要用到Graph Embedding?
3、如何理解globalEmbedding的图的结构?
4、Graph Embedding在凑单系统里面做怎么做的?
static/image/hrline/line7.png


9月6-7日,在由CSDN主办的2019中国AI开发者大会(AI ProCon 2019)的 机器学习专场中,知乎算法团队负责人孙付伟在机器学习专场中分享了《Graph Embedding及其在知乎的实践》。


Graph Embedding 技术是一种将图的拓扑结构进行向量表示的方法,从而获取到网络关系信息,应用于推荐等多种场景。在本报告中,孙付伟重点讲了Graph Embedding 技术,以及在知乎的具体实践,包括知乎用户embedding 的实践和在在知乎收藏夹数据中的应用。未来,知乎还计划用Graph Embedding进行会员购买预测,以及个性化推送的召回。

以下为演讲内容实录:

很高兴能够参加这次AI开发者大会。我今天分享的是Graph Embedding及其在知乎的一些实践。

什么是Graph Embedding呢?这些年来深度学习发展速度非常快,但是一直遇到一个问题,我们现实的世界当中很多是以图存在的,比如社交关系,比如搜索行为、购买行为,它形成的都是一种图的表示关系。但是传统的Embedding,包括在自然当中图关系的挖掘,其实做的远远不够。从2014年开始,已经有一些业内学者在这方面做一些深入研究,研究Embedding是否可以做图的表征,接下来我会简单做个介绍。之后我会分享一下Graph Embedding在知乎的两个应用,一个是用户Embedding的表示,一个是知乎收藏夹数据的Embedding挖掘。最后是对今天分享的总结,以及我们未来的具体工作规划。

首先讲一下知乎的业务背景。知乎现在已经是一个综合性的问答社区,截止到今年1月份,我们的用户数超过2.2亿,累计超过3000万的问题提出,并由此带来1.3亿的优质回答。除此之外,我们还有大量的文章,盐选专栏、电子书等等其他多种产品形态。在这样一个大的问答社区当中,本质上来说,其实一个问答社区是一种连接关系,万物都是一个连接关系。

在问答社区里面包含了三大块:一块是人和人之间的连接,一块是人与内容之间的连接。比如说在知乎的搜索和推荐当中,就存在着大量的连接关系,我们会根据用户的关注页关系来推荐内容。还有一块是内容自身的连接,在知乎有一个特殊的功能“收藏夹”,并且这个收藏夹是公开的,大概有几千万个,意味着其他用户是可以看到别人的收藏。这就会形成内容和内容之间的连接。在知乎这样一个万物都是连接的问答社区当中,如何有效表征这种连接关系,是我们这几年一直在思考一个点。


上图我们以站内一些数据做了一个连接关系的展现,其实一种大的连接点,会形成千千万万的连接。用户关系挖掘会有助于我们社群关系的连接提升,也有助于用户群体的发现。

既然是图关系,我们为什么要用到Graph Embedding呢?在面对图结构的时候,我们传统的序列Embedding经常不知道该怎么去处理。图这种连接关系是没有序列状的表示,怎么去做这件事?为了解决这样一个问题,从2014年一直到现在,Graph Embedding变成了业内一个全新的研究方向。

我先介绍一些经典的技术和方法。首先我们看第一个,2014年deep walk提出可以算作Graph Embedding迈出来的第一步工作。这篇文章的思想相对来说还是比较简单的,它是借助了word2Vec之前的图表序列,随机游走方式,将图以序列方式表征。举一个例子,这个图更容易跟我们现实当中结合起来,最左侧是用户购买,或者贡献购买之间的关系。根据贡献购买之间的关系之后,走一步randomwalk生成,形成商品关系之间的序列,形成序列之后,就可以借助于Graph Embedding思想进行表示。可以说,它已经打开了Graph Embedding这扇门,让大家了解其实图也是一个我们需要去深入连接的点。


2014年deep walk打开这扇门之后,2015年微软发表了LINE这篇文章,这篇文章有两个核心的概念需要说明一下,它明确定义了图当中的相似度如何表征,这里表征用了两个概念,一个是1阶相似度,节点和节点之间存在直接的连接,叫1阶相似度。比如右侧的6和7,7和8,这种连接关系都是1阶连接,当它存在边,它的边就是它的相似度,如果不存在边,它的1阶相似度就是0。2阶相似度主要说的是它们的两个节点之间并不存在直接连接关系,但是它的邻居是大量重合的,主要衡量的是两个节点的网络结构相似度的程度是多少。

比方说在这个图里面,5和6,1阶相似度是0,2阶相似度可以是另外一种值。通过这种方式我们就可以把图的这种关系用这样的定义来刻画出来,我们在现实当中经常需要去挖掘的是,除了它的1阶关系,还要用到它的2阶关系,从而能够应用到把这个Embedding学出来它们的网络结构的表征,从而应用于推荐这些场景。讲完概念之后我们再来看1阶相似度和2阶相似度如何定义问题的。


我们先说一个机器学习的问题,里面有一个叫预测概率、经验概率、和优化目标。在优化目标上,核心点主要预测的是交叉商的优化目标,这部分只是表征了一个正样本,我们其实还存在负样本,对负样本采用负采样的方式,把优化目标作为一个改造,形成这样一个表征,这是1阶相似度。2阶相似度,优化目标和上面是类似的。这是基于上面这种关系我们把它的优化目标做一个简单说明,这篇文章里面做了三点优化技巧。

首先,1阶和2阶可以分开训练的,因为每个都有自己的优化目标,这篇文章里面特殊的技巧,分开训练,在一些应用场景里面把它concat到一起做预测。其次是wij,权重范围相当大,所以我们在去做预测推广的时候它的学习率是很难控制的,这里采用了一个技术方案,边采样,EdgeSample,从而降低这个问题。对于冷启动的事,当一个节点边较少的时候,怎么去处理,在现实当中冷启动经常会遇到这样的问题,这篇文章已经开始考虑了节点冷启动问题,它用的一个手段是,往外扩充,用它的2阶邻居,它的3阶点来去处理它们2阶相似度,放在2阶相似度上来表明。这个是2015年的一篇文章。

2016年有两篇文章,一篇文章在Deep walk的扩展,我们可以想一下randomwalk整个流程,类似于深度优先搜索的挖掘路径,这篇文章和Deep walk唯一差别是,它既考虑了DFS,又考虑了BFS,可以把结构信息学得更全面一些。分为同质性和结构性,它们形成的序列越接近,Embedding表征越相似,比如说U和S1、S2这些,表征越接近越好。结构性,两个结构越接近,学出来的Embedding表征越相似。如果我要更倾向于BFS,U和S6更接近一些。如果是DFS,相近的这些Embedding表征更相似。所以,这篇文章是做了结构性和同质性的某种中和,但是怎么来调节它们俩之间的权重,怎么来控制,其实用了一个跳转概率,来控制BFS和DFS的倾向性。

以下图为例,当一个T节点进入到下一个节点V的时候,到V这个节点之后,下一步应该朝哪个节点走呢?这里定义两个参数,分别是p和q,通过这两个参数来控制我到底v朝X2、X3随机走,还是返回。在v到t的跳转概率反而越来越小,越大就偏重于DFS,如果t越小就偏重于BFS。这篇文章把p和q做了一系列参数实验。整个效果看一看是不是我刚才说的内容。

当它越靠近DFS的时候,它们学出来的是这种促的信息,学Embedding表征越来越相近。如果是靠近BFS,节点连接的关系信息学的会更相近一些。

这是2016年的第一篇文章,在Deepwalk基础上做了进一步演进,主要是解决结构性的问题。

第二篇文章,SDNE这篇文章,这两篇文章都发表在KDD2016年的两篇文章,上面那篇文章是在Deep walk基础上做扩展,这篇文章是在LINE基础上做扩张。图的网络结构信息分成local和global的,local是LINE里面1阶关系,直接相连关系,global说的是邻居之间跟它的连接关系,这是它的一个对应。

这篇文章又用了另外一种思路,非监督的autoencoder方式,来得到Embedding表示,我们先来看右侧这个图,globalEmbedding的图的结构。它的Embedding表示什么呢?和我相连的那些节点权重就是这里面的表征,xi是这样表征,autoencoder之后会形成新的表征,我们去衡量它原始的表征和新的表征之间的相似度,就是我们优化的一个点。xi用邻居的信息来表征它自身特征的,其实是global的概念。(原文当中的图是错的,这个地方是local,这个是global,其实我们反过来看,应该是画错了,这个词画错了。)

这个是针对i这个节点,针对j这个节点也一样,也会学出来这个表征,最终i这个节点的表示是中间这一层,我们是要去度量中间这两个节点的相似度,来去表征。它的优化函数,加了一个因子。这篇文章可以说是用了我们N的更复杂的autoencoder的思想,在LINE的基础上做了扩展。

这篇文章其实也有应用,在阿里,凑单系统里面,这是他们开放的一个博客里面有所提到,凑单系统里面做这件事,怎么做呢?拿到用户同时购买的内容序列,形成这样一个图的表示。在这个图的表示里面去用加权的walk做采样,为什么做采样?这个表征是说它与它相连的那些节点之间的权重,当我这个数据量规模,像淘宝这样一个大的数据规模里边,连接关系是特别特别多的。先对样本做采样,采样的方式是对热门数据做加权,它想表征出来让热门数据推荐的更充分一些,然后做了这样一个加权,这个里面用的结构其实就是SDNE。
不过它在SDNE里边加了这样一个全连接,能跟它的现有系统做一个比较,这是它的一个变化。它在双11预热期间,在点击和多样性这两个指标上,据它的公开表述说,它的点击提升了13%,它做成实时化之后,在这个基础上又提升了4%。它们内部多样性指标直接翻了接近 1倍。

这是2016年的第二篇文章。

在2018年阿里又写了一篇文章,主要用在解决我们在图里面表征冷启动的一些问题,有些节点它的信息较少,我们怎么去处理。EGES是在2018年KDD上发表的,核心点主要是在Deepwalk基础之上加入了对冷启动商品的处理,加入的方式叫side information,两个商品之间尽管没有共现的关系,尽管共现关系特别少,但是还有其他额外的知识信息,知识图的信息是可以用起来的。比如说属于同一个店铺,属于同一个品类,属于同一类价格区间等等,大概十几类sideinformation,把这个信息变成了它在图当中利用特殊的相似度链接,把它拼接起来,形成一个新的更完备的图。后面的工作就比较简单了,形成这个链接之后,不同的连接关系,通过sideinformation信息学的某种表征,把向上连接作为不同权重来去学习它。


这篇文章思路是比较简单的,但是它具有很强的实操性,在业内已经有几个公司都在用这篇思路来做Embedding召回,一会儿我们可以去看在知乎上的效果。

上面简单说了一下Graph Embedding这些年主要的技术点,当然,还有最新的我还没有讲到。我下面主要讲一讲GraphEmbedding在知乎的两个实践,现在Graph Embedding在知乎应该有三四个分别的应用,我先拿这两个,因为这两个和上面的文章是一一对应的。

第一个,关于用户Embedding表示,这个是我们在2017年的时候做的一个尝试,我们在知乎大概有几千万的存在大量链接关系的用户,为了强化他们在社区上的互相影响,并且让他们形成一种社区的概念,做用户的推荐,或者说用户群体的挖掘,变成我们不得不考虑的一件事。当时考虑一个点,用GraphEmbedding思路,我们去学一下Embedding,看看它的效果。这里面的思想其实比较简单,就是纯的Deepwalk,通过筛选,大概筛选出2400万用户群体,根据它的关系挖掘,形成这样的关系链路,形成关系序列,最后就是用Deepwalk思想做了预测。

上图是我们跑完之后的效果图,做机器学习和深度学习的会比较了解这些同学。

上面的思想比较简单,2017年做的,今年上半年我又做了第二件事,EGES,阿里2018年的那篇文章,知乎有几千万收藏夹的数据,这是两个例子,深度学习,用户自己编辑的收藏夹,我们可以看到相关文章,常用的,什么是梯度下降法,机器学习最好的课程是什么等等,一系列文章,形成了收藏夹。这些是成长相关的文章,比如自律,提升自我竞争力等等。当然,这些数据全是用户自己对外公开的数据,因为收藏夹数据要么是自己看的收藏夹,要么是公开的收藏夹,我们用的数据都是公开的,用户愿意分享的收藏夹数据。

这个收藏夹数据包含了大量有价值的内容,2018年的时候,我们大量都在用一些协同过滤思想来做这件事,挖掘它们之间的关系。当时遇到两个问题没太好解决。第一个问题,长尾的内容不太好表示。第二个问题,默认了用户的这个序列,在我们协同过滤里边浏览的序列,但是在实际当中,它这个先后是没有任何关系的。所以,在矩阵协同分解的时候,我们认为它无法表达更强的传播能力,让它学的多样性不够,总体效果也可能会有些损失,等一会儿我们来看看是不是这样。

其实思想还是借助于业内他们的思路,他们是基于共同购买,我们是基于收藏夹的内容,做一些筛选,构建Graph,节点为内容,而没有把收藏夹变成其中一个节点,这个其实是有一个考虑的。大家可以想想为什么,我们的内容可能和收藏夹是不成比例的,在我们收藏的内容,如果把它变成一个节点,它可能学出来的会有些问题,当然,这是我们睬的一些坑,后面挖掘出来的东西。如果它贡献了,我们就认为它存在一条边。

在收藏夹数据里边,我们跟淘宝可能不太一样的地方是,我们更期望的是推荐出来它的真正Embedding相似,而不是推荐一些热门的。所以,在这里我们会对热门内容降采样,并且考虑做序列挖掘的时候,考虑了BFS挖掘信息。我们还引入了自身的side information信息,例如topic,两篇文章同一作者等等这样的信息,加入到我们的Embedding学习当中。这是我们做的几个概念。

训练集,110万节点,构建3亿条边,Random walk和EGES差不多,每个节点会进行10次walk,最终效果是下面这个结果。本来还有它作为Embedding召回在线上应用的东西,但是那些东西不太适合在这个场景去说,所以我就没有把那些东西添上。我们先以一个事例说明效果。

同样是两个回答,这两个回答都是说为什么白居易写了《琵琶行》却不娶琵琶女,我们可以看用协同过滤推出来的效果,右侧是我们基于EGES推出来的。基本上是偏重于诗词,还有一些是雅称,还有一些是关于鲁迅文学相关的,大概是这样一个推荐的效果,这是在召回上。我们现在这个东西会用在好几个推荐场景,比方说个性化推送,比方说做内容回答的推荐等等等等,还有问题的推荐。这是两个在知乎的具体实践。


最后做一个简单总结,我们认为Graph Embedding在这些年已经成为推荐系统、计算广告等领域一种新的流行做法,并且Graph这种图的表征还在如火如荼的开展当中。我们认为它的影响会持续放大。我们现在跟着业内最前沿的脚步往前走,看看如何达到更好地把最新的技术前沿应用到知乎具体的算法场景当中。

其次,关于未来规划,我们在这里面会涉及到两点,一是会员购买预测,知乎现在的会员业务中涉及到像淘宝一样购买场景,但是这里面存在一个问题,它的数据更稀疏,如何在稀疏的数据当中学出来Embedding表示,是我们要考虑的一个点。第二个是个性化推送的召回,目前已经上线。二是更多的技术尝试,我们在用户画像当中只用到了Embedding挖掘,但用户的持续兴趣、关注兴趣、浏览文章等等,有大量信息是可以去用的,但是这个信息我们现在还没有做进一步的尝试,这将是我们下一步要尝试的点。第二点,根据SDNE那篇文章,我们认为它那个表征会更自然一些,现在想法是会把side information信息与SDNE结合,看看会不会有别样的效果提升。

作者:AI科技大本营
来源:知乎算法团队负责人孙付伟:Graph Embedding在知乎的应用实践
最新经典文章,欢迎关注公众号http://www.aboutyun.com/data/attachment/forum/201406/15/084659qcxzzg8n59b6zejp.jpg

wx_BjPZe3Vn 发表于 2019-9-20 07:52:24

感谢分享

美丽天空 发表于 2019-9-20 10:49:52

感谢分享
页: [1]
查看完整版本: Graph Embedding技术在知乎的应用实践