Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations

论文笔记 专栏收录该内容
45 篇文章 4 订阅

Introduction

推荐系统常被视作召回+排序的两阶段系统。本文的重点就在于为一个有百万量级item的个性化推荐构建一个召回系统。
给出一个{user, context, item}的三元组,召回模型通常的解决方法是:1)分别学习{user, context}和{item}的表示,2)利用一个简单的打分函数(例如点积)来为query生成候选item。context通常是有动态性质的变量,例如一天里的时间,用户的设备等等。
这种表示学习有两个挑战:1)工业级推荐系统的item集通常很大;2)从用户反馈中收集的训练数据通常很稀疏,导致对长尾内容的预测过拟合。对冷启问题,推荐系统需要有对数据分布变化的适应能力。
早年矩阵分解(MF)方法被广泛应用于召回系统中。然而大量研究表明MF方法会导致前述的挑战。通常的想法是利用query和item的内容特征,即除了id之外的特征。基于MF的方法通常只能抓住特征的second-order interactions(?),因此对多种特征的表示能力有限。
最近利用DNN进行推荐的工作越来越多。DNN方法能够学到user states和item特征的低维度表示。本文利用了一种双塔DNN来构建召回模型。双塔DNN是从一个多分类多层感知机网络推广而来。MLP模型是用从固定数量的item中采样得到的许多负样本来训练的。然而这种采样方式对深度item tower是不高效的,因为item有内容特征,并且在计算embedding的时候网络参数是共享的(?)。
我们考虑用batch softmax optimization,这种方法中item的概率由一个随机batch中的所有item计算。然而我们的实验显示这种方法存在严重的采样偏差,会对模型性能产生严重的影响。我们提出了一种采样方法,利用item频率来纠正采样偏差。与普通MLP的item vocabulary是固定的相比,我们关注item vocabulary和分布随时间变化的场景。

训练算法如algorithm 1所示。

streaming frequency estimation

考虑一个随机batch的流,我们要解决的问题是估计在一个batch里命中样本y的概率。且一个设计准则是我们需要一个对全部数据分布的估计以支持分布式训练。
无论在单机训练还是分布式训练过程中,我们为每个喂给trainer的采样batch赋予一个独一无二的全局step。我们可以利用这个step,将对一个item的频率 p p p的估计变成对两次连续命中此item的平均step差 δ \delta δ的估计。
由于我们的样本没有固定vocabulary,我们利用hash array来记录对streaming ID的采样信息。
如Algorithm 2所示,我们维持两个长度为 H H H的数组A和B,假设 h h h是一个哈希函数,能够将任一item映射到 H H H内的一个整数,那么对于一个item y y y A [ h ( y ) ] A[h(y)] A[h(y)]表示y最后一次被采样时的step, B [ h ( y ) ] B[h(y)] B[h(y)]是y的 δ \delta δ,当 y y y出现在第t个step时,
B [ h ( y ) ] ← ( 1 − α ) ⋅ B [ h ( y ) ] + α ⋅ ( t − A [ h ( y ) ] ) B[h(y)] \leftarrow (1-\alpha) \cdot B[h(y)] + \alpha \cdot (t - A[h(y)]) B[h(y)](1α)B[h(y)]+α(tA[h(y)])
然后我们更新 A A A

Multiple hashing


为解决哈希冲突,用多个数据多个哈希函数来计算video位置,最后 1 / m a x i B i [ h ( y ) ] 1/max_i{B_i[h(y)]} 1/maxiBi[h(y)]得到item的采样概率。

YouTube召回系统


模型结构如上图所示,我们使用了大量的种子视频的信息作为feature。

  • label:video的点击被用作positive label。除了点击外,我们还构建了 r i r_i ri作为用户和video之间的羁绊(不是)。例如 r i = 0 r_i=0 ri=0表示点击了video,然而只看了一小段时间。 r i = 1 r_i=1 ri=1表示点击了video并且看完了它。
  • video feature:video feature包含id类feature和稠密的feature。对id类feature有一个embedding层将每个feature映射为一个稠密的向量。对于类别这样的特征可能是几个embedding的加权求和。为解决oov问题,我们为每个特征赋予一个hash bucket。
  • user feature:我们利用一个用户的观看历史来获取用户兴趣,一个例子就是用户最近观看的k个video的id序列,我们利用这些id的embedding均值来表示这个序列。相同的id在用户兴趣、种子video和候选video特征中共享embedding。

训练和线上服务

模型的训练采取如下方式:训练器从最开始的训练样本过到最新的,当最新一天的训练样本也已经被使用后,训练器等待下一天的数据。index pipeline每隔一段时间为线上服务提供一个保存好的model。pipeline由三个阶段构建起来:候选样本生成,embedding推理和embedding index。在第一阶段,一个video根据特定的规则被挑选出来,我们对它们抽取特征并生成候选video。第二阶段利用右边的塔来生成候选video的embedding。第三阶段利用一个基于tensorflow的index模型为候选video生成index。

YouTube实验

YouTube的训练数据包含每天十亿量级的点击过的video,我们取了很多天。两个塔每个都由一个三层的DNN构成。为验证sequential training的效果,我们每隔几个小时构建一个大概10M的video集用来生成index,这个video集中会包含新video,然而一般情况下它包含超过90%的训练数据。

离线实验

对所有点击过的video,我们将 r i r_i ri赋值为1,并利用召回率来评估模型性能。为检验sequential training的效果,我们从第 d 0 d_0 d0天开始评估我们的模型。在 d 0 d_0 d0天时模型已经利用前面15天的数据进行了训练,并且开始等待新数据。对 d 0 d_0 d0后的每一天,我们将10%的数据拿出来用来评估。实验结果如下表:

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值