文章目录
核心思想

特征
计算广告业务
竞价策略
Myerson auction 是什么意思?解决了什么问题? - 蛋堡学长的回答 - 知乎
那个y的最大值是求导为0得到的。
不同广告主的出价方式是不同的,有的广告主是按CPA出价,有的广告主是按CPC出价,那么作为广告平台如何对出价方式不同的广告进行排序呢?再比如现在有两个广告都是按照CPC出价,答案就是对不同的广告计算eCPM(ExpectationCPM)。
对于CPC广告,
e
C
P
M
=
p
C
T
R
∗
C
P
C
∗
1000
eCPM = pCTR * CPC * 1000
eCPM=pCTR∗CPC∗1000,对于CPA广告,
e
C
P
M
=
p
C
T
R
∗
p
C
V
R
∗
C
P
A
∗
1000
eCPM = pCTR * pCVR * CPA * 1000
eCPM=pCTR∗pCVR∗CPA∗1000。这样的
e
C
P
M
eCPM
eCPM其实就形成了一个期望,描述的是针对这一次曝光,对于平台来说的期望收益是多少,因为说到底毕竟平台只是负责曝光,挑选曝光后收益期望较大的广告进行曝光,与广告平台的利益是相符的。
一文了解信息流广告的eCPM计算公式
计费方式
CPM (Cost Per Mille):每千人成本。按展示数量收费。
CPC(Cost Per Click):每点击成本。按点击数量收费。
CPA(Cost Per Action):每行动成本。按用户行动来收费。注意,是消费量/转化量,CPA=CPC\CVR。例如,每次点击广告主出10块钱,而cvr是0.1,那么对于广告主来说,cpa就是100,也就是拉一个客户的成本是100元。
OCPX
oCPC和CPC之间的区别
什么是oCPC模式?oCPC和CPC有什么区别?
一部分广告主投放广告的真实目的是获得转化,为了满足广告主的目的,oCPC模式将广告投放分为两阶段,第一阶段使用常规CPC计费方式进行广告投放,积累了足够的转化之后,使用模型手段预估pCVR,并根据广告主设定好的转化成本(其实就是CPA),来动态计算CPC=CPA*pCVR,并将这个CPC用于竞价排序计算eCPM,后续如果用户点击,扣费金额也是用的这个动态计算出来的CPC(比如说模型预估某个客户的cvr可能很高,那么算出来的cpc可能会很高)。腾讯的两阶段广告就差不多这样,第一阶段用的是浅层转化进行模型训练,第二阶段关注深层转化。
那为啥不直接按照CPA计费呢?平台不乐意。于是才有了oCPM这么个玩意。
(CPA广告)在一定程度上没有考虑个人站长的利益,只维护广告主的利益,所以CPA广告被很多网站抵制。网站所有者很少愿意占用高质量的广告空间投放不受欢迎的CPA广告。而且,如果产品没有吸引用户点击、注册、购买等因素,就相当于浪费了一个广告位而没有产生相应的广告费。
oCPA、oCPM竞价的本质是什么? - 马超的回答 - 知乎
理想状态中广告主预期成本(CPA)为广告主的底价(广告主能接受的最高CPA成本) ,假设广告主的预期成本没有波动,根据eCPM公式可以推到出来无论是按照CPC付费 还是CPM付费 广告主预期成本不变 pCVR越高 eCPM 与CPC越高 ;
评价指标
CTR (Click Through Rate): 点击率。
pCTR(Predict Click-Through Rate): 预测转化率。
CVR (Click Value Rate): 转化率。点击转化成注册的比率。
pCVR(Predict Click Value Rate): 预测转化率。
CTR bias:E(CTR)-E(pCTR)
广告归因
广告归因的几种方式
归因分析(Attribution Analysis)模型解析
互联网广告的归因分析(Attribution Analysis)
马尔科夫链很有意思
综合介绍
腾讯广告oCPA 双出价 两阶段 自动扩量 系统优选
腾讯广告学习中心
腾讯广告oCPA两阶段出价用的溜,深度转化不用愁
字节跳动穿山甲联盟的“付费双出价”究竟是什么?
字节的双出价与腾讯的两阶段好像是对应的
DMP
- 收集一方数据;
- 为广告主提供数据洞察,例如对转化人群做年龄分析;
- 基于人群包的其他功能,例如人群挖掘、特定人群定向推荐。
传统推荐算法
处理冷启动:用户冷启动:方案1,从其他地方获取信息比如性别年龄朋友关系等作为特征,然后用常规算法进行推荐;方案2,如果用户喜欢了一样东西,然后,我们把与这个商品相似的商品推荐给这个用户。
商品冷启动:方案1,读取这个商品的内容,计算相似度,比如电影的演员,语言等等;方案2,这个商品被某人喜欢了,那么我们把与这个人相似的其他用户推荐给这个商品。
推荐算法入门
推荐系统中使用ctr预估模型的发展
协同过滤
基于用户的协同过滤:寻找相似的人。一个人的打分列表可以作为这个人的特征序列。人与人之间的相似性通过给相同的物品的打分情况来判定,因为如果两个人在很多物品上都是同时喜欢或者不喜欢,那么这两个人就相似。具体就是计算内积。
基于物品的协同过滤:寻找相似的商品。一个商品的得分序列可以作为这个商品的特征序列。物品与物品的相似性通过被相同的人的打分情况来判定,因为如果很多人都认为两个东西同时好或者同时不好,那么这两个东西就是相似的。例如物品A得到的打分是[1,3,3,1,4],物品B得到的打分是[2,1,3,1,4],如果一个新的用户买了A,那给他推荐B,也就是说,不需要等这个新用户积累一定的购买信息,就能给他推荐东西了,这解决的就是用户冷启动。
上面博客里基于物品的协同过滤是先找的与物品3最相似的物品4、5,然后在找物品4和5最相似的
矩阵分解
SVD
奇异值分解SVD简介及其在推荐系统中的简单应用
图1:对(1,0)向量做M矩阵映射,
图2:对(1,0)向量做M矩阵映射
图3:对(1,1)向量做M矩阵映射,会发现向量方向没变。后面的图也是一个道理。看了半天。。
M
x
=
(
v
1
∗
x
)
σ
1
u
1
+
(
v
2
∗
x
)
σ
2
u
2
=
u
1
σ
1
v
1
T
x
+
u
2
σ
2
v
2
T
x
Mx=(v_1*x)\sigma_1 u_1 +(v_2*x)\sigma_2 u_2=u_1\sigma_1v_1^Tx+u_2\sigma_2v_2^Tx
Mx=(v1∗x)σ1u1+(v2∗x)σ2u2=u1σ1v1Tx+u2σ2v2Tx咋来的,矩阵相乘其实不满足交换律的,但刚好
v
1
T
x
v_1^Tx
v1Tx是实数,所以可以先交换到末尾,然后做结合律运算就好了。。。
就是用特征向量矩阵来表示一个商品,然后计算相似度,把相似的商品推荐过去;那= =特么,为啥不直接用某一个商品的打分序列作为特征呢;哦因为稀疏,用户A看到过商品1,但是用户B可能没见过,导致计算相似度的时候相似度都非常低。
A n ∗ m ≈ U n ∗ k Σ k ∗ k V m ∗ k T A_{n*m} \approx U_{n*k}\Sigma_{k*k} V_{m*k}^T An∗m≈Un∗kΣk∗kVm∗kT ,如果 A A A表示的是 n n n个人对 m m m个物品的评分,而 U n ∗ k U_{n*k} Un∗k的列向量是一组基底中最重要的 k k k个基向量,可以理解为选了 k k k个重要的属性,每个属性都是由 n n n个人的打分构成的,比如说“萌”这个属性,可能这n个人只要是宅男就会给萌这个属性打高分。同理 V m ∗ k V_{m*k} Vm∗k也代表了 k k k个属性(和 U n ∗ k U_{n*k} Un∗k的属性不同,两者有映射关系),每个属性由m个物品的得分构成,比如说“傲娇”这个属性,傲娇女主漫会的得分都会很高。而 Σ \Sigma Σ代表的是用户打分构成的 k k k个属性和商品得分构成的 k k k个属性上的转化关系,进而可以说,只要把商品映射到 U n ∗ k U_{n*k} Un∗k的空间,即 V m ∗ k = A T U Σ − 1 V_{m*k}=A^TU\Sigma^{-1} Vm∗k=ATUΣ−1,就可以知道这 m m m个物品在用户打分构成的 k k k个属性下的特性了。
举个例子,
A
A
A是一个
n
∗
2
n*2
n∗2的矩阵,就是说我们手上只有两个物品,画出坐标轴,横轴是用户对物品1的喜好程度,纵轴是用户对物品2的喜好长度,坐标中每一个点都是一个用户对两者的喜好程度,并且假设这些点都处于一条直线上,我们现在要对列用PCA进行降成一维:首先求
A
T
A
A^TA
ATA的最大的特征向量
λ
1
=
[
3
/
5
,
4
/
5
]
T
\lambda_1=[3/5,4/5]^T
λ1=[3/5,4/5]T,然后把坐标中每一个点映射到
λ
1
\lambda_1
λ1代表的坐标轴上就行了。
PCA相当于说找到了一个新的物品3,把原始的用户对物品1和物品2的喜好程度变成了用户对物品3的喜好程度。物品3可以看做物品1和物品2的共性,那么反过来看,物品1和物品2可以看做物品3的体现,
λ
1
\lambda_1
λ1的意义是什么,举例来讲,用户有1分喜欢物品3,他就会有3/5分喜欢物品1,有4/5分喜欢物品2,也就是说物品1有3/5像物品3,物品2有4/5像物品4(给自己鼓个掌);如果把物品3称为属性3,例如物品1是玉子的手办,物品2是平泽唯的手办,那物品3就可以看做是萌(卖萌)。那么3/5就代表着,玉子的手办有3/5这么萌。喏,这就是为什么
V
V
V可以看做物品的属性矩阵了。
二刷SVD+PCA关系,进一步理解:假如说一个特征矩阵 A n ∗ m = { x 1 , . . . , x m } A_{n*m}=\{x_1,...,x_m\} An∗m={x1,...,xm}, x x x为列向量 n n n个特征 m m m个样本, A A T AA^T AAT的 k k k个特征值最大的特征向量构成的矩阵就是svd里的 U = { u 1 , . . . , u k } U=\{u_1,...,u_k\} U={u1,...,uk}, u u u为列向量,也是PCA里的投影矩阵(或者说低维空间的基向量),从PCA里我们可以知道,假如要对 x 1 x_1 x1降维,那么降维后的新样本就是 x ˉ 1 = { u 1 T x 1 , . . . , u k T x 1 } \bar{x}_1=\{u_1^Tx_1,...,u_k^Tx_1\} xˉ1={u1Tx1,...,ukTx1},我们来观察 x ˉ 1 \bar{x}_1 xˉ1的组成,假设 x 11 x_{11} x11为 x 1 x_1 x1的第一个特征的值, u k 1 u_{k1} uk1记为 u k u_k uk的第一个值,进一步可以发现, u k T x 1 u_k^Tx_1 ukTx1实际是一个求和项,其中有一项就是 x 11 u k 1 x_{11}u_{k1} x11uk1,这可以看成,单位大小的原始样本 x 1 x_1 x1的第一个特征,会给新样本 x ˉ \bar{x} xˉ的第 k k k个特征维度(或者说主题)做出 u k 1 u_{k1} uk1这么大小的贡献。因此 U U U矩阵的第一行,可以用来描述原始特征空间中第一个特征在 k k k个主题上的分布情况。进一步类比推荐就很好理解了。
LFM
推荐系统之LFM(Latent Factor Model)
推荐系统(2)—LFM(Latent Factor Model)模型
用已知的评分和梯度下降的方法来求取那两个矩阵,然后用求出来的那两个矩阵相乘去模拟原评分矩阵,然后根据评分来推荐
和SVD还是有区别的,LFM认为未评分的位置是空的,只用已知的去求两个矩阵;而SVD认为未打分就是0,然后在特征矩阵里求相似度
分解机
分解机(Factorization Machines)推荐算法原理
FM本质上是一种非线性拟合模型,之所以是说非线性,是指拟合的时候用到了高阶乘积,如
x
i
x
j
x
k
.
.
.
x_ix_jx_k...
xixjxk...,这个模型隐含了一个假设是,打分
Y
Y
Y和特征向量
X
X
X是相关的,所以这个模型做的无非就是一个线性拟合的高阶版本,并且引入非线性可以提高拟合能力。
文中的那个电影的例子是作者举的一个例子,如果用户
i
i
i根本没看过电影
j
j
j,那么
x
i
j
x_{ij}
xij实际上是一个缺失数据,贸然认为其为0会让
w
i
j
w_{ij}
wij为0。正是为了解决数据的稀疏性,才引入了
v
i
T
v
j
v_i^Tv_j
viTvj,通过矩阵分解,可以学习到
x
i
,
x
j
x_i,x_j
xi,xj的关系到底是什么样的
刷了一下论文对于拆解
v
i
,
v
j
v_i,v_j
vi,vj的解释,实际上是通过矩阵学习
v
i
,
v
j
v_i,v_j
vi,vj。
v
i
v_i
vi代表的是第
i
i
i个维度的内部特征,有点像SVD那样,把一个用户或者商品转换成dense向量,这个向量可能代表的是柱体或者兴趣什么的。然后用內积去计算两个特征的相关性。
v
i
v_i
vi的学习过程就是在类比,如果
v
i
和
v
j
v_i和v_j
vi和vj有相似的行为(比如两个用户的评分差不太多),那么
v
i
,
v
j
v_i,v_j
vi,vj就应该差不多,那么当计算用户
i
i
i和商品
a
a
a的关系的时候,用的就是
v
i
,
v
a
v_i,v_a
vi,va,这个
v
i
v_i
vi是从
v
j
v_j
vj那里学到的。直接使用
w
i
a
w_{ia}
wia,是没法让这个参数向用户
j
j
j去学习的。
FM的求解使用的梯度下降或者最小二乘,具体求解方法暂时没看
ALS求解过程就是,先对
w
0
w_0
w0进行最小二乘(即梯度为0),然后对
w
i
w_i
wi进行最小二乘,再对
v
i
j
v_{ij}
vij最小二乘,交替进行,因为这是个凸优化问题嘛,所以可以这样做
FM有啥用呢,有了这个模型的话(就是参数
Θ
=
{
w
0
,
w
i
,
v
j
}
\Theta=\{w_0,w_i,\bf{v}_j\}
Θ={w0,wi,vj}已知),我们就可以对新的样本进行预测了,比如上述博客中的图一,我们就可以预测Alice对于StarTreck的评分了。
FM算法(一):算法理论
FM对比SVM的优点,对于稀疏性的处理,SVM并没有把系数拆分开,所以没有出现过的特征pair的特征就是0了,SVM的模型使得不是支持向量的样本对模型没影响,这不是一个好的推荐系统应该有的属性,另外SVM只用一种参数,不能很好反应两个变量之间的关系
FM在做回归的时候很简单,分类的时候,论文里说可以用hinge loss和logit loss,然后输出的正负代表二分类的结果,但我估么着,由于这个输出
y
^
\hat{y}
y^并不在0~1之间,因此我觉得应该让输出在过一个
s
i
g
m
o
i
d
sigmoid
sigmoid,输出的结果作为
P
P
P,就像logistics regression一样;ranking的时候就是把两个样本的特征进行拼接,然后做二分类
推荐系统系列(二):FFM理论与实践
在FM算法里,计算两个特征的关系的时候,利用的是
<
V
i
,
V
j
>
x
i
x
j
<V_i,Vj>x_ix_j
<Vi,Vj>xixj,那这里就是说,当计算
x
i
x_i
xi与其他特征的相关性的时候,用的永远是
V
i
V_i
Vi,FFM就是基于这个进行优化,他们认为计算
x
i
x_i
xi与其他特征的相关性的时候,需要根据“其他特征”的不同,使用不同的向量
V
V
V,然后对“其他特征”分为多个类,每个类都是以“field”,比如性别男女构成的二维one-hot归属于一个field,那么一个特征对应的field就是f(i),那么对应的
V
V
V就是
V
i
f
(
j
)
V_{if(j)}
Vif(j),最后
V
V
V就是一个
[
n
,
f
,
k
]
[n,f,k]
[n,f,k]的向量,
n
n
n代表特征数量,
f
f
f代表field数量,
k
k
k代表相关性计算的向量长度。
FFM就是每个参数的每个取值使用两个隐向量做內积求出来的,在FM里,每个特征对应1个隐向量,FFM里,每个特征对应n个,n就是field的个数,用的时候要小心,比如特征
i
i
i的field为
f
i
f_i
fi,特征
j
j
j对应的field是
f
j
f_j
fj,那么两者的向量内积是
V
i
,
f
j
T
V
j
,
f
i
V_{i,f_j}^TV_{j,f_i}
Vi,fjTVj,fi,
V
i
,
f
j
V_{i,f_j}
Vi,fj代表的是特征
i
i
i对应特征
j
j
j的特征field的隐向量。
FFM里的假设是,由于FM里用到了两个特征的乘积,并且系数由两个向量的内积决定,那么每个特征的那个向量,在对应另一个不同特征的时候,也应该是不同的。因此有几个field,就有几个向量
[FwFM论文]Field-weighted Factorization Machines
文本主题模型
主题模型的最简单解释
每一篇文章不是仅仅拥有唯一的主题,而是融合了好多个主题,并且不同的主题占比不同,比如说某一篇脱口秀报道里,娱乐性质主题占比百分之40、体育性质主题占比百分10、剩下的都是新闻性质的主题。
而文章中每个词是怎样产生的呢,是根据这些主题生成的,并且在每个主题中,使用同一个词汇的概率是不同的。比如说百分百娱乐性质主题的文章使用“有趣”这个词的概率有0.5这么高,而是在百分百新闻性质主题的文章里,“有趣”这个词几乎不会被使用,好比说概率是0.00001。
所以,一篇文章有好多个词,每个词都有可能是从不同的主题里跑出来的,比如说在刚刚的脱口秀报道例子里,出现了一个“射门”,那么这个词代表的是“体育性质主题”,也有可能是从“新闻性质主题”里跑出来的,因为这两个主题都有可能会用到这个词。
文本主题模型之潜在语义索引(LSI)
汗,其实就是SVD的解释,看到这的时候我在想,如果表征一篇文档呢?用词袋模型可以,比如说一个m*n的矩阵,m是字典大小,n是文档个数,那么每一列都代表一个文档
LSA,pLSA原理及其代码实现
首先,看pLSA的概率图模型,当给定主题Z的时候,文档d与词w无关,因此有
p
(
w
∣
z
,
d
)
=
p
(
w
∣
z
)
p(w|z,d)=p(w|z)
p(w∣z,d)=p(w∣z),数学推导也行,复习一下贝叶斯网络的条件独立性推导,
p
(
w
∣
z
,
d
)
=
p
(
w
,
z
,
d
)
/
p
(
z
)
p
(
z
,
d
)
/
p
(
z
)
=
p
(
w
∣
z
)
∗
1
p(w|z,d)=\frac{p(w,z,d)/p(z)}{p(z,d)/p(z)}=p(w|z)*1
p(w∣z,d)=p(z,d)/p(z)p(w,z,d)/p(z)=p(w∣z)∗1
PLSA的思路:每个文档有都有一个主题分布,
P
(
z
i
∣
d
i
)
P(z_i|d_i)
P(zi∣di)代表的就是第
i
i
i个文档里包含
z
i
z_i
zi的概率,然后每个主题都对应了很多词,
P
(
w
i
∣
z
i
)
P(w_i|z_i)
P(wi∣zi)代表了主题
z
i
z_i
zi中选中词
w
i
w_i
wi的概率,俩一联合就能求出
P
(
w
i
∣
d
i
)
P(w_i|d_i)
P(wi∣di)代表的就是这篇文档中存在词语
w
i
w_i
wi的概率
EM算法中的E步,实际应该为 E = ∑ m ∑ n n ( d m , w n ) ∑ k p t ( z k ∣ d m , w n ) l o g p ( w n , z k , d m ) E=\sum_m \sum_n n(d_m,w_n) \sum_k p_t(z_k|d_m,w_n)log~p(w_n,z_k,d_m) E=∑m∑nn(dm,wn)∑kpt(zk∣dm,wn)log p(wn,zk,dm),但是由于 p t ( w n , z k , d m ) = p t ( w n ∣ z k ) p t ( z k ∣ d n ) p ( d n ) p_t(w_n,z_k,d_m)=p_t(w_n|z_k)p_t(z_k|d_n)p(d_n) pt(wn,zk,dm)=pt(wn∣zk)pt(zk∣dn)p(dn),并且 p ( w n ∣ z k ) , p ( z k ∣ d n ) p(w_n|z_k),p(z_k|d_n) p(wn∣zk),p(zk∣dn)是目标参数,
p t ( z k ∣ d m , w n ) p_t(z_k|d_m,w_n) pt(zk∣dm,wn)可以由当前的 p t ( w n ∣ z k ) , p t ( z k ∣ d n ) p_t(w_n|z_k),p_t(z_k|d_n) pt(wn∣zk),pt(zk∣dn)参数值导出, p ( d n ) p(d_n) p(dn)是已知变量对于最大化 p ( w n ∣ z k ) , p ( z k ∣ d n ) p(w_n|z_k),p(z_k|d_n) p(wn∣zk),p(zk∣dn)没影响,又在log里,所以可以扔了
但是我搞不清楚的是,对于完全数据的最大化那前面的 n ( d m , w n ) n(d_m,w_n) n(dm,wn)为啥没带 z k z_k zk
PLSA模型以及推荐中的应用
PLSA是一个词袋模型(BOW, Bag Of Word),它不考虑词在文档中出现的顺序,但可以把词在文档中的权重考虑进来。我们把这些概念平行推广到推荐系统中来,一个用户的购买记录看作是一个文档,购买的每一件商品看作是一个词,用户对商品的评分看作是词在文档中的权重。套用PLSA算法就可以得到用户在各个隐含主题上的向量表示
p
(
z
k
∣
d
i
)
p(z_k|d_i)
p(zk∣di),基于这个向量再去计算相似用户,接着套用协同过滤算法给用户推荐商品。
隐语义模型的核心思想是通过隐含特征联系用户兴趣的物品。先得到用户的兴趣分类,从兴趣中挑选可能喜欢的物品。协同过滤算法是基于统计的,而隐语义模型是基于自动聚类的,从用户群的意见出发,发现两个物品是否属于同一类,通过最终聚类的数量来区分不同粒度的分类。有了分类以后,再计算物品所属不同类的权重。当物品对于某一分类的权重较高(就是计算每个商品在各个主题上的权重),且与其他分类有区分度时,可以作为该分类下的典型物品,所以相当于聚类。当用户对典型物品有行为时,即可以确定该用户的兴趣分类。隐语义模型的具体算法有:PLSA、LDA、隐含类别模型、隐含主题模型、矩阵分解。
文本主题模型之非负矩阵分解(NMF)
汗,其实就是LFM
通俗理解LDA主题模型
这TM是我见过的最难的算法了。
解释一下,在LDA模型的假设是这样的,文章的主题分布不再确定,而是一个随机变量,同样的,每个词在同一个主题下的分布也不在确定,也是一个随机变量
在LDA模型里,第
i
i
i篇文章是这样产生的,1)首先从分布
α
\alpha
α里采样生成
θ
i
\theta_i
θi,把这个作为这篇文章的主题分布情况;2)然后基于这个主题分布情况
θ
i
\theta_i
θi,要为这篇文档生成第
j
j
j个词,但是先不急于直接生成这个词,而是缓一步,先去想这第
j
j
j个词应该属于什么主题,这个
z
i
,
j
z_{i,j}
zi,j就代表了,在整体主题分布为
θ
i
\theta_i
θi的前提下,第
j
j
j个词的主题的概率分布;3)然后从
β
\beta
β里采样,生成关于主题
z
i
,
j
z_{i,j}
zi,j的各个词语的使用分布,得到
ϕ
z
i
,
j
\phi_{z_{i,j}}
ϕzi,j;4)最后,采样生成词语。
先理解到这
基于图的推荐
PersonalRank:一种基于图的推荐算法
该算法的核心目的是衡量出对某一固定结点,其余结点的重要程度。从而得出推荐顺序。最终算出的某个商品的pr越大,说明这个商品与这个用户的相关性越高
节点c分得A
1
/
2
∗
α
1/2∗\alpha
1/2∗α,前面那个1/2是因为从A可以向外指两个路径,
α
\alpha
α是转移概率,最终c的得分应该是A的分数诚意
1
/
2
∗
α
1/2*\alpha
1/2∗α
论文阅读:Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba
排序学习
简介
NDCG通过评价一个排序中每个位置的文档的好坏,进而评价整个排序的好坏:
π
i
(
j
)
\pi_i(j)
πi(j)代表的是对于查询
q
i
q_i
qi,
d
j
d_j
dj处于的位置;
y
i
,
j
y_{i,j}
yi,j代表的是
q
i
q_i
qi与
d
j
d_j
dj的相关性,例如pctr;
G
(
j
)
D
(
π
i
(
j
)
)
G(j)D(\pi_i(j))
G(j)D(πi(j))表示的是,对于查询
i
i
i得到的排序,文档
j
j
j处于
π
i
(
j
)
\pi_i(j)
πi(j)时的得分:
G
(
j
)
G(j)
G(j)与query-doc pair相关性成正相关;
D
(
π
i
(
j
)
)
D(\pi_i(j))
D(πi(j))与所处位置负相关。
MAP也用于评价一个排序的好坏:MAP中
y
i
,
j
y_{i,j}
yi,j只能取{0,1},代表相关或者不相关,这个的意义在于保证
P
(
j
)
P(j)
P(j)在0到1之间,
P
(
j
)
P(j)
P(j)表示的是对于
q
i
q_i
qi的结果中,排在
d
j
d_j
dj之前的所有文档的排序准确性,比如现在
π
(
j
)
=
4
\pi(j)=4
π(j)=4,然后排序结果的前四位的得分分别是{1,0,1,1},于是
P
(
j
)
=
0.75
P(j)=0.75
P(j)=0.75,也就是说前面4个排对了百分之75,
P
P
P越高,说明前面的排序效果越好;AP代表着对于
q
i
q_i
qi得到的排序结果的前
n
i
n_i
ni位中,相关的文档的准确率的和除以相关的文档个数,所以就是平均准确率,这里隐含的意思是如果某个文档虽然相关,但是他前面的文档都不相关,那么这个文档的AP得分也不应该高。
risk function的解释:对于
q
i
q_i
qi得到的文档序列记为
D
i
=
{
d
i
1
,
d
i
2
,
.
.
.
,
d
i
n
}
T
D_i=\{d_{i1},d_{i2},...,d_{in}\}^T
Di={di1,di2,...,din}T,那么
(
q
i
,
D
i
)
(q_i,D_i)
(qi,Di)可以被映射为一个特征矩阵
x
i
=
{
x
i
1
,
x
i
2
,
.
.
.
,
x
i
n
}
T
\mathbf{x}_i=\{x_{i1},x_{i2},...,x_{in}\}^T
xi={xi1,xi2,...,xin}T,其中每个
x
i
j
x_{ij}
xij表示的是
q
i
q_i
qi与
d
i
j
d_{ij}
dij的联合特征向量(例如两个embedding拼接),如果
f
f
f是我们的模型,那么
f
(
x
i
k
)
f(x_{ik})
f(xik)代表着一个预测,也就是对
q
i
,
d
i
k
q_i,d_{ik}
qi,dik的相关性的预测,而
y
i
=
{
y
i
1
,
y
i
2
,
.
.
.
,
y
i
n
}
T
\mathbf{y}_i=\{y_{i1},y_{i2},...,y_{in}\}^T
yi={yi1,yi2,...,yin}T代表着
q
i
,
d
i
k
q_i,d_{ik}
qi,dik的真实相关性。于是对于
q
i
q_i
qi最终的输出是
F
(
x
i
)
=
{
f
(
x
i
1
)
,
f
(
x
i
2
)
,
.
.
.
,
f
(
x
i
n
)
)
}
T
\mathbf{F}(\mathbf{x}_i)=\{f(x_{i1}),f(x_{i2}),...,f(x_{in}))\}^T
F(xi)={f(xi1),f(xi2),...,f(xin))}T。进而对于
q
i
q_i
qi有了损失函数
L
′
(
F
(
x
i
)
,
y
i
)
L'(\mathbf{F}(\mathbf{x}_i),\mathbf{y}_i)
L′(F(xi),yi)
针对一个排序结果,我们有下面三种视角来评估某次排序结果的损失
pointwise loss:
L
′
(
F
(
x
i
)
,
y
i
)
=
∑
j
=
1
n
(
f
(
x
i
j
)
−
y
i
j
)
2
L'(\mathbf{F}(\mathbf{x}_i),\mathbf{y}_i)=\sum_{j=1}^n(f(x_{ij})-y_{ij})^2
L′(F(xi),yi)=∑j=1n(f(xij)−yij)2
pairwise loss:
L
′
(
F
(
x
i
)
,
y
i
)
=
∑
j
=
1
n
−
1
∑
k
=
j
+
1
n
ϕ
(
s
i
g
n
(
y
i
j
−
y
i
k
)
,
f
(
x
i
j
)
−
f
(
x
i
k
)
)
L'(\mathbf{F}(\mathbf{x}_i),\mathbf{y}_i) = \sum_{j=1}^{n-1}\sum_{k=j+1}^n \phi (sign(y_{ij}-y_{ik}),f(x_{ij})-f(x_{ik}))
L′(F(xi),yi)=∑j=1n−1∑k=j+1nϕ(sign(yij−yik),f(xij)−f(xik)),其中
ϕ
\phi
ϕ可以是hinge loss, exponential loss或者logistic loss等,共性就是
s
i
g
n
(
y
i
j
−
y
i
k
)
,
f
(
x
i
j
)
−
f
(
x
i
k
)
sign(y_{ij}-y_{ik}),f(x_{ij})-f(x_{ik})
sign(yij−yik),f(xij)−f(xik)同时大或者同时小,整体损失就小;是对排序的结果进行两两比较。所以本质上还是传统机器学习模型,只不过pairwise模型中带有“保证某两个文档的评分大小关系正确”的意味。相较于pointwise模型,某个预测相关性的模型的预测效果并不好,有可能一个实际相关性一般的文章
d
i
d_i
di会被预测为很相关,但是pairwise视角里说没关系,
d
i
d_i
di的预测结果只要比实际相关性更差的文档的预测结果高,就可以了。
可以看到这个pointwise和pairwise的损失没有将一次排序结果中文档之间的前后顺序作为损失的一部分,例如虽然模型预测的
f
(
x
i
j
)
f(x_ij)
f(xij)很准,但是这次排序结果完全可能是低相关性排在前面的,但实际上我们要的是相关性高的在前面。那么我们可以基于这两种损失,在输出排序结果之前,按
f
(
x
i
j
)
f(x_ij)
f(xij)对结果做排序输出出来。这种其实更常见。
listwise loss:
L
′
(
F
(
x
i
)
,
y
i
)
=
e
x
p
(
−
N
D
C
G
)
L'(\mathbf{F}(\mathbf{x}_i),\mathbf{y}_i)=exp(-NDCG)
L′(F(xi),yi)=exp(−NDCG),考虑了每个文档的位置
搜索评价指标——NDCG
NDCG
BM25相关度打分公式
Introduction to Learning to Rank
Pairwise
Learning to Rank算法介绍:RankSVM 和 IR SVM
Learning to Rank算法介绍:RankNet,LambdaRank,LambdaMart
RankNet中:预测相关性概率
P
i
j
P_{ij}
Pij,代表着
U
i
U_i
Ui比
U
j
U_j
Uj更相关的概率,两者相关性得分差距越大,
U
i
U_i
Ui的相关性更有可能比
U
j
U_j
Uj高
如果知道一个待排序文档的排列中相邻两个文档之间的排序概率,则通过推导可以算出每两个文档之间的排序概率
比如知道一个数值序列之间相邻两项的差,就能对整体做排序了。
ERR评分: R i R_i Ri指的是第 i i i个文档有多大可能是相关的,而 R r ∏ i = 1 r − 1 ( 1 − R i ) R_r\prod_{i=1}^{r-1}(1-R_i) Rr∏i=1r−1(1−Ri)就代表了钱 r − 1 r-1 r−1的文档不相关,但第 r r r个文档相关的概率,除以一个 r r r表示,排序越远端的文档(r大),对整体的ERR影响越小
机器学习排序算法:RankNet to LambdaRank to LambdaMART
δ
C
\delta C
δC表示的其实是在每一次梯度下降之后,
C
C
C的变化量,这个变化量应该是负数,从而使得损失下降。
Ranknet用的是神经网络,每次输入一个文档对,但两个文档用的是同一个网络,如
s
i
=
f
(
x
i
)
,
s
j
=
f
(
x
j
)
s_i=f(x_i),s_j=f(x_j)
si=f(xi),sj=f(xj),然后根据doc pair自己定义了一个损失,这个损失类似于cross_entropy,然后用每个doc pair的损失对参数求导,对导数进行因式分解,拆出来了个
λ
\lambda
λ(文章中对于
λ
i
\lambda_i
λi的定义的第二项应该是
λ
j
i
\lambda_{ji}
λji),把这个
λ
i
j
\lambda_{ij}
λij可以看做力,他表明了梯度的大小,梯度越大说明这个方向会导致C下降更多。
而因为RankNet是纯Pairwise的,按文中的例子来说,通过梯度下降算法两个文档整体的损失确实下降了,但是并没有考虑到这两个文档在整体排序结果的位置,而实际上我们只是希望有关的文档向前移动,于是lambdaRank把
λ
\lambda
λ进行了一点修改,纯经验的修改,加了个
N
D
C
G
NDCG
NDCG的差,通过这个差影响梯度,接下来一样,做梯度
深度学习
FM
CTR预估
计算广告CTR预估的特征处理方法
计算广告CTR预估系列(六)–阿里Mixed Logistic Regression
Behavior Sequence Transformer for E-commerce Recommendation in Alibaba简析
FiBiNET:结合特征重要性和双线性特征交互进行CTR预估
一种能自动抽取特征与特征interaction重要性的CTR模型
你真的懂点击率(CTR)建模吗?
简化2 举个例子 上一时刻的我 和这一时刻的我 不是同一个我
CTR校准
面向稀有事件的 Logistic Regression 模型校准
CTR预估值校正 - xiaobao的文章 - 知乎
CTR预估中负采样修正
CVR
多任务
详解谷歌之多任务学习模型MMoE(KDD 2018)
推荐系统遇上深度学习(九十二)-[腾讯]RecSys2020最佳长论文-多任务学习模型PLE
多目标学习在推荐系统的应用(MMOE/ESMM/PLE)
联合训练(Joint Training) 这里 实际上就是将损失换为对数似然的相反数,因为降低损失,实际上也就是在极大似然
数据
Introducing LETOR 4.0 Datasets
LETOR: Learning to Rank for Information Retrieval
优化
FTRL
提到了投影,比如投影集合C是约束空间(例如可能是1范数的约束空间),所谓1范数约束空间,我理解就是,例如 w 1 ≤ 2 w_1\le2 w1≤2这样
FTRL算法
这其实就是一个在线学习过程中的参数学习算法,解决的是在线学习中,数据是一个一个来的或者说一些一些来的,数据量比较小的时候,如何用这个比较小的数据量来实时地更新参数。第一篇博客里写到说梯度都是按样本一个一个来计算的,但是我觉得,也可以小批次小批次的来计算
普通的OGD是先求梯度,然后对这个梯度进行投影,OGD仍然不够稳定,所以就提出了FOBOS和FTRL,稳定、保证正则化、并且根据伪代码可以看出,FTRL可以保证稀疏性
做截断就是,当更新了k次以后,下一次如果某个参数仍然不满足要求,就对他进行手动的处理
理解FOBOS算法对后续理解很有帮助,简单理解就是先求一个梯度,然后基于这个梯度更新一次参数,然后不直接用这个参数,而是用这个参数再去解一个优化问题,用这个优化问题的输出作为下一次的模型参数
从最后的伪代码可以看出,梯度更新是按特征轴进行的,比如10个特征,先更新特征1对应的参数w_1,以此类推
参数更新不要偏离历史太远,可以看到FTRL的第二项最小的时候就是均值
understanding-FTRL-algorithm