分享嘉宾:王晓伟 快手 AI算法研究员
编辑整理:AMS 周金星
出品平台:DataFunTalk
导读:召回作为整个推荐系统的第一个环节,承担着非常关键的作用,在从全集内容中筛选出用户可能感兴趣子集的同时,又须要保证推理的高效。图神经网路在这两方面具有得天独厚的优势,我们可以借助图中蕴藏的高阶结构关系,结合已有的属性信息,得到节点全面而精准的向量表示,应用于后续的召回。快手平台不同场景下的视频推荐特性和需求各有不同,基于图神经网路的召回形式在各个场景具体是怎样应用的,又有什么已优化或则亟需解决的问题?本文将结合实际场景的实现和优化进行介绍。
具体内容包括:
01
短视频推荐背景
首先跟你们介绍一下短视频推荐的背景。
1.业务特性和痛点
在短视频的推荐业务场景中,人、物、行为都比较多。人也就是角色包含了普通的用户、视频创作者、直播播主、广告主、商家等;物也就是内容包括了普通的UGC或则PGC的视频、直播、广告内容,还有一些售卖的商品、游戏。然后这种人和物结合的话,也会形成多种多样的行为。行为主要可以分为播放类(看视频)、互动类(点赞、评论、进入个人主页)和转化类(广告点击、表单递交等)。
这些人物行为结合在一起,体现在短视频的场景下有两个特征:集中性和动态性。集中性,是说绝大部分的行为会集中在一些热门或则一些营运活动带来的视频里面。动态性,指整个平台里面的新视频、新用户都是在持续的快速降低的,会促使整个系统的仍然在持续的动态变化当中。上面这种特性也就造成了我们在短视频的推荐当中会面临一些痛点,主要包括:噪声大,目标多,以及冷启动的问题。
2.召回体系的发展
在短视频的推荐上面,整体上与业界通用的推荐场景类似,都是分为召回、粗排精排、重拍等阶段。召回是在整个推荐系统上面的第一个环节,它的作用是须要从海量内容池(比如说几百万、几千万、甚至上亿)中快速筛选出用户可能感兴趣的内容。所以对于召回来说,第一个要求就是效率要足够高:能快速的从海量的内容池上面进行筛选;其次的要求是精准性,也就是说筛选下来内容要跟用户的兴趣有关联;然后是多样性,对于整个召回体系,我们希望对于用户的兴趣有足够全的覆盖,甚至能激活一些用户当前没有表现下来的隐藏兴趣。针对单个召回路,我们希望它有自己的特征,这样它能够推荐下来与其他已有召回路不同的内容,对于整个系统来说,才有增量价值。
整个召回的发展可以从信息和估算两个视角来看。从信息视角来看,最简单的,可以只借助一些待召回物的属性特点,比如视频的作者信息,或者它的一些标签。随着NLP、图像、语音技术的发展,我们如今可以基于视频提取出它本身内容的信息,比如标题信息、视频上面关键帧的信息、还有一些语音信息,此外,我们或许还可以加上用户的行为数据,去得到更好的关联召回结果。从估算视角来看,如果我们只借助一些简单的属性特点,召回可以直接基于一些匹配实现,比如相同作者的其他视频,或者相同标签下边的其他视频。如果还有一些内容和行为数据,我们可以借助CF(协同过滤)的共现统计去得到待召回的内容,现在最常用的是通过向量去估算得到召回的结果,我们会把包括属性、内容、行为的信息转化成embbeding的向量表示,然后通过向量相似度估算的工具去快速得到待推荐召回结果。现在常用的召回形式有I2I(商品到商品)、U2I(用户到商品)、U2U2I(用户到用户到商品)等。
3.为什么须要图
为什么是I2I?首先是I2I在好多公司多种场景早已被验证,被证明是一个简单且有效的召回形式。其次,I2I的在线和离线是可以前馈的,新上线的成本比较低。另外我们在优化的场景中,发现这些I2I的召回还是比较欠缺的,所以我们如今是先从I2I开始做。
为什么要通过图的方法去实现这个工作?从传统的视角来看的话,推荐是说给了一个用户,尽可能去召回他感兴趣的视频,这个关系是直接的一阶关系,我们的model也只拟合了他当前的单一兴趣,但是假如把用户和视频展开来看,把它弄成一个图或则一个网路的话,可以发觉用户和用户之间、视频和视频之间、用户和视频之间似乎还都存在着各种各样更多的、不同的、复杂的关联。
为什么传统的只考虑一阶关系是有问题的?从短期来看,整个产品中的用户数目和视频数目十分大,但真正有这些一阶关系的,在整个UI的矩阵当中仅仅是很小一部分,也就是这个矩阵十分稀疏,在这些稀疏的数据下边去做拟合是很困难的。从常年来看,因为推荐系统有选择爆光误差的问题,导致绝大部分的行为集中在极少的一部分热榜视频头上,容易造成马太效应,长期累积会影响场景生态的健康发展。但是通过图的视角,考虑的是高阶的非线性的关系,一方面这个用户可能会跟更多的视频形成关联,会对于整个我们这个模型带来更多的正样本;另一方面,用和用户之间、视频和视频之间的一些相似性的要求,也会为模型带来更多正则项,提高模型的泛化能力;再进一步,能达到增强场景多样性、激活用户更多潜在兴趣的目的。
02
基于图的I2I召回流程设计
接下来给你们介绍一下如今我们快手使用的基于图的I2I召回的pipeline,我们的pipeline主要是基于IDP、KML、DJL、FAISS这种平台和工具去搭建的。IDP是快手内部的集成开发平台,它主要的功能是做一些数据处理,并且实现这些离线数据的任务调度。KML是我们自己开发的一站式机器学习平台,主要是能帮助我们做模型的训练预测和模型管理。DGL是和FAISS更是整个工业界目前比较优秀的框架和工具。我们在这种工具和平台的基础上进行了一些特定的封装和优化,就生成了我们如今整个的基于图的I2I召回的pipeline。
pipeline主要包括了从原始数据的处理到item-pair的生成,到训练的一些数据的生成,再到图算法当中图的建立,然后是负样本和邻居的取样,到训练预测的一些过程,再到产出embedding和最终的I2I,当用户爆光展示,拿到行为以后,pipeline的流程都会进行循环。
我们为何会采用这么样一个pipeline?其实现今工业界,包括我们内部也有一些图的框架,但我们督查发觉,如果用公司内部定制性的框架,上线上去会容易一些,但是在算法的优化迭代里面成本会稍稍高一些;如果用其他开源的框架,它的算法优化上去会比较容易,但是步入整个上线流程会比较困难。综合考虑,我们借助了这样一套流程去建立了整个上线的过程。这套流程的有点主要有:灵活、应用快,便于快速的实验调优;实现了节点里面的更新和赶出,支持图上节点的动态变化;异构图(多边多节点)的支持挺好;支持多种邻居和负样本取样方法;执行效率深度优化;定制化KNN ,满足目前的上线要求等特性。
03
实际场景优化
上文提及我们短视频推荐主要是会有这三个痛点,噪声大、目标多和冷启动问题,由于时间的关系,今天主要集中介绍去噪的工作。我们使用的优化方法主要包含了相似度测度优化、图结构学习、边权重学习。
1.相似度度量
相似度测度优化是指基于其他方式产出I2I的初始图去做优化,我们使用了一个简单的小trick,是基于这些neighbour-based method(基于近邻的方式)的节点相似度测度优化。产出原始的I2I的图的比较常用的技巧有Jaccard相似度(考虑两个节点之间它的共同邻居和所有邻居的关系)和Adar相似度(计算共同邻居上面对于邻居热度做一个加权)。这里我们发觉不同的邻居,对于这两个节点来说,它的作用虽然并不仅仅彰显在这个节点和邻居节点的热度上,举一个事例,我们要从X点到Y点之间有存在好多流水的管线,从X到Y的话,我们要经过Z点,整个X到Y它的流水流速,是由X到Z管线的半径和Z到Y管线半径这两个上面较小的这一段管线来决定。所以我们在基于Adar的基础上,对它的分子做了一个加权,这个加权表示XZ和YZ这两段管线半径或则是说在我们场景上面一个相像分的表示,这个分子的权重是由较小的值来决定的。相似分我们可以简单地只通过比如说它们的共同爆光、共同点击或则观看间隔等统计量去表示。我们通过简单的这一个小的trick的优化,其实可以在离线Hit-Rate的里面见到一个比较显著的一个提高。
2.图结构学习
第二个优化的方法的话是基于对原始数据的净化去做,我们采用是一个图结构学习的方案,这个工作是跟北大崔峰老师实验室一块儿合作去完成的。整个的算法的框架,分为两大部份,左边这部份是基于重采样的数据去噪的模块,右边是基于用户个性化行为embedding学习的模块。左边我们会首先去训练得到一个置信度的网路,网络代表的是对于用户和我们场景中也就是视频User&Item这个pair有多大的置信度是一个真实的行为,也就是说用户对于他有行为的视频有多大的置信度(是真的是有行为,还是由于一些其他诱因例如误点或则一些营运的诱因影响才去观看)。在置信度网路的基础上,我们比较特殊的点在于借助了一个user和set的信息,set上面包含的是在一个session当中,用户所观看或则是有行为的所有的视频的集合,然后我们会借助网路对于user的set做一个重采样,这个取样的过程似乎可以理解为是通过一些用户常年稳定的行为去对他短期行为做了一个过滤,得到一个净化之后的set表示。然后都会到左边的图机器学习的模块当中,我们借助净化过后的set,以及我们须要得到的I2I的图的关系、I2I的embedding,然后我们会借助I2I的embedding对于净化后的set做一个pooling的表示。之后会接一个VAE的结构去对set做一个encoder和decoder,希望能构建下来用户净化之后的set集合的表示。去噪和构建这两部份的loss是我们整个模型上面所有的loss。这样的方案我们可以在理论和实验当中见到它的一些优势:最右侧这个图,它的纵轴是我们在数据集中插入的噪音比列,纵轴是不同模型的准确度,上面这条红线是我们提出的模型的表现。可以看出,它对于噪音来说是更不敏感的快手热门算法,也就是它更鲁棒的。这个工作早已在去年的KDD被录用了,有兴趣的朋友可以去关注一下Paper。
3.边权重学习
第三部份,我们主要是基于上线成本的优化。其实里面的工作,理论和离线实验的结果是比较好的,但是由于有去训练confidence的model的过程,这在我们上线过程当中,成本是比较高的,我们想有没有一些方式能去快速的步入我们线上的流程。我们有一个很直接的方法,如果有一个图,它里面不管通过哪些方法,我们晓得它们存在一些边,我们通过什么样的方式能去区分下来那些边的真实性快手热门算法,于是就提出了一个端到端的一个边权重的学习,intuation(直觉上)也比较的简单直接,其实就是倘若我们能晓得对于当前这个节点,它所有邻居、它的边的权重表示的是这条边的置信度,我们才能去按照置信度以更大的机率采集到真实的边,然后在真实的边的基础上再去做embedding的训练,能得到一个更确切的embedding的表示。反过来,如果我们有更准确的embedding的表示,也能有助于我们辨识下来原始图中什么边是真实的边,哪些边是虚假的边。这样的话我们相当于是把之前图的训练过程前移到了这个图的连续采样过程中,然后这两部份去做一个循环迭代。我们在一些实践场景中的数据也能也能看到一些比较显著的优化疗效:最左边的图与上面的图类似,横轴是数据当中插入的噪音边的比列,纵轴是模型的表现,上面这三条线虽然都是用了边权中学习的一些技巧,它们区别是用了不同的边权重的初始化形式,浅蓝色这条线是没有边权重学习的表现。不难看出我们加了边权重学习以后,整个模型的鲁棒性是增强的,另外下边的柱状条表示的是当下model达到最优这个点的时侯,所须要循环迭代模型训练的迭代轮数,也能看出加了边权重学习,达到最优点的时侯,它须要循环迭代的次数是更少的。
整个方案也还在探求和优化当中,这边列出了我们如今正在解决的一些问题。包括什么样的权重的初始化的方法是更好的,不同的初始化可能会有不同的结果。另外就是边权重的收敛性,很多的情况,边的权重是仍然在变的,并不能确定在哪些情况下,它能收敛到一个最优的结果。以及现今的模型还是跟原始的模型一样,采取的是有监督的loss,我们是不是能加入一些无监督的loss来达到指导分辨真实和虚假边的目标。最后一块是取样的逻辑,在实验当中我们是初始按随机采样,训练到稳定以后再去加入加权的取样,还是从一开始就做加权取样?它的结果也是有差别的,那什么样的策略会是最优的策略。这些都是我们目前还在探求和解决当中的问题。
4.图召回线上特征
上文我们之前介绍到的一些技巧,在快手的一些业务场景中也有一些线上应用和优化的结果。我们从一些场景中观察到的基于图的召回,相对于纯目标导向的召回,它在精准性上是相对来说更弱一些的,但是它有一个比较显著的优势,就是多样性上的优势。这个曲线图就比较有意思,横轴是上线以后不同的日期,纵轴代表的是这一路召回推荐下来不同的视频量的和,这上面白色的线是我们graph(图)召回的情况,可以看出,它在这个过程当中有几次畸越,随着训练,图召回的不同视频量是会递增的,召回的递增似乎也在为其他不同的路带来更多不同种类的样本,也会带来其他路召回量的提高,所以致使整个场景的多样性有更好的表现。基于之前一些实验的结果,我们觉得就在图上面把高阶的邻居引入虽然是一把双刃剑,在风险上来说,它引入了那些高阶邻居上面的噪音,也是由于这一点,我们如今主要工作是集中在怎么对数据去噪,它的利润的主要彰显在提升整个模型的泛化能力,能去预测图在未来的演进,这或许跟召回本身的目的也是一致的。这页展示了我们在场景中的一个case,是商业化广告场景,最左边是使用了图召回的方法,最右边是trigger:黑色和蓝色的夹克。可以看见之前目标导向的I2I,推荐下来基本上都是白的或则黑的背心,然后右侧图的方法,可以看见有不同样式、不同颜色的西装,还有一些相关的内裤类的商品。我们觉得这对于我们整个场景的生态发展是更优的。
04
未来展望
最后跟你们聊一下,我们觉得在图召回上未来可能的一些技术方向展望。首先是多兴趣,我们觉得用户他肯定不是只有单一兴趣的,怎么样去描述多兴趣?要么是借助多embedding,要么是带约束的单embedding,这样虽然还会有一些问题,例如:embedding数目怎样去设置,单embedding甚至是不是能抒发多兴趣等。我们如今一个思路是,之前学习节点的embedding都是对它做点的预估,也就得到一个固定的embedding的表示,我们是否能学到一个embedding的分布,然后对于不同的点,它的embedding都是有一个分布的范围,如果我们在做召回的话,就能依照例如对这两个节点去估算它们相似度的时侯,根据她们的分布去得到一个比较适宜的一个取样,到它真正一个embedding表示以后,再去估算它的相似度。这样在不同的兴趣里面的话,我们是希望能通过得到一个在分布中取样到不同的节点的表示,然后来实现多兴趣的目标。第二点是受限的召回池,主要是在商业化场景中比较显著,是说整个场景中自然视频的量和行为数是远远小于广告视频的,但是我们实际场景中更希望是能得到这部份广告视频的更精确的embedding,怎么样借助全集的数据去重点优化有特定限制的召回池的疗效,这也是我们觉得在实际场景中比较重要的一个问题。其他的话,对应上文提及的去噪的优化,就是怎样得到更鲁棒的图,我们前面计划引入一些contrastive learning(对比学习)或者unsupervised learning(无监督学习)的形式去做优化。以及还有可解释性、动态图的优化,这些跟我们整个场景的生态、业务需求都是强相关的,我们觉得未来比较值得去做持续的优化。