推荐系统之Position-Bias建模
Posted 比尔的新世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推荐系统之Position-Bias建模相关的知识,希望对你有一定的参考价值。
Position-Bias 特征指文章(Item)在一刷当中的位置及其相对广告的位置等。经验和有关论文都告诉我们,文章在一刷当中的位置会影响该文章的点击率,同时文章相对广告的位置也会影响文章的点击率,这种影响是跟用户的真实兴趣无关,而是跟用户的注意力,用户对广告的情绪有关。离线分析显示,排在前面的文章一般比排在后面的文章点击率高,离广告近的文章点击率一般较低,这种Bias被称为Position-Bias,引入相关特征,目的就是为了一定程度上减轻Position-Bias的影响。
Position-Bias特征的处理方式主要有两种,一是作为特征和其它特征一起输入网络,二是作为一个单独的模块接入。作为特征的处理方式比较简单,接入方式一般如下图所示。
如果作为模块,其中又涉及到Position-Bias模块的输入如何与原始网络输出进行结合的问题,具体到实现则主要有以下几种:
一是输出为sigmoid(Position-Bias_output logits + NN_output logits), 这种算标准的Wide&Deep接入方式了。
二是输出为sigmoid(w1*Position-Bias_output+ w2*NN_output), 在Position-Bias侧多学两个参数,可以看成Weighted Wide&Deep,这样的效果实验来看比一要更好一些。
三是Position-Bias部分做成shallow tower结构,相当于Position-Bias网络部分参数量更多了,同时在其内部引入了非线性及特征之间的隐性交叉,效果略有提升。
四是 sigmoid(Position-Bias_outputlogits)*sigmoid(w2*NN_output logits),这是华为提出的PAL模型结构,对影响最终点击的位置和位置无关信息分别建模,线上预估的时候不需要使用Positoin-Bias部分。
五是sigmoid(w1*Position-Bias_output logits) + sigmoid(NN_output logits),与方法四的区别是连乘变成加和,解释的话就与个人理解问题的角度有关了。
其实上面几种处理方式,个人理解没有哪一种方式一定是最优的,还是需要结合自身业务及AB实验来选择最合适的。如果要宏观分析的话,一般特征如果比较丰富,可能选择Wide&Deep结构效果会更好些,如果特征覆盖度不大,直接将Position-Bias特征和其它特征一样处理可能更方便有效,处理方式的区别与Position-Bias特征在整体特征中的重要性有关。Position-Bias特征信息量其实挺有限并且基本固定,建模成Wide部分可以看成是增强对这部分信息的记忆能力(memorization)吧。
对于方式一二三,线上Serving的时候,由于无法实时获取到Position-Bias信息,所以一般会选择使用随机值或者通过AB实验固定效果较好的值来替代。使用Position-Bias信息,可能会出现线下与线上效果不一致的问题,如果排除掉其它问题,确定只跟引入Position-Bias相关的话,只能说可能你们当前的业务和模型确实还不太合适引入这个信息,等后面特征丰富了,业务更加成熟了,可以再试试,毕竟推荐整个业务流程还是非常复杂的,有时候你加入一些在别的地方有明显收益的操作在当前的场景下它就是不work,这跟整个系统的成熟度有关。不知道有没有同学尝试过将Position-Bias特征与其它特征做交叉,个人觉得这个交叉提炼不出太多意义,同时由于线上serving的时候取不到相关特征会造成整个Sering网络的不稳定,如果有尝试过的同学,欢迎交流一下实际使用经验。
[1] PAL: a position-bias aware learningframework for CTR prediction in live recommender systems
以上是关于推荐系统之Position-Bias建模的主要内容,如果未能解决你的问题,请参考以下文章