召回:从全量几百万的拍品池中筛选出几百个用户可能感兴趣的拍品,热门拍品,主推拍品
精排:将召回拍品进行精准的个性化排序
重排:对精排结果做一些业务调整,比如探索,多样性等。
先来思考一个问题:假设我们知道一个用户的基础信息和在APP上所有的行为记录,以及每件商品的信息,该如何给这个用户推荐其感兴趣的商品的呢?
推荐算法主要考虑三个要素:人、物、交互行为。
人:延伸开来就是基于人口统计学或相似行为用户的u2u推荐,也可以使用表征学习(embedding)对用户建模。前者比较直接,能够抽象出具有某些特征的用户对某些类型的商品具有更高的匹配度,后者则是用一个向量来描述用户的偏好;
物:一件商品我们一般从三个角度去考虑,1. 商品的内在属性,比如类目、店铺、价格等,这些内在属性和“人”的偏好程度结合起来进行推荐;2. 商品的热门程度,这能侧面反应出一件商品的好坏和受众面;3. 商品的表征学习,常用的如word2vec;
交互行为:用户在平台上的行为,一般有两种应用方法,一个是将用户的行为不停的拆解,得到类目/店铺/价格等偏好信息,一个是将行为序列直接与目标商品进行匹配,目前典型的是深度兴趣网络,这两种模式可以结合使用,因为模型训练难度和线上推导成本的原因,用户的行为序列一般只取近期,缺少长期兴趣的信息,需要第一种模式拆解出用户中长期兴趣。
Bandit 算法源于多臂赌博机(Multi-armed Bandit,MAB)问题,一个赌徒去摇老虎机,一个老虎机共有 个外表一模一样的臂,每个臂的中奖概率为,他不知道每个臂中奖的概率分布,那么每次选择哪个臂可以做到收益最大化呢?
用户可以对每个臂进行尝试,初期每个臂都会得到相同的机会进行尝试,每次尝试后都用中奖次数/尝试次数来估算。由大数定理,试得次数越多估算的得就越准,所以试得次数越多,越倾向于找中奖概率最大的臂。
将每件商品看做是一台老虎机,每次曝光就是一次实验,每次点击则认为是中奖,随着测试次数越多,点击次数高的商品则认为是比较好的商品,这里我们采用汤普森采样(Thompson sampling)的方法来计算老虎机的中奖概率。汤普森采样基于beta分布,beta分布有两个参数a与b,记为beta(a,b),有
a表示奖励参数,a越大采样的值就越接近1;b表示惩罚参数,b越大越接近0.
此时beta分布的均值就是 click/expose,也就是商品的期望点击率,曝光数越多,采样的值越接近期望值。
该方法主要是计算商品侧的分数,同时我们可以根据用户的人群划分和历史行为,计算出用户对类目/价格/店铺的偏好分,跟商品分数相结合,就能求出用户对这个商品最终的分数。
Bandit方法简单快速,适合起步阶段的推荐系统,同时在探索时有不错的效果,线上耗时10ms左右。
Bandit方法主要是给商品打分,虽然可以通过增加正负反馈加入用户行为特征,但是用户特征带来的正负反馈如何与商品分数结合,权重如何设置都是需要不停调试的超参数,因此需要一种自动化的方法来进行调节。
其中是是标签,是特征(用户侧特征,商品侧特征,交互行为抽象后组成的特征),是要计算的权重,LR相当于利用特征的线性组合去预测结果,FM则是利用特征一阶线性组合和二阶交叉(最后一项是特征之间的二阶交叉)来预测结果,交叉特征在推荐算法中十分重要,因为推荐算法做的是人和物的匹配,必然要联合考虑人和物的特征关联(例如用户在最近三天内点击N次玉翠类拍品,将该特征和拍品的品类进行交叉关联,如果目标拍品是玉翠类的,自然能获得更高的分数),LR虽然能通过手动构造交叉特征来达到这个目的,但是繁琐且不利于迭代,FM则自动进行二阶交叉,自然适应性更好。
这两种算法是机器学习在推荐系统中的初步应用,方便上线,推理速度快。
不完全准确地说,机器学习推荐算法就是从三要素中提取特征,根据历史数据求得每个特征的权重,最终计算出用户对目标商品的分数。
DeepFM分为两个部分deep和FM。
前面已经讲到,FM最大的特点是自动进行特征二阶交叉,既然交叉特征能提升效果,那如果做三阶交叉四阶交叉岂不是效果更好,比如用户-类目-价格的交叉,这显然是一个很重要的特征,但是高阶特征交叉带来的模型复杂度是指数型增长的,这时候需要用深度神经网络来做高阶特征交叉,也就是Deep部分。同时保留FM部分是为了加强这部分特征,使得能够学习到足够的历史行为。
我们在搜索排序中使用了两个DeepFM模型,一个点击率模型,一个出价率模型,底层特征embedding共享,一千多件拍品线上并行推导约20多ms,UV价值提升10%+。
深度兴趣网络(DIN, Deep Interest Network) 顾名思义,主要研究用户在平台上的兴趣,核心思想是用户行为序列和目标商品交叉的时候,提高与目标关联程度高的商品的权重。
因为用户的兴趣是多样化的,比如在预测用户对一件国画拍品的点击率时,用户历史点击拍品序列中书画类拍品的重要性肯定要比钱币类拍品高,因此应该将注意力集中到书画类的拍品,提高其在模型中的权重。
玩物得志APP首页应用了DIN模型,数百件拍品线上推导约30多ms,人均点击商品数提升18%,UV价值提升14%。
验证集严格按照时间顺序进行切分,防止发生特征穿越,一般我们在调试时,选取最后一天的数据作为验证集。不同模型线下评估时同样固定同一份验证集,且验证集同样不进行采样。
因为拍品库存为1的原因,信息保留时间短,可以尝试加入图片文本特征的embedding特征。
精排样本数量大,只能训练最近几天的样本,工程上可以使用分布式训练模型增加训练样本,算法上可以添加预训练embedding向量来学习到更久的样本。
数据的debias问题和推荐系统闭环问题也是值得深入探索的点。
推荐阅读 : 玩物得志拍品个性化推荐 | 召回篇