上一篇文章点击率预估与冷启动(一)咱们说到了键值储存网络,今天我们接着往下说。
键值储存网络实现了字典特征到向量的转换,而我们希望得到的是连续值特征到向量的转换。我们其实只需要再实现连续值到字典特征的转化就大功告成了。虽然连续值特征到向量很难,但是连续值特征到字典特征的实现方式却有很多。
假定有了连续值特征到字典特征的转化,那么总体架构和键值记忆网络基本一致,如下图所示:
连续值特征到字典特征的转化即图中的Key-Value Memory,如何实现这部分应当结合具体业务场景的数据分布。这里先介绍下郭佬的做法吧:
(1).将连续值特征缩放至区间[0,1]
(2).在[0,1]区间找n等分点,比如n=6时,就是(0, 0.2, 0.4, 0.6, 0.8, 1)
(3).依次计算连续值特征x与n等分点的距离,比如x=0.3,n=6,就是(0.3, 0.1, 0.1, 0.3, 0.5, 0.7),之后构造字典特征{0:0.3, 1:0.1, 2:0.1, 3:0.3, 4:0.5, 5:0.7}
(4).对字典特征的value部分取倒数后接softmax,具体相似度公式如下:
公式当中分母上加10是为了防止当q正好等于某个等分点时分母为0的情况。郭佬的方法将字典特征的key定义为[0,1]区间的等分点,之后对浮点数与各等分点的距离做取倒数和softmax变换。取倒数是为了保证浮点数越接近等分点,权重越大。softmax变换是为了保证所有权重之和为1。
实践中发现,当q与某个等分点较接近时,value中除了该等分点对应的值外,其它值都非常接近0。这主要是因为softmax函数会指数级加大距离间的差异。为了缓解这种情况,我们对上述公式做了改进:
该公式取距离平方反比为权值,之后将权值缩放至总和为1。用该公式得到的权值比较“分散”,可以让模型更好的学习那些冷门分位数的embedding表示。
截至目前,我们已经讲了点击率特征的贝叶斯平滑,以及如何在不损失精度的情况下把浮点数特征(比如点击率特征)输入神经网络。
如果把点击率看成一个普通浮点数,问题已经解决。但是点击率并不普通,点击率可以被认为是用户是否点击广告这个随机变量的期望值。
用户是否点击广告实际上是一个随机变量,点击率就是用这个随机变量的期望值作为特征,去描述它。这样做实际上是用一个值去代表一个复杂的分布,必然会带来信息损失。举个例子,A用户浏览20次,点击10次。B用户浏览100次,点击50次。A和B的点击率都是50%,但是他们是否点击广告的概率分布却大不一样,虽然AB两用户点击率都是50%,但是B用户点击次数更多,所以B用户的点击率置信度更高,B用户的概率分布也更集中。这就体现出点击率特征的弊端,它只能描述概率分布的期望,而无法完整描述概率分布。
我们希望完整描述概率分布给到模型,我们希望精确区分出点击率很相似但总浏览数差异很大的那群人。这个问题可以被定义为如何向模型描述一个概率分布。用户是否点击广告的概率分布是连续的,可以用概率密度函数表示。我们对概率密度函数进行分段近似,分别统计它在[0,0.1),[0.1,0.2),[0.2,0.3),[0.3,0.4)...区间的平均值,用这些平均值来表示这个分布。形式如下:
{[0,0.1):0.1,[0.1,0.2):0.2,[0.2,0.3):0.4,[0.3,0.4):0.4,...}
该形式其实也是字典特征,它的key表示的是一个区间,value是点击率这个随机变量落在各区间的概率。如此一来,可以直接将这个字典特征输入键值储存网络。这种方式利用随机变量的概率分布,跳过了连续值特征转到字典特征这一步,直接做随机变量值到字典特征,避免了上文中的人工设计的相似度公式所带来的信息损失。如果构造的特征可以被看做是随机变量,那么就可以利用数学工具得到它的概率分布,概率分布分段近似得到字典特征,最后将字典特征输入键值储存网络。
到此为止,我们讲完了点击率预估与冷启动,具体方法概括如下:首先利用贝叶斯平滑对点击率这种连续值特征进行修正,使其更接近用户真实点击的概率,接着将修正后的特征值转换成字典特征,最构建整个键值存储网络。
下一篇咱们讲讲oCPC中的成本控制。
欢迎关注微信公众号:计算广告那些事儿