前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RS Meet DL(74)-[天猫]MIND:多兴趣向量召回

RS Meet DL(74)-[天猫]MIND:多兴趣向量召回

作者头像
石晓文
发布2019-12-23 18:39:40
1.1K0
发布2019-12-23 18:39:40
举报
文章被收录于专栏:小小挖掘机小小挖掘机

本文介绍的论文是:《Multi-Interest Network with Dynamic Routing for Recommendation at Tmall》

关于召回阶段的算法,以youtube DNN为代表的向量化召回方式是目前的主流算法之一,但是目前的大多数算法仅仅将用户的兴趣表示成单个的Embedding,这是不足以表征用户多种多样的兴趣的,同时容易造成头部效应。因此本文提出了MIND,同时生成多个表征用户兴趣的Embedding,来提升召回阶段的效果,一起来学习一下。

1、背景

在天猫的推荐过程中,推荐系统也被拆分为召回和排序阶段。

本文重点关注召回阶段的算法。召回阶段的目标是得到数千个跟用户兴趣紧密相关的商品候选集。在天猫场景下,用户每天都要与成百上千的商品发生交互,用户的兴趣表现得多种多样。如下图所示,不同的用户之间兴趣不相同,同时同一个用户也会表现出多样的兴趣:

因此,对于用户兴趣的建模显得至关重要。目前召回阶段主流的算法是协同过滤和向量化召回。协同过滤面临稀疏性的问题。而向量化召回方法如youtube dnn,将用户的兴趣表示成一个固定长度的向量。

但在天猫场景下,对于用户多样化的兴趣,一个Embedding往往是不够的,除非这个Embedding的长度足够大,具有足够的表征能力。除此之外,只有一个Embedding会造成一定的头部效应,召回的结果往往是比较热门领域的商品(头部问题),对于较为小众领域的商品,召回能力不足。

解决上述问题的方法也很简单,搞多个用户Embedding就好了嘛,而本文要介绍的MIND,正是通过生成多个表征用户兴趣的Embedding,来提升召回阶段的效果,一起来学习一下。(昨天听了俊林老师的讲座,这个方向也是他比较看好的)

2、MIND

2.1 问题概述

召回阶段的目标是对于每个用户u∈U的请求,从亿级的商品池I中,选择成百上千的符合用户兴趣的商品候选集。每条样本可以表示成三元组(Iu,Pu,Fi),其中Iu是用户u历史交互过的商品集合,Pu是用户画像信息,比如年龄和性别,Fi是目标商品的特征,如商品ID、商品品类ID。

那么MIND的核心任务是将用户相关的特征转换成一系列的用户兴趣向量:

而目标商品向量Fi也被转换为一个Embedding:

当得到用户和商品的向量表示之后,通过如下的score公式计算得到topN的商品候选集:

整个MIND的框架如下:

接下来,详细介绍MIND中的各部分。

2.2 Embedding Layer

如上图,MIND的输入中包含三部分,用户的画像信息Pu、用户历史行为Iu和目标商品Fi。每个部分都包含部分的类别特征,类别特征会转换为对应的embedding。对用户画像信息部分来说,不同的embedding最终拼接在一起。而对于用户历史行为Iu中的商品和目标商品Fi来说,商品ID、品牌ID、店铺ID等转换为embedding后会经过avg-pooling layer来得到商品的embedding表示。

2.3 Multi-Interest Extractor Layer

接下来是最为关键的 Multi-Interest Extractor Layer,这里借鉴的是Hiton提出的胶囊网络。有关胶囊网络,下面的图可以帮助你快速理解(图片来源于知乎:https://zhuanlan.zhihu.com/p/68897114):

可以看到,胶囊网络和传统的神经网络较为类似。传统神经网络输入一堆标量,首先对这堆标量进行加权求和,然后通过非线性的激活函数得到一个标量输出。而对胶囊网络来说,这里输入的是一堆向量,首先对这组向量进行仿射变换,然后进行加权求和,随后通过非线性的"squash"方程进行变换,得到另一组向量的输出。

而MIND中的Multi-Interest Extractor Layer,与胶囊网络主要有两个地方不同:

1)在胶囊网络中,每一个输入向量和输出向量之间都有一个单独的仿射矩阵,但是MIND中,仿射矩阵只有一个,所有向量之间共享同一个仿射矩阵。主要原因是用户的行为数量长度不同,使用共享的仿射矩阵不仅可以减少参数,同时还能对应另一处的改变,即不同用户输出向量的个数K是基于他历史行为长度自适应计算的:

上面基于用户历史行为长度自适应计算输出向量个数K'的策略,对于那些交互行为较少的用户来说,可以减少这批用户的存储资源。

2)为了适应第一个改变,胶囊网络中权重的初始化由全部设置为0变为基于正太分布的初始化。

下图是整个Multi-Interest Extractor Layer的过程:

通过Multi-Interest Extractor Layer,得到了多个用户向量表示。接下来,每个向量与用户画像embedding进行拼接,经过两层全连接层(激活函数为Relu)得到多个用户兴趣向量表示。每个兴趣向量表征用户某一方面的兴趣。

2.4 Label-aware Attention Layer

在上一步得到用户兴趣向量之后,由于不同用户的兴趣向量个数不同,通过Label-aware Attention Layer对这些向量进行加权(只应用于训练阶段),类似DIN中的做法:

而计算公式为:

上图中的Q相当于目标商品的embedding,K和V都是用户的兴趣向量。值得注意的一点是,在softmax的时候,对得到的attention score,通过指数函数进行了一定的缩放。当p接近0时(这里应该是假设了向量的内积大于1吧),对softmax是一种平滑作用,使得各attention score大小相近,当p>1且不断增加时,对softmax起到的是一种sharpen作用,attention score最大那个兴趣向量,在sofamax之后对应的权重越来越大,此时更类似于一种hard attention,即直接选择attention score最大的那个向量。实验表明hard attention收敛速度更快。

2.5 Training & Serving

在训练阶段,使用经过Label-aware Attention Layer得到的用户向量和目标商品embedding,计算用户u和商品i交互的概率(这里和youtube DNN相似,后文中说也进行了采样):

而目标函数(而非损失函数)为:

而在线上应用阶段,只需要计算用户的多个兴趣向量,然后每个兴趣向量通过最近邻方法(如局部敏感哈希LSH)来得到最相似的候选商品集合。同时,当用户产生了一个新的交互行为,MIND也是可以实时响应得到用户新的兴趣向量的。

3、实验结果

接下来看下实验结果。

对于离线实验,文中使用MIND和BASE模型(如youtube DNN)等进行了对比,结果如下:

而在线上实验时,为了进行对比,不同的召回模型都使用同样的排序模型作为下游,并比较了一周内不同实验组的CTR:

可以看到,无论是线上还是线下实验,MIND都取得了不错的效果。

4、总结

目前召回阶段,有几个值得不错的方向,比如MIND中的用户兴趣多Embedding拆分和基于Graph的召回,大伙不妨可以尝试一下。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小小挖掘机 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、背景
  • 2、MIND
    • 2.1 问题概述
      • 2.2 Embedding Layer
        • 2.3 Multi-Interest Extractor Layer
          • 2.4 Label-aware Attention Layer
            • 2.5 Training & Serving
            • 3、实验结果
            • 4、总结
            相关产品与服务
            大数据
            全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档