美文网首页
推荐系统入门实践(7)排序简述

推荐系统入门实践(7)排序简述

作者: 夏安的算法学前班 | 来源:发表于2020-05-23 16:02 被阅读0次

    排序

    总述里提过,召回跟排序(一般说排序都是指精排)之间还可以有一个粗排。不过粗排可以看成多级排序的其中一环,就不特意说明了。在我工作中,粗排是用的GBDT模型。

    我对排序的了解比较浅陋,因为平时做召回比较多。这部分只是简略说一下,疏漏难免,甚至可能有错误。

    贴一个大佬的分享 大佬的知乎文章,建议看原文,简洁清晰。

    LR模型(logistic regression)

    这就很好理解...直接贴大佬的图了:

    排序LR.png

    线性模型其实就是wx+b...LR再套一个sigmoid是为了把取值规范到0-1。优点是简单、可解释(特征的权重都知道,哪个特征重要也就知道,进而也容易解释结果)、易扩展(很好加特征),大佬说缺点是不好特征组合,我认为不好找特征也是一个缺点...

    问,如何为LR模型选特征?答,特征工程的同学们给啥用啥。卒。

    选择特征有一些方法论的,我实践里没有机会用过,但tm面试里被问过...可以参考这个问题特征选择知乎答案1特征选择知乎答案2

    简单点说,单特征auc、信息增益、覆盖率、取值(方差)等都应该考虑,也可以用gbdt、lr等对特征打分,也可以用L1正则来选特征。贴个图,细节我也不懂,有时间细研究下后面补充吧(这句话出现频率有点高)。

    特征工程.jpg

    线性模型改进

    线性模型加上特征组合,本质是SVM,为什么?多项式核。

    排序LR改进.png

    FM模型

    改进特征组合的权重。泛化性更好。

    排序FM.png 排序FM2.png

    FM模型的dnn理解:


    排序FM-dnn解释.png

    FFM模型

    再细分field。参数量1+n+kfn,时间复杂度O(k*n*n)。


    排序FFM1.png
    排序FFM2.png

    双线性FFM

    改进参数量太多的问题。

    排序双线性FFM1.png
    排序双线性FFM2.png

    树模型-gbdt

    排序GBDT.png

    GBDT+LR

    GBDT当做特征抽取模块,后面接LR。fb论文

    排序GBDT+LR.png

    实际可以再加一些dense特征的,gbdt当成稀疏特征提取器。这样想来,GBDT+FM也就容易理解了。基于这种思想的其他模型也就顺理成章了,例如我们实践中用过一个ensemble model如下图:

    排序ensemble-model.png

    后来想换成deepFM一直未成功,一方面效果要超过ensemble比较难,因为ensemble本身也是有FM的,另一方面速度很慢,因为原本的引擎架构没有做这方面支持,于是要在tf里面分field,想要变快需要引擎推倒重来,比较难。

    wide&deep

    可以看看tf.estimator.DNNLinearCombinedClassifier.

    排序w&d.png

    deepFM

    排序deepfm.png

    deepFFM

    这里细节不多说了,再次推荐大佬的文章这里

    排序nffm.png
    排序deepffm.png

    其他如PNN,DIN,DCN,Deep&Cross等就不说了,反正都没用过...


    实践经验

    下面简单记录一下实践里的有用经验,可能略去很多细节。

    样本权重调整

    在模型固定时,调整样本权重是对指标最有效的措施之一。如何设计样本权重呢?举例说,假设负样本权重是1,我们可以让正样本的权重正比于playtime,也就是weight=alpha*playtime,其中alpha用来平衡正负样本比例,这个公式里包含的假设是通过playtime区分视频质量。通过统计视频duration和playtime的关系,可以发现二者正相关,那么这样的权重就偏向推出长视频,但我们不希望这样(我们要的是公平,公平,还是tmd公平)(各业务不同)。

    为了去掉上面所说的影响,考虑到playtime=duration*percentage,我们可以定义weight=alpha*percentage,让它跟完成率正比。但是统计duration和percentage的关系(实际是显然的),可以发现二者反比,那么现在就更容易推短视频了,还是不好。

    我们首先需要一个合理的假设:视频推出质量的分布与duration无关,并且在各个duration区间下均匀分布,也就是说,在任何duration区间里,样本权重的平均值应该相同。一种实现方式是,对每个duration区间下的playtime进行等频分割,然后映射到level,最后level映射到weight。这样duration与weight就几乎不相关了。举个例子:weight=sigmoid(playtime)*level/scale+bias,实际上参数可以自己调整实验。细节不谈。

    多样性MMR

    MMR就是Maximal Marginal Relevance 论文这里,是为了保证推荐结果多样性。其实很简单,可以理解为得到排序score后,再根据item相似度(另一个角度就是多样性)来重新打个分。公式是 lambda*score(i)-(1-lambda)*max(sim) ,lambda是超参数,sim就是物品i跟“已经被选中的item”的相似度,我们的目标就是选择一个item i 让这个公式得分最高,这样就平衡了排序得分和多样性。其中sim计算可以复杂(embedding距离)也可以简单(tag的jaccard距离)。

    添加召回特征

    一般新加召回源之后,可以在排序模型中添加该召回源的得分作为特征,通常会有一定提升(不大)。排序模型中也可以添加召回产出的embedding特征,例如i2v/n2v/dnn等。

    用户分层

    上一节说过了,字面意思。

    模型更新

    想到两点,一是不要重新训练模型,在上一个模型基础上使用新样本继续训练;二是加快更新频率,一般可以做到小时级。也可以小时级用小样本,天级用大样本,选择很多。

    其他

    1. 关于特征。稀疏特征比如用户兴趣的id类、tag类特征,比如item侧的id类、tag类特征;embedding特征不用说,user item都可以有;dense特征比如各种统计特征,统计特征本身也可以分桶,特征之间可以交叉加权等。

    2. 如何侧重新视频?第一是样本权重,第二是样本筛选。这两样最有效。

    相关文章

      网友评论

          本文标题:推荐系统入门实践(7)排序简述

          本文链接:https://www.haomeiwen.com/subject/sgqlahtx.html