很多秃头小可爱沉迷熬夜逛淘宝,以下是
来自宇宙洪荒之力的最新线报:
男生比女生多
天蝎座多
夜间小裙子搜索量位居第一
......
尤其,每晚有1700万人在淘宝只逛不买,他们到底在干什么?
来洋淘, 更有young! 洋淘轻应用的内容均是手淘用户的真实购后分享, 在这里,你可以个性化地浏览他人的美好生活, 并鼓励自我表达与分享。
图1. 洋淘轻应用截图, 左) 为双列流, 右) 为详情页
在推荐任务上,同导购产品相比,洋淘场景有着自身的特性:
新用户冷启严峻,六成以上的用户无洋淘场景内的历史内容点击;
老用户内容兴趣也稀少,历史内容点击数不超过10,反观商品点击数却高达数倍;
用户在电商与内容两个domain的兴趣差异较大。统计日志发现,电商兴趣对洋淘场景下内容点击样本的覆盖度仅为 30% 。
于是,如何把跨域的异构行为用好,提升用户的浏览深度就显得弥足珍贵。我们从 召回,ctr预估 两大关键环节均作了探索与创新, 大幅提升了推荐效果, 取得了显著的业务收益。
向量召回模型In_Match
前文提到内容兴趣不够用,我们首先基于i2i尝试了商品与内容的混合协同,取得了一定的收益。然后基于电商兴趣的标题作相关内容的严格相似召回,却收益为负,这说明跨域的兴趣不可生搬硬套,也与前文的兴趣差异统计相吻合。
{电商,内容}两个domain的历史行为都能用上;
交互序列是刻画用户精确意图的关键, 要能对序列建模而非孤立的交互单元;
既然两个domain兴趣差异存在, 就要能学到 电商兴趣到内容兴趣 的迁移规律。
基于以上理念,
我们设计了兴趣迁移 Interest Transfer Matching Model (In_Match for short),取得了以
下显著收益(业务指标为内部数据,此处只列ab实验的相对提升)
推荐综合指标上,人均点击提升+11.17%,pv_ctr提升+12.16%;
大幅缓解推荐过于集中的状况,top内容的曝光占比下降25%;
该路向量召回大幅超越content-based feature对应的几路召回,甚至高于内容协同召回。
▐ 模型架构及主要贡献
图1-2.encoder-decoder 内部细节示例
图1-3.(beam-search)序列预测工作图示,多样性与兴趣演化
▐ 序列建模的必要性
推荐系统的首要任务是精准的捕捉用户意图,早期的人工抽取content-based feature(如商品的叶子类目)作trigger的方式过于粗浅,有兴趣粒度不足及trigger间无法有效排序两处弊端,分别讨论。
1、content feature粒度不够精细
,譬如 {方便粉丝,米线,螺蛳粉} 三个品类共用一个叶子类目;又如连衣裙直接作为叶子类目,{A字裙,荷叶边裙,百褶裙} 等款式差异无从体现,而不同的女孩子多半有着差异化的兴趣指向。
2、feature庞杂难以取舍
。洋淘用户多从首猜
轻应用跳转而来,他们的商品点击行为丰富且多样,并且,把时间窗口扩大到七天,一个月,这些叶子类目兴趣trigger会更加膨胀,能召回成百上千个符合要求的洋淘内容,但推荐系统一次只返回一页有限个内容,如此多的兴趣作何取舍呢?典型的做法是,
综合考虑这些叶子类目对应商品的 {交互行为,交互次数,时间新旧}, 给不同的叶子类目计算权重然后倒排,但这么计算兴趣分布也很粗糙,指标归因中可以看到叶子类目兴趣召回的效果是低于大盘指标的。
所以我们不能孤立地看待这一次次点击行为,分别抽取各自的 content-based feature 作trigger。完整的交互序列直接体现了用户过往来到淘宝逛了啥点了啥,且包含了时间的演进,直观上以及业界论文经验都能证明,日志中的交互序列对接下来的点击预测具有十分重要的指导意义,且价值远胜于{年龄,性别,地域}等用户画像信息。
▐ 注意力机制
Attention Mechanism 是近来大放异彩,业界青睐的建模手段。它允许模型在做当下的决策时,只把注意力放在最应该关注的那一部分,不再眉毛胡子一把抓。
scaled dot-product attention
图1-4.multi-head attention 图示
Dot-product attention 相较于传统的 RNN/CNN layer 的类attention处理,无论是训练效率上还是 long-range dependency 情形下的表现均有显著优势。它可以描述为这么一个映射,output=f(query,{key_value}) ,它们全都是向量。先计算query与若干个key的紧密程度得到affinity matrix,再归一化后把这些weight分配到相应的value上,最终求和,就得到了一个query在attention后的最终表达。
self attention
自注意力,即在encoder与decoder两侧, 各自对同一sequence内的各个item间的关联做计算。它有啥好处呢,以图1-5为例,孤立看用户的某一次点击,我们很难知道背后的意图,就像人类在做阅读理解时碰到多义词,需要联系上下文才能判断具体的含义。这里也一样,通过 self attention 可得到一个交互商品(或内容)的上下文表达,即 contextual representation。
图1-5.孤立看用户的某一次点击, 我们很难知道背后的意图
vanilla attention
它指的是decoder对encoder,一个序列对另一个序列的attention。这个更直观一点,相当于把下面的问题抛给了模型,让
它自己去学自己去学——即用户当下的一次点击,应归因到又长又丰富的前序点击序列中的哪几次点击所体现出来的用户兴趣上呢?
▐ 多模态特征
我们的推荐数据集是非常稀疏的。为此分别通过 BERT in NLP及 ResNet in CV 这些流行预训练模型做二次开发,产出期望的多模态特征,提升泛化性。消融实验表明此项子工作带来了额外+5%的性能提升。
图1-6.BERT additional pre-trai
n 指标:masked_lm_accuracy=73.52%, nsp_accuracy=99.33%,框选商品作query,基于此作标题k近邻验证
图1-7.框选图片作query,基于此作图片k近邻验证
▐ case study
人们常说深度网络像个黑盒,可解释性差。但在本网络中,可以观察attention 权重,尝试作为对本次推荐结果的解释。attention 权重来自 block 3 of 3 的 vanilla attention,对 四个 multi_head的 attention 作 avg_pooling。
图1-8.case中, decoder 对历史商品序列的权重分配
CTR预估模型 In_CTR
▐ base 回顾
洋淘场景的base模型由 Wide&Deep FM&DIN 三部分融合而来, 其理念见下:
关于特征的学习, 在神经网络generalization 特性的帮助外, Wide and Deep 认为必要的 memorization 也是不能少的, 而退化成线性模型的wide子模块就被期望做这样的贡献。
CTR任务某种程度上就是判断target(如待打分的doc)与用户意图间的匹配关系, 所以离不开用户特征与target特征的重度交叉。传统的LR模型中, 只能依靠人工的高阶特征组合, 这样的特征工程低效且低质。DeepFM 在LR基础上为每一个特征组中的每一个field学习一个 latent vector, 依靠彼此点乘作二阶交叉。
它要求不同的特征向量维度固定, 输出为一个scalar, 使用时通常作为网络最后logits多项加和中的一项。
DIN认为用户的兴趣是多样的, 对于确定的一个target, 通常只能匹配到历史行为序列中的若干商品而非全部, 所以要有针对性地激活这些匹配到的商品, 同时抑制之外的噪声。以这种有的放矢的思想建模序列表达, 相较 历史序列 mean pooling 能够带来额外的收益。
这些模块都是当下的一些主流实现,能力并不弱,但其缺少对异构序列的差异化建模,导致对In_Match该路召回内容的pred_ctr长期偏低,成为了推荐系统的新短板。
▐ 模型架构及主要贡献
针对base 短板,我们提出并设计了 Interest Transfer CTR model(named In_CTR briefly), 侧重CTR任务下异构序列的兴趣迁移挑战。既然商品兴趣不等于内容兴趣, 我们就在深度网络中
对 兴趣的匹配程度 而不是 兴趣的直接表达 进行建模, 并利用 匹配程度会直接影响点击意愿 这一先验设想设计了辅助loss, 鼓励模型有所侧重的去学习, 最终取得了Offline GAUC+8.72%,Online uv_ctr +6.16% 的显著收益。
模型左侧是常规的设计范式, 我们的创新为右侧的红色框选模块,后续三个章节逐个介绍。
▐ uni-coder 有效建模 异构序列
我们参照文献unicoder-VL , 对送入encoder之前的异构序列作如图2-2所示的预处理。entity即异构序列中的一个元素,可以是商品, 此时side_info={cate,brand}; 也可以是内容, 此时side_info={id,cate,brand,封图宽高比,etc.}; 还可以是special token,如[sep]作分隔,此时没有side_info。
接着往上,是三层emb的element-wise加和。1) segment标识电商兴趣/内容兴趣两个不同的domain;2) context标识用户对商品的交互行为,如点击/收藏/加购物车/购买,内容序列都是点击,出于对齐考虑,加一个mock即可; 3) position标识交互次序,我们按时间排序。
▐ 提取兴趣的 匹配强度 而不是直接表达
我们对self-att模块的期望就是用它来捕捉序列内的相互依赖关系, 可以通过tensorboard 可视化来验证它的表现是否符合预期。可视化attention方阵可以得到一个灰度图, 元素(i,j)表示i作query,j作key时的attention_score(soft_max处理), 颜色越白表示权重越大。在搜索团队的工作中, 明确给出了他们学习收敛后得到的self-att可视化分布图, 以对角线为主, 兼有adaptive weight观感。在我们的In_Match模型中同样观测到了这样的对角线(见2-3左), 同In_Match取得的成功可以互相印证。但在ctr任务中,异构序列加入后,one-hot现象严重, 表现不理想(见2-3右)。
图2-3.异构序列的self-attention对比, 左): In_Match模型, 对角线为主, 兼有adaptive weight, 表现理想; 右): ctr模型,one-hot现象严重, 表现不理想(without 兴趣匹配强度模块)
失败之后我们转变方向, 不再执着于商品序列这一兴趣的直接表达, 转向兴趣的匹配强度建模。我们的破局思考是: 预估ctr, 某种程度上就是在预估待打分内容与用户意图(历史异构序列) 的匹配程度的高低与否,也即紧密与否。
既然商品兴趣不等于内容兴趣,且二者不在同一语义空间, 我们就在深度网络中对 兴趣的匹配程度 而不是 兴趣的直接表达 进行建模, 体现出商品序列应有的贡献。
改良后,获得了期望的self-att对角线观感。
兴趣强度的分布可以用直方图作可视化(图2-4,中间部分), 那么怎么样的分布会倾向于较高的ctr呢? 是整体偏高但平缓, 还是少数几个柱子鹤立鸡群的观感呢? 类比于图像特征的捕捉, 我们用CNN作后续的特征提取。
▐ auxiliary loss 设计
验证了兴趣匹配强度建模的有效性后, 将其作为子模块迁回原有网络参与训练, 再次遗憾地发现attention可视化分布中的对角线再次消失, 离线指标也涨幅有限。
图2-5.添加辅助loss前, 兴趣匹配强度参与logits加和, 其值域跨度和分布形状皆不符预期, 体现不出异构序列的应有贡献
模型可能也会偷懒 , bias及prefer类特征规律性强, 容易学习, 就放弃了兴趣匹配子模块的学习。此时就要用 图2-1中In_CTR架构的loss处理方法, 在其参与logits加和的同时, 也为其独立出一个loss, 并分配合适的权重(实验中为0.65, 较为激进)。再次试验并观察logits分布, 符合预期。
文末小总与展望
用户行为序列是其兴趣与意图的原始表达,重要性等同于搜索场景下的query输入。商品行为作为异构序列,如何在跨domain的洋淘推荐中建模? 围绕这一挑战,我们创新性地提出了:
In_Match,用序列生成的task训练decoder,抽取其顶层输出向量作内容召回,召回效果超越内容协同;
In_CTR,将motivation由常规的序列兴趣的直接表达转换为序列兴趣的匹配程度,并根据这一先验设想设计了辅助loss,鼓励模型有所侧重地去学习,最终离在线指标上都有斩获。
洋淘的发展方向是内容社区,所谓社区就要以人为本。未来我们会基于用户关注关系,兴趣下的用户分组等切面作推荐,也可以直接作“关注关系”的引导,诸如给出“你和ta都喜欢萌萌的治愈系挂件”这样的推荐理由,提升同好相吸的社区氛围。
商业机器智能部是一支数据和算法一体的团队,服务于淘宝、天猫、聚划算、闲鱼和躺平等业务线的二十余个业务场景,提供线上零售、内容社区、3D智能设计和端上智能等数据和算法服务。
我们通过机器学习、强化学习、数据挖掘、机器视觉、NLP、运筹学、3D算法、搜索和推荐算法,为千万商家寻找商机,为平台运营提供智能化方案,为用户提高使用体验,为设计师提供自动搭配和布局,从而促进平台和生态的供给繁荣和用户增长,不断拓展商业边界。
这是一支快速成长中的学习型团队。在创造业务价值的同时,我们不断输出学术成果,在KDD、ICCV、Management Science等国际会议和杂志上发表数篇学术论文。团队学习氛围浓厚,每年组织上百场技术分享交流,互相学习和启发。真诚邀请海内外相关方向的优秀人才加入我们,在这里成长并贡献才智。
如果您有兴趣可将简历发至
yichu.dyc@alibaba-inc.com
,期待您的加入!