契机
从样本和模型两方面来介绍向量级别召回模型的由来。提出很有建设性的工业级别的参考价值。
样本角度
有监督的二分类模型需要构建正负样本,正样本的选择不管是召回和排序来说都是一致的,即用户有显式的点击行为的样本为正样本。而对于召回模型(甚至对于粗排模型)来说,负样本的选择至关重要,如下会介绍正样本的构建方法和两种级别的负样本构建方法。
正样本抽样
有些item在用户显式点击反馈中出现的次数过高,这会导致召回模型会被这些item绑架,因而需要对用户显式点击反馈中的item进行抽样,被抽到的概率为如下公式,其中 Z ( w i ) Z(w_i) Z(wi)代表item在整个item库中出现的频次。
P p o s = ( Z ( w i ) 0.001 + 1 ) 0.001 Z ( w i ) P_{pos}=(\sqrt{\frac{Z(w_i)}{0.001}}+1)\frac{0.001}{Z(w_i)} Ppos=(0.001Z(wi)+1)Z(wi)0.001
这里抄这位大神的图,可以看出抽样概率和item出现频次是呈反比的,即出现频次越高,其抽取的概率越低。
负样本构建之easy negative
顾名思义,easy negative即模型比较容易判别出来的负样本,这些负样本必须特别"负"才行,换句话说就是和用户兴趣八竿子打不着的item会被当做easy negative,这样才能更好的模拟线上数据分布。
负样本构建之hard negative
送到召回模型的负样本不能只有比较容易区分的easy negative,也必须有一些较为难分的样本,即为这里的hard negative。文章中所提到的hard negative是线上召回模型排序后位置不前不后的item作为hard negative来用,这样的效果是最好的。
负样本抽样
构建好负样本后,也会面临和正样本一样的问题,即冷门和热门的问题,因而这里抽样的公式如下,其中 n ( w i ) n(w_i) n(wi)代表的是item在整个item库中出现的频次。
P n e g = n ( w i ) α ∑ j n ( w j ) α P_{neg}=\frac{n(w_i)^\alpha}{\sum_j{n(w_j)}^\alpha} Pneg=∑jn(wj)αn(wi)α
该公式能够兼备冷门和热门的问题,证明过程为如下代码:
import numpy as np
# 每个item出现的频次
>>> x = np.array([10, 20, 30, 50])
# 没有特殊处理的各item抽样概率
>>> x / sum(x)
array([0.09090909, 0.18181818, 0.27272727, 0.45454545])
# 处理过的各item抽样概率,可以发现热门资源被抽中的概率被打压下来
# 而且冷门资源抽中概率被放大
>>> x ** 0.75 / sum(x ** 0.75)
array([0.12040937, 0.20250362, 0.27447401, 0.402613 ])
曝光未点击为"鸡肋"
这只是针对召回模型来说,用户未点击并不代表用户显式的不喜欢这些资源,而只是更加喜欢那些他们主动点击的资源,这也是召回和排序对于样本层面的不同之处。文章中也提到,用曝光未点击样本作为负样本,并没有指标上的显著提升。
模型角度
这里阐述两个概率:easy model和hard model。easy model是用easy negative作为负样本训练出的模型,hard model是用hard negative作为负样本训练出的模型。而且这里的"模型角度"主要想阐述的是不同模型之间的融合方式。
并行融合:不同模型的加权求和。
串行融合:先过easy model,再过hard model,这其实和召回+粗排的逻辑是一样的。