推荐系统:排序

阅读量 ,评论量

背景

推荐系统排序。

求解器

FTRL

https://www.cnblogs.com/EE-NovRain/p/3810737.html

https://github.com/alexeygrigorev/libftrl-python

训练模式

一般有两种训练模式:

单阶段训练不必多说,这里详细说下两阶段训练。

为什么存在两阶段训练:

为什么update阶段要mask掉后验点展值:

后验点展值为什么要在join阶段训练完后再更新:

既然离散特征的后验点展值加进模型中了,那我们是不是就不需要进行cali了?

模型

常用的排序算法框架有pointwise、pairwise、listwise三类。pointwise学习单个样本,如果最终预测目标是一个实数值,就是回归问题,如果目标是概率预测,就是一个分类问题,例如CTR预估。pairwise和listwise分别学习一对有序对和一个有序序列的样本特征,考虑得更加精细。在推荐系统中常用pointwise方法来做排序。

LR

对数几率回归(逻辑回归)模型。

Google在2013年推广的FTRL、阿里推广的分片线性模型。

GBDT

GBDT作为特征抽取器,利用GBDT构造的新特征来训练LR模型。

FM

FM

在ctr预估模型中,关联特征很重要,如汽车文章中的车系(劳斯莱斯幻影、宏光mini ev)与一个人的收入水平,因此引入两个特征的组合对提高模型的预估能力很有帮助。

FFM

Deep FM

用FM替换掉了原来的Wide部分,加强了浅层网络部分特征组合的能力。

FNN

使用FM的隐层向量作为user和item的Embedding,从而避免了完全从随机状态训练Embedding。

NFM

如果我们从深度学习网络架构的角度看待FM,FM也可以看作是由单层LR与二阶特征交叉组成的Wide&Deep的架构,与经典W&D的不同之处仅在于Deep部分变成了二阶隐向量相乘的形式。

NFM从修改FM二阶部分的角度出发,用一个带Bi-interaction Pooling层的DNN替换了FM的特征交叉部分,形成了独特的Wide&Deep架构。其中Bi-interaction Pooling可以看作是不同特征embedding的element-wise product的形式。

AFM(看下这篇,应该能更深入地理解FM)

AFM顾名思义,就是引入Attention机制的FM,具体到模型结构上,AFM其实是对FM的二阶部分的每个交叉特征赋予了权重,这个权重控制了交叉特征对最后结果的影响,使FM获得根据样本特点调整特征权重的能力。

image-20210817195930859

DNN

DSSM

即simnet。

Deep Crossing(ctr预估的base模型)

Embedding层将稀疏特征转化为低维稠密特征,用stacking layer将分段的特征向量连接起来,再通过多层神经网络(残差网络块)完成特征的组合、转换,最终用scoring layer完成CTR的计算。

PNN(强化模型能够针对性的特征交叉)

通过加入Product layer实现针对性的特征交叉。

wide&deep

Wide部分的主要作用是让模型具有记忆性(Memorization),单层的Wide部分善于处理大量稀疏的id类特征,便于让模型直接“记住”用户的大量历史信息;Deep部分的主要作用是让模型具有“泛化性”(Generalization),利用DNN表达能力强的特点,挖掘藏在特征后面的数据模式。最终利用LR输出层将Wide部分和Deep部分组合起来,形成统一的模型。

Deep&Cross Network(DCN)

使用Cross网络替代了原来的Wide部分。其中设计Cross网络的基本动机是为了增加特征之间的交互力度,使用多层cross layer对输入向量进行特征交叉。单层cross layer的基本操作是将cross layer的输入向量xl与原始的输入向量x0进行交叉,并加入bias向量和原始xl输入向量。

DIN

在模型的embedding layer和concatenate layer之间加入了attention unit,使模型能够根据候选item的不同,调整不同user特征的权重。

DIEN

通过引入序列模型 AUGRU模拟了用户兴趣进化的过程。具体来讲模型的主要特点是在Embedding layer和Concatenate layer之间加入了生成兴趣的Interest Extractor Layer和模拟兴趣演化的Interest Evolving layer。

其中Interest Extractor Layer使用了DIN的结构抽取了每一个时间片内用户的兴趣,Interest Evolving layer则利用序列模型AUGRU的结构将不同时间的用户兴趣串联起来,形成兴趣进化的链条。最终再把当前时刻的“兴趣向量”输入上层的多层全连接网络,与其他特征一起进行最终的CTR预估。

DIHN

触发后推荐场景下的CTR建模预估,解决相关推荐的结果更相关还是更泛化的问题。

MMOE

多目标建模时Shared-Bottom结构存在模型拟合能力差的问题。上层塔对拟合自己对应目标所需要的底层输入没有差异,如果上层学习两个任务差异性比较大则效果会很差。相关性不强的任务之间的信息共享,会影响网络的表现,会出现负迁移(negative transfer)现象。增加多个专家网络,不同目标分别学习自己的Gate,作用于所有的专家网络上。

CGC

继续MMOE的出发动机,进一步强化模型表达能力,各目标独有的非共享专家网络。CGC(PLE的简单版本)与MMOE主要区别在于,CGC模型中每个任务同时有共享的专家和独有的专家,而MMOE全部是共有的专家。相近的任务共享参数可以提高性能,但不相近的任务会引入噪声降低性能,故CGC通过同时存在共享参数和独有参数,从而缓解这种噪声,即缓解跷跷板现象。

任务类型

单目标排序

学点击,时长,消费,点赞,评论,分享等。

一些trick点

1、不采用直接预估时长的值,而采用播放进度的预估*物理时长的方式:

2、播放进度分别采用一个回归任务和一个判别任务,在融合公式中,线上将两者加和使用:

3、时长建模时,经常通过显示地建模数据分布,尽量保证所用的loss符合最大似然估计的假设,来降低模型拟合难度,提高模型精度,常用的方法主要有两种:

多目标排序

比如我们以完成率建模,短视频的完成率天生就要比长视频要高;作者会想办法发各种骗完成率的视频,类似列表页产品形态中的标题党,比如,猜谜类视频等。这些问题反映了单指标建模的脆弱性,所以,多目标建模的鲁棒性就由此凸显出来了。

而多目标建模中难点在于如何平衡多个建模目标之间的关系,目前的通用做法是将多个q加权或连乘,比如Prob(click) * watch_time,也就是人工的去制定规则,这种方式可以快速见效、简单、快捷,而且便于理解。但⼀个很致命的问题是,人工规则没办法挑选出最优的解。其次,当其中的⼀个因⼦发生变化时,比如值域发生变化,就会导致整体的公式失效。如何系统的去解决这两个问题,是多目标建模中的重点和难点。