如何基于商品常识图谱做趣味召回?
本篇文章是来自京东举荐广告的彭长平所做的分享,次要向大家介绍一些过来一两年在京东举荐零碎里做的一些算法的翻新。
内容次要分三局部:
第一局部是简略形容一下电商的举荐与一般的、大家熟知的其余举荐零碎的一些差别。
第二局部会从几个维度讲一下在 京东举荐零碎 上做的一些翻新,尤其是在用户趣味拓展这个维度上。因为就电商场景来说,所有的电商举荐零碎都是分成捕获用户趣味和满足用户趣味,而后也包含趣味的拓展。在电商角度来说,用户趣味的拓展绝对他类型的举荐零碎可能会更重要一些,实际上,在京东举荐零碎外面,用户趣味拓展这部分的曝光占比超过了一半以上。
第三局部会简略介绍一下,咱们当初正在做的一些绝对前沿的技术方向。
举荐零碎大家应该都比拟相熟了,从 PC 时代开始,国内外所有的互联网公司,尤其是平台型的互联网公司,随着 Iterm 候选的增多,曾经远远超过了人脑可能解决的范畴,所以它必然要通过算法去刻画人的趣味,以及 Item 的属性,去满足人和 Item 的匹配。
国内外大家可能看到的一些报道,像 Netflex、Amazon、Facebook、国内的 BAT,尤其是挪动时代开始之后,手机屏幕这种手指和屏幕天然的交互方式,自然而然使得举荐零碎简直成为每一家挪动互联网公司的标配。举荐零碎是公司破费十分多的人力和财力去打造的一个零碎,同时这个零碎也为各个企业带来了十分大的商业价值。
在传统的举荐零碎里,其实最次要是记录人的行为,因为最传统的举荐零碎的算法就是协同过滤,后盾的思维就是——物以类聚,人以群分。那么,相似的行为,或者商品属性相似的货色,就能够去做拓展。所以它最根底的一个逻辑,就是可能去记录用户的行为,基于这个行为去辨认他的趣味,去举荐和他趣味相干属性的商品,或者是其余的一些 Item。
电商举荐零碎分成两类,第一类是你辨认他的趣味,而后去举荐跟他的趣味相匹配的一些商品。第二类,就是你要找到一些他没有明确表达出来的趣味,咱们用算法去猜想他有这方面的趣味,而后去帮他做拓展。
趣味的拓展,其实对于各种举荐零碎都很重要,但对于电商来说尤其重要。因为对于电商来说,你须要疏导他去买,在你的平台高低单,如果你只是满足了他买的这个商品,其实也就意味着你的零碎的下限是无限的,不论是对于用户也好,或者对于你平台上的商家也好,那么其成长空间是无限的。所以拓展用户趣味以及基于拓展进去的趣味帮他做举荐,对于电商零碎来说尤其重要。但这个事件对于电商零碎来说,又是个特地难的事件。咱们从用户和商品两个纬度讲一下:
从用户纬度思考 , 第一,如果说你去跟资讯类的、信息流这种举荐零碎相比,那么它的用户行为是绝对少的,因为用户不可能每天花 60 分钟、70 分钟,甚至更长时间在你的零碎上。第二个艰难还是从用户角度来看,对于资讯类平台的举荐零碎来说,用户生产你的内容就是在线上,你可能残缺地记录到这个用户观看或生产平台内容的过程。然而,对于电商零碎来说,它只是交易的过程产生在线上,用户为什么要买这个商品?以及买完商品之后的所有的生产过程,都是在线下的,难以数字化的。第三个艰难跟后面两个点是也相干的,就是大多用户买完商品之后,在短期内不会再来买这个商品,不会再来买同类的商品,也就是说他的需要和趣味会产生转移,这也就是为什么说,在电商的举荐零碎里,仅仅捕获用户的趣味,基于捕捉到的趣味去做举荐是不够的,这是从用户纬度来讲咱们面临的挑战。
从商品的维度来讲 , 第一、商品的规模是特地大的,咱们失常看到的大部分平台的举荐零碎所举荐的 Item 汇合可能是几十万,几百万这个量级的,然而对于 电商零碎 来说,它后盾真正的侯选级都是数十亿 SKU 的侯选,也是因为当初这个时代,曾经进入了一个供过于求的状态,所以它更依赖于这些中长尾的商品,更依赖于举荐零碎,去找到适合的用户。第二个特点,从电商平台角度来说,大量的热点是随着一些节日或者平台本人做的一些临时性的流动带来的用户,那么从逻辑上来说,这些商品其实它们的前续的用户行为一段时间内也是不足的,所有的这些点都表明:第一、趣味拓展对于电商举荐零碎来说特地重要。第二、它依赖于传统的协同过滤,依赖于用户行为的这种形式是不够的,所以前面我次要是介绍一些,咱们在这方面做的一些尝试性的翻新。我次要会介绍一些理念性的货色,讲得会绝对粗略一些,每个方面介绍几个办法,不会讲特地简单的推理过程,就是心愿咱们解决这个问题的一些思路对大家有些启发。
大家能看到下图中的三个环节,右边是形容传统的、咱们记录下来的用户的行为,包含他的浏览、购买、加购等所有电商平台可能在线记录下来的行为,失常的举荐零碎都是分为几个环节:
- 第一个环节是要从刚刚所说的数十亿的 SKU 汇合里,召回进去大略数千级别的侯选 SKU;
- 第二个环节是要对召回进去的数千级别的 SKU 去做 CTR,去做点击率或者转化率的预估,就是对每一个候选的商品,给用户打一个预估的 CTR 的分,或者预估的转化率的分;
- 第三个环节是拿到打完分的这一千个侯选之后,怎么推出来最初返回给用户看到的那几条,或者几十条的侯选的过程。那么最初,出现给用户的商品包含两部局部:第一局部,其实曾经晓得它对这些商品是感兴趣的。第二局部是去帮他探测,或者说把他感兴趣的、摸索过的商品举荐进去。
简直工业界的零碎都是这种漏斗型的环节,我方才讲的那三个环节都是漏斗型的,所以咱们在每一个环节都须要去解决摸索进去的商品怎么进去的这个问题。其实你曾经辨认出了用户的趣味,而后基于趣味打分,这个技术绝对成熟的。然而如何去召回 CTR 预估,以及最初的排序环节,如何保障咱们摸索进去的货色可能进来而且有一个正当的排序,每个环节都会有对应的一些解决方案。我这里次要介绍三个点的翻新,第一个点就是基于商品常识图谱的召回。第二个环节是 CTR 预估的环节,第三个点是在 Rerank,在最终的排序环节,怎么去做一个全局的建模。
上面咱们来具体阐明下各个环节。第一个环节是讲基于商品常识图谱的趣味召回,就是刚刚提到的,咱们不论是从用户纬度来说,还是从商品纬度来说,存在大量的用户行为缺失,商品也短少对应的行为。它依赖于传统行为的这种办法,不论是 CF 也好,还是基于用户行为去训练各种向量模型,或者其余的各种模型化的召回办法,在行为缺失的时候都生效了。
电商里有几个典型的场景,是商品行为特地缺失的,而这些场景在电商当中又特地重要:
第一个就是新品的上架,比方小米 10 公布了,华为 10 或者 P40 公布了,或者 iPhone12 公布了,这些新品上来的时候,其实是齐全没有用户行为的,这个时候你依赖于行为的模式去召回,都会面临商品原本很热,然而如果你依赖行为,它是推不进来的;
第二个场景就是平台做流动,大家可能感知比拟显著的是每年的 618、11.11,然而其实整个平台,每天都在做大大小小的流动,那么这种流动的商品,也是忽然地从一个惯例的销售要变成一个忽然热门的销售,去依赖于传统的行为也是推不进去的;
第三个场景时效的热点,这个热点可能不肯定是平台做的流动,就是可能是社会上产生的某一个事件。举个例子,其实平时有些商品它们之间是没有关联的,然而在疫情期间,比如说口罩、方便面、洗手液这些货色,失常的状况来看,它们其实不会建设关联的,然而因为疫情,它们之间建设了关联关系。
第四个场景就是搭配购买,这个搭配购买大家都有买货色搭配的概念,大家都晓得,买完手机之后,可能你要去买手机壳、手机贴膜,或者是你如果打游戏,手机可能还要配一些水冷的设施。那么失常来说,用户买完手机,推手机壳这是没有问题的,然而如果在电商场景时候,你推的这两个货色不是搭配的,比如说你推的是 P40 手机,你推出来是某个 iPhone 的爱护壳,这对用户的体验挫伤是很大的。基于这种场景来说,它其实大量的是依赖于除了行为之外的一些常识,这些常识能力去辅助帮你在这种场景上来帮用户做趣味的拓展,而且要保障你拓展进去的货色是精准的,是满足用户需要的。
所以,基于我刚刚提到的,在用户行为生效的这个状况下,那么常识图谱这种货色就显得尤为重要。咱们构建了一个商品之间的常识图谱。
在右侧的图中,最底下这层是根底的商品,就是我刚刚提到的京东场景下数十亿的 SKU 的这些根底的商品。那么这层商品,其实它的各个商品都是各异的,再上一层,是咱们须要算法可能抽取进去的,最次要是通过商品的一些的题目、形容,以及一些商详页属性,甚至包含用户评论的一些属性、一些信息,去抽取进去上一层的实体。
这个实体的概念其实次要是在用户感知的概念外头,它是惟一的一个商品的汇合。所以它的根底过程,第一步是基于题目、上下文的文本形容抽取出的这个过程。第二步是基于一些用户行为所做的一些具促之类或者是说一些数据荡涤之类的逻辑去做的一个实体。实体再下面一层,咱们叫概念层,这个概念层体现进去的也是一些用户关注的商品的属性,比如说这里举个手机的例子来说,那可能它关注这个手机的主打的性能是不是拍照,是不是全面屏,是不是带 5G,也就是相似于这种用户特地关注的某一个属性,咱们叫概念层。
再下面一层才是手机,所以其实你能够看到这是一个从细到粗、逐渐形象进去的常识网络的构造。所以它联合了一些商品抽取的信息,也联合了一些用户的行为,那么有了这个根底的商品档次的构造之后,咱们很多的关系构建就不须要基于最底下这层,因为最底下这层的量级是特地大的,数十亿级别的,在这个级别上面的货色其实没有泛化能力,如果说你想去做基于行为,或者基于其余形式去构建,构建进去的 数据 都会是特地稠密的,所以咱们更多的关系是基于下面那三层,尤其是两头那两层构建的一些商品的信息。
这里举一下基于这个图谱,咱们在举荐中大略利用的形式。
正如我后面所讲,如果基于最初始的协同过滤来说,用户的每一个行为,比方他过来某一个点击或者某个购买,你是基于某个孤立的行为去构建用户之间或者商品之间的关联关系的,其实这种构建的是你认为用户的每个行为都是孤立的,它其实并没有充沛天时用户行为的关联关系。咱们刚刚提到,用户的趣味其实波及到用户的演化过程,你基于孤立行为是刻画不进去用户的演化过程的。
所以,第一个天然反馈是,我把这个孤立的行为,变成一个间断的行为,我把整个的用户行为建成一个链,基于这个链去做用户行为刻画。然而基于这个链刻画,碰到的第一个问题就是组合爆炸的问题。正如刚刚提到,这个链条如果你用到的是最底层商品的汇合,它就面临着数据稠密的问题。所以如果说数据特地稠密,那其实输出的就跟乐音差不多。因而,咱们第三步做的过程,下面那条链还是用户的根底行为,上面那条链是咱们刚刚提到的那个图外面,从下往上数第三层,就是 Concept 概念。你能够看到商品的个数特地多,然而用户的跳转行为,它的 Concept 其实只有三个,它次要是围绕着 C2 那个 Concept 在跳转的,整个过程就把用户的行为降维了,基于上面这个链条去做建模,去做用户趣味的刻画和跳转,那么召回来的货色就能够基于失常的建模的形式去做操作了。不论你是 CF 的办法也好,还是其余的模型化的办法也好,都是可能工作的。
上图右侧的图,其实刚刚曾经大略提了,在一个用户跟一个商品产生关联之后,那么基于商品的常识图谱,你就能够建设进去很多关联。这是在召回方面咱们所做的一个翻新,其实最次要的工作就是常识图谱的构建。
接下来,咱们来讲一下 CTR 预估。
CTR 预估这块咱们面临问题都是一样的,都是存在大量的中长尾商品。因为电商这两年大家都在讲下沉,下沉之后,咱们会有越来越多的新用户拉进来,不论是从商品的纬度,还是从用户的纬度,都会有大量的短少行为的用户和商品。那么如果说你只是把它召回回来,CTR 预估给它打的分还是低或者不准,那么召回来也是无用的。所以咱们在模型方面要做同样的一些能力去保障咱们对于用户行为短少的这些商品和用户,也可能做正当的打分,这里介绍下咱们所做的一个翻新。
咱们能够先来看一下右边的这个图,通常咱们的模型构造都是这样的。最底下一层是用户行为类的特色,分为用户类的、商品类的、以及用户和商品之间的一些穿插的特色。那么最简略,最晚期,大家的做法就是把这些特色转成一个 embedding 向量,embedding 向量再 concat 一起,就间接进入到神经网络层。
最近,大家感觉这个 Concat 做得比拟糙,通常的做法不再是横着 Concat,而是把它组成一个矩阵。这个矩阵进去之后,在特色的纬度之间,大家能够看到左边这个图,就是通常的 FM,或者 FMM,或者一些罕用的办法,这些都是咱们在不同的特色之间去建设关联。咱们的翻新是在不同的纬度之间也建设同样的关联,去构建纬度之间的关系,就是想把这个 embedding 的特色刻划得更精密一些,以晋升整个模型的表白和泛化能力。
上图就是咱们构建进去 DRM 模块。右边是实现的过程,能够看到,其实过程并不简单。下面是矩阵,这个矩阵其实就是一个 self attention 的过程,上面只是一个这个支链的边,可能保障模型的迭代、收敛会更快,所以这是一个特地简略的通用组件。
大家能够看下左边的图,左边是咱们把它嵌到模型里的过程,最右边还是 sparse 的特色,前面跟着 embedding 而后是 DRM 这个纬度的模型,前面接的通顺深度网络,所以它是一个特地通用的模型,在任意的模型里,这个操作都是能够内嵌进去的。
上图是嵌进之后,模型泛化能力的体现。咱们从两个纬度来看,第一个纬度是模型的 AUC 和它的 loss 的状况,图中横坐标是 embedding 纬度,纵坐标是 AUC 和 Loss。能够看到很显著的就是,通常在没有加 DRM 这层的状况下,随着 embedding 纬度的晋升,从模型体现来看,能够看到它是进入了一种过拟合的状态,它到肯定阶段之后,纬度减少,并不能带来模型成果的晋升,纬度高到肯定的阶段,甚至还反而是降落的。然而退出这个 DRM 层之后,能够看到无论在哪一个纬度,带 DRM 层都是要比不带 DRM 层成果好很多,而且随着纬度越来越高,这个之间的 Gap 会和争议都会越来越大。
所以咱们能够看到,DRM 层引进之后,显著的扭转就是对你输出的语言 sparse 特色转换过 embedding 刻画得更精密了,模型的泛化能力有了显著的晋升,尤其是在 embedding 纬度高的时候,它可能显著地解决原有模型的过拟合的景象。
图的左边是咱们对进模型之前和进模型之后的特色变动的一个可视化。图中,绿色的是正例,蓝色的是负例,下面是进 DRM 之前,上面是进 DRM 之后。大家能够显著看到,过完咱们的 DRM 模块之后,正例和负例显著有了更大的辨别性。这个在咱们零碎中上线了之后成果也非常明显,咱们多样性的指标 AB Test 绝对晋升了五个点。
讲完 CTR,最初,咱们再来看一下,当咱们预估进去 CTR 值和 CVR 值当前,对每条预估进去的后果进行最终的排序。失常状况下,如果不思考多样性,不思考 Explore 这些特色,其实只有按 CTR 预估值从高到低排就行了。如果依照这种形式排序,那么你 Explore 进去的货色,大概率是出不来的。传统的形式是,我会在 CTR 预估前面再加一个 Explore 层。我这里画了一个用户人均点击的分类图,能够看到,绝大部分用户的点击都是处于长尾的,用户行为很少,如果画商品,散布趋势会更显著。因为咱们数十亿的商品可能绝大部分都是有用户行为特地稠密的。最早咱们尝试这个事件的时候,用多臂老虎机,咱们基于每个用户看过或者点击过的商品的品类和产品词来做 arm。那么在用户行为缺失的状况下呈现的问题,要么就是多臂老虎机基于 Data 函数,学到的 Beta 散布,要么就是数据量太少,它是不收敛的,要么就是几个正例,或者几个负例,实际上是带着乐音性质的,所以它画进去 Beta 散布出的曲线,都是因为稠密,或者是噪声导致整个 Beta 散布是没方法收敛的。
咱们做的一个尝试,就是做聚类。其实就是简略地基于用户整个的 Session 行为,把商品和用户都转成对应的 embedding,基于 embedding 之后,做简略的 kmeans 聚类,一个用户簇和一个商品簇,这两个的组合形成了咱们的一个 arm。因为聚类后的簇是能够管制的,你能够通过超参去寻优的。从 Beta 收敛状况可能很显著地看到,聚完簇之后,每个簇内的行为,都是绝对充沛的,那么不论是哪种状况,它都能比拟快地进入收敛状态。这是咱们跟一些常见的办法做的一些比照,咱们这个办法最大的劣势在于,在做 Explore 时候,它其实没有就义点击,因为失常大家都会感觉,我去做 Explore 之后,那肯定是摸索一些用户没表达出来的货色,那么这个货色肯定是不那么相干的,点击率会降落,或者是说一些排序类相关性的指标会降落。然而这个办法,在咱们的数据里验证的后果,不论是从离线还是在线后果来看,它是可能同时做到点击基本上持平略涨的状况下,多样性有了显著的晋升。在线的成果是,用户的下拉深度,也就是用户浏览的时长有了一个十分显著的晋升。
后面讲了 Explore,就是咱们把用户不感兴趣的商品,没有明确表白感兴趣的商品摸索进去,然而摸索进去的货色和用户曾经表白出感兴趣的货色怎么做正当的组合?怎么出现给用户最终的那个正当的队列?这是排序里要解决的另一个问题。
上图中,大家看一下右边的示意图。咱们发现用户曾经被动浏览了一些手机和图书,那么我通过一些其余的行为可能猜测出,他还会感兴趣的货色是耳机和茶叶,那么我怎么去做正当的搭配?这里边举了一些例子,如果说你做得不合理,有可能呈现的是大量已知的趣味,或者反过来,大量的后果是你 Explore 的,不论哪种状况,效率都是低的,甚至是说你两种状况都搭配进去,然而如果说他们出现进去的程序不合理,那么最初的成果也是不好的。
所以它的外围的问题是 CTR 预估或者 CVR 预估可能是几百,或者千这个级别的侯选汇合,在这个汇合外面,怎么进去一个最终的队列,让用户看到的这个队列是成果最优的?最简略的思维就是,我用贪心的形式,我先挑那个最好的,而后前面就是相似于队列生成的过程,那么基于第一个,去生成第二个,基于第二个去生成第三个,依此类推。如果再综合一下性能和成果,那么可能每次不是生成进去一个,而是生成进去 N 个,也就是说是 context 序列生成,再加一个 BeamSearch 这个过程,这是通常的几种形式。
那么咱们采纳的一种形式是先基于启发式的搜寻,再来做队列的打分。上图右边就是咱们大略的过程。我生成侯选之后,先做一个启发式的队列生成,我会生成多个序列,而启发生成就是我基于后引专家式的常识引入,可能是一些偏点击的,有一些是偏 GMV 的,有些是偏摸索的,甚至有些是偏随机生成的,基于各种形式或基于不同的指标,你能够设不同的权重,会生成进去很多的队列。那么,你为了保障你的在线上的货色肯定是正向的,尤其是 ABtest 来说,如果说你是 Point 的这个排序要转成 Listwise 排序,有一个简略的逻辑就是你保障你原来最优的那个队列是在你的生成侯选外头的,这是个小的区别,能保障你 ABTest 的时候可能做到成果正向。
基于启发队列生成之后,前面是一个 Listwise 打分模型,大家能够开展看一下左边的这个 Listwise 模型,最里面是筛选,就是整个用户从进来曾经看过的一些行为,这个是一个单向的 RN 的模型,那么在这个页面内,也就是你本次这个生成的这个侯选,最终要进来的这个队列,这外面是一个双向的,因为 Listwise 逻辑就是说你要保障每一条侯选它都要同时看到后面和前面的货色,才可能保障它预估的信息是更精确的。
再下面那一层,能够看到,它优化的这个指标不再是单条的、单个侯全集的后果,而是整个队列的点击,整个队列的 GMV,还有整个队列的多样性,以这几个指标交融在一起才是整个 Listwise 打分模型的优化的指标。因为整个这个优化指标它也是有监督的,因为它优化的都是点击 GMV 和多样性,这个形式绝对于咱们原来的排序形式,首先咱们性能上上线的时候,通过这种设计之后并没有受到特地大的挑战,整个上线之后,也是同样的,咱们做到了点击和多样性,以及用户摸索进去的这个商品的这个占比都有显著的晋升,并且晋升的幅度其实在咱们历史的下限里相对来说特地显著的。
致谢“京东批发数据算法通道委员会”:
2020 年京东批发成立了“数据算法通道委员会”,推出了适宜算法工作特点的评估体系,算法技术气氛变的更浓重,为算法工程师朝长期深刻的方向深耕、摸索危险较高的翻新我的项目提供信念保障,将视线投向行业前沿,敢于去挑战业界的技术难题。
向行业前沿,敢于去挑战业界的技术难题。
举荐浏览:
京东背地 AI 技术揭秘(一)—基于关键词导向的生成式句子摘要
京东背地 AI 技术揭秘(二)—基于商品因素的多模态商品摘要
NLP 带来的“科幻感”超乎你的设想 – ACL2020 论文解读(一)
欢送点击【京东智联云】,理解开发者社区
更多精彩技术实际与独家干货解析
欢送关注【京东智联云开发者】公众号