PfastreXML阅读笔记
《Extreme Multi-label loss functions for recommendation, tagging, ranking & Other missing label applications》阅读笔记
本文的核心:设计了Propensity-score的XC损失函数。也就是搞出了PSP,PSDCG,PSnDCG等指标。
动机
-
relevant labels.
精确预测相关的标签为1比预测不相关的标签为0更重要。而传统的HammingLoss赋予相关标签和不相关标签相同的惩罚。 -
missing labels.
在XC问题中,这是必然存在的现象,由于标签数很多,annotator不可能through所有的标签。
missing labels并不是指不知道这个标签的值,而是这个标签应该为1,但在数据集中却为0,也就是被annotator遗漏的标签。
传统Hamming损失会惩罚对missing label的预测。因为实际上missing labels的值和irrelevant labels都是0.
PS. missing labels和irrelevant labels在标签上是无法区分的。而在传统的multi-label问题中,一种场景是missing labels是未知的,学习者并不知道missing labels应该为0还是1. 在这种情况下,missing labels通常被赋予一个不同的值,比如-1。 -
Tailed labels.
标签在数据集中出现的次数服从幂律分布。i.e., 尽管Wikipedia和Amazon的数据量非常大,但是有非常多的标签occur不到5次。
符号:
Key notations | Meaning |
---|---|
y ∗ \mathbf{y}^* y∗ | 完全的真实标签(省略了样本下标i),不可获得 |
y \mathbf{y} y | 观测到的真实标签 |
y ^ \hat{\mathbf{y}} y^ | 估计的标签 |
p l p_l pl | 标签 l l l的倾向性(省略了样本下标i) |
Propensity-score losses
本文说的是损失,其实就指标而言,它们是越大越好。
重点是设计了以下几种损失
−
L
(
y
,
y
^
)
-\mathcal{L}(\mathbf{y},\hat{\mathbf{y}})
−L(y,y^):
(
Propensity-score Precision
)
PSP
@
k
:
=
1
k
∑
l
∈
rank
k
(
y
^
)
y
l
p
l
(\text{Propensity-score Precision}) \text{ PSP}@k := \frac{1}{k} \sum_{l\in \text{rank}_k(\hat{\mathbf{y}})} \frac{\mathbf{y}_l}{p_l}
(Propensity-score Precision) PSP@k:=k1l∈rankk(y^)∑plyl
PSDCG
@
k
:
=
∑
l
∈
rank
k
(
y
^
)
y
l
p
l
log
(
l
+
1
)
\text{PSDCG}@k := \sum_{l \in \text{rank}_k(\hat{\mathbf{y}})} \frac{\mathbf{y}_l}{p_l\log(l+1)}
PSDCG@k:=l∈rankk(y^)∑pllog(l+1)yl
PSnDCG
@
k
:
=
PSDCG@
k
∑
l
=
1
k
1
log
(
l
+
1
)
\text{PSnDCG}@k := \frac{\text{PSDCG@$k$}}{\sum_{l=1}^{k} \frac{1}{\log(l+1)}}
PSnDCG@k:=∑l=1klog(l+1)1PSDCG@k
另外也拓展了Propensity-score的 Recall @ k \text{Recall}@k Recall@k, MRR \text{MRR} MRR, ADG \text{ADG} ADG, F β score F_\beta \text{ score} Fβ score,但这些损失依赖 y ∗ \mathbf{y}^* y∗,本文没有重点讨论它们。
令 L ∗ ( y ∗ , y ^ ) \mathcal{L}^*(\mathbf{y}^*, \hat{\mathbf{y}}) L∗(y∗,y^)为真实的损失,但是它根本就没办法计算,因为 y ∗ \mathbf{y}^* y∗不可获得。
所以本文提出了它的无偏估计
−
L
(
y
,
y
^
)
-\mathcal{L}(\mathbf{y},\hat{\mathbf{y}})
−L(y,y^)使得
E
y
[
L
(
y
,
y
^
)
]
=
E
y
∗
[
L
∗
(
y
∗
,
y
^
)
]
\mathbb{E}_\mathbf{y}[\mathcal{L}(\mathbf{y},\hat{\mathbf{y}})] = \mathbb{E}_\mathbf{y^*}[\mathcal{L}^*(\mathbf{y}^*,\hat{\mathbf{y}})]
Ey[L(y,y^)]=Ey∗[L∗(y∗,y^)]
只看懂了这一个定理。本文还提出了其他的定理以支持那些依赖
y
∗
\mathbf{y}^*
y∗的损失,根本看不懂。
p l p_l pl是啥?
对于一个样本
x
i
\mathbf{x}_i
xi,它在标签
l
l
l上的倾向性被定义为:
p
i
l
≡
P
(
y
i
l
=
1
∣
y
i
l
∗
=
1
)
p_{il} \equiv P(y_{il} = 1 | y^*_{il} = 1)
pil≡P(yil=1∣yil∗=1)
从形式上看,它是针对样本
x
i
\mathbf{x}_i
xi在相关的标签
l
l
l上被观测到的边缘概率。
也就是说,
x
i
\mathbf{x}_i
xi和
l
l
l相关,但它不一定被观测到。
比如:假设
x
i
\mathbf{x}_i
xi与20个标签相关,但annotator只标注了其中5个,那么
p
i
l
=
0.25
p_{il} = 0.25
pil=0.25(这句话是错误的,理解偏差)。
另外本文假设没有错误标注,也就是
P
(
y
i
l
=
1
∣
y
i
l
∗
=
0
)
=
0
P(y_{il} = 1 | y^*_{il} = 0) = 0
P(yil=1∣yil∗=0)=0
意思就是说,标签的噪声只来源于遗漏,而不存在错误(one sided)。
为了表示方便,本文用
p
l
p_l
pl表示
p
i
l
p_{il}
pil。
注意到,
p
l
p_l
pl在损失中作为分母的一部分。
也就是说,如果
p
l
p_l
pl越大,就表示
l
l
l的重要性越低,因为
p
l
p_l
pl越大表示标签
l
l
l越不容易被遗漏。
而本文偏爱那些更容易被遗漏的标签,赋予其更高的重要性。
所以我们在https://blog.csdn.net/wuyanxue/article/details/126805190?spm=1001.2014.3001.5502这篇文章里面的最后提到:Propensity-score强调在tail labels上的表现,而对预测head labels提供微弱的奖励。
p l p_l pl能不能精确得到?显然不能。因此只能做出估计。
估计 p l p_l pl
本文估计
p
l
p_l
pl的方法比较原始:
p
l
=
N
l
N
l
∗
p_l = \frac{N_l}{N_l^*}
pl=Nl∗Nl
其中
N
l
N_l
Nl是标签
l
l
l在观测数据集中出现的次数。而
N
l
∗
N_l^*
Nl∗是
l
l
l在真实数据集中应该出现的次数。
N
l
∗
N_l^*
Nl∗也是通过估计得到。
针对Wikipedia数据,作者假设一个标签如果是相关的,那么其所有祖先标签也都是相关的(Wikipedia的标签应该是具有层次结构)。
所以,令
⇓
(
l
)
\Downarrow(l)
⇓(l)是
l
l
l的所有descendant标签,本文估计
N
l
∗
=
N
l
+
∑
l
′
∈
⇓
(
l
)
N
l
′
N_l^* = N_l + \sum_{l' \in \Downarrow(l)}N_{l'}
Nl∗=Nl+∑l′∈⇓(l)Nl′ iff
∣
⇓
(
l
)
∣
>
4
|\Downarrow(l)| > 4
∣⇓(l)∣>4.
作者绘制出了
p
l
p_l
pl和
log
(
N
l
)
\log(N_l)
log(Nl)关系的散点图,发现散点图符合sigmoidal趋势。因此给出了
p
l
p_l
pl的一般化估计公式(A=0.5,B=0.4):
p
l
≡
P
(
y
l
=
1
∣
y
l
∗
=
1
)
=
1
1
+
C
exp
(
−
A
log
(
N
l
+
B
)
)
p_l \equiv P(y_l = 1 | y_l^* = 1) = \frac{1}{1 + C\exp(-A\log(N_l+B))}
pl≡P(yl=1∣yl∗=1)=1+Cexp(−Alog(Nl+B))1
其中
C
=
(
log
N
−
1
)
(
B
+
1
)
A
C = (\log N - 1)(B+1)^A
C=(logN−1)(B+1)A。
不满足
∣
⇓
(
↑
(
l
)
)
∣
>
4
|\Downarrow(\uparrow(l))| > 4
∣⇓(↑(l))∣>4这个条件的
p
l
p_l
pl通过上式进行估计。
针对Amazon数据,也是上述公式,不过参数 A , B A,B A,B有所不同。
优化目标
和FastXML类似,不过本文的核心优化目标是直接优化
PSnDCG
@
k
\text{PSnDCG}@k
PSnDCG@k:
min
∣
∣
w
∣
∣
1
+
∑
i
C
δ
(
δ
i
)
log
(
1
+
exp
(
−
δ
i
w
T
x
i
)
)
−
C
r
∑
i
1
2
(
1
+
δ
i
)
L
PSnDCG@
L
(
r
+
,
y
i
)
−
C
r
∑
i
1
2
(
1
−
δ
i
)
L
PSnDCG@
L
(
r
−
,
y
i
)
\begin{aligned} \min ||\mathbf{w}||_1 & + \sum_i C_\delta(\delta_i) \log(1 + \exp(-\delta_i\mathbf{w}^\text{T}\mathbf{x}_i)) \\ & - C_r \sum_i \frac{1}{2}(1 + \delta_i) \mathcal{L}_{\text{PSnDCG@}L}(\mathbf{r}^+, \mathbf{y}_i) \\ & - C_r \sum_i \frac{1}{2}(1 - \delta_i) \mathcal{L}_{\text{PSnDCG@}L}(\mathbf{r}^-, \mathbf{y}_i) \end{aligned}
min∣∣w∣∣1+i∑Cδ(δi)log(1+exp(−δiwTxi))−Cri∑21(1+δi)LPSnDCG@L(r+,yi)−Cri∑21(1−δi)LPSnDCG@L(r−,yi)
令 P pf ( y ∗ ∣ x ) = ∑ t = 1 T P t leaf ( x ) T \mathbf{P}_{\text{pf}}(\mathbf{y}^*|\mathbf{x}) = \frac{\sum_{t=1}^T \mathbf{P}_t^{\text{leaf}}(\mathbf{x})}{T} Ppf(y∗∣x)=T∑t=1TPtleaf(x)为树型分类器得出的结果,其中 P t leaf ( x ) \mathbf{P}_t^{\text{leaf}}(\mathbf{x}) Ptleaf(x)为第 t t t颗树得到的样本 x \mathbf{x} x的预测结果,和FastXML类似,就是第 t t t颗树的top-k score(这里有点小问题,why top-k,FastXML也是top-k)。
不过本文认为,直接利用FastXML中的树型分类器会导致仍然以低概率预测tailed labels。因为内部节点的分区错误不成比例地减少了tailed labels在叶子节点分布中的支持(看不懂)。
不过猜测是由于tailed labels太少了,在叶子节点中分布也就太少而且散。一旦一个tailed labels分区错了,其预测的准确性就会受到比较大的影响。
为了对tailed labels做出更准确的预测,本文还训练了一个针对tail label的分类器 P ( y l ∗ = 1 ∣ x ) P(y_l^* = 1 | \mathbf{x}) P(yl∗=1∣x)。
最终得到的预测结果是树型分类器与tail label分类器的加权对数平均:
s
l
=
α
log
P
pf
(
y
l
∗
∣
x
)
+
(
1
−
α
)
log
P
(
y
l
∗
=
1
∣
x
)
s_l = \alpha \log P_{\text{pf}}(y_l^*|\mathbf{x}) + (1 - \alpha)\log P(y_l^* = 1 | \mathbf{x})
sl=αlogPpf(yl∗∣x)+(1−α)logP(yl∗=1∣x)
s
l
s_l
sl就代表标签
l
l
l的最终得分(越大越好)。
Tail label classifier
本文将tail label classifier设定为一个超球面分类器(不懂,但还是写下来吧):
P
(
y
i
l
∗
∣
x
i
)
=
1
/
(
1
+
v
i
l
2
y
i
l
∗
−
1
)
P(y_{il}^*|\mathbf{x}_i) = 1 / (1 + v_{il}^{2y_{il}^*-1})
P(yil∗∣xi)=1/(1+vil2yil∗−1)
其中
v
i
l
=
exp
(
γ
2
∣
∣
x
i
−
μ
l
∣
∣
2
2
)
v_{il} = \exp(\frac{\gamma}{2}||\mathbf{x}_i - \pmb{\mu}_l||_2^2)
vil=exp(2γ∣∣xi−μμl∣∣22)。
利用MLE独立地求解每个标签的
μ
l
∗
\pmb{\mu}_l^*
μμl∗, prod --> log sum。
本文原本打算采用SGD进行迭代,但发现代价昂贵。所以采用了一种近似策略求解
μ
l
∗
\pmb{\mu}_l^*
μμl∗,同时保证了其稀疏性。
总结
本文提出了倾向性得分的损失,也是比较流行的评价指标。
倾向性得分表征标签的稀缺性,同时本文认为比较稀缺的标签的重要性应该更高,因此标签的倾向得分是作为分母融入到nDCG中的。
另外本文也提出了一个分类器用于处理tail labels,这基于作者的一个观点:FastXML的树状分类器还是容易在tail labels上赋予更低的概率。
该分类器与树状分类器的结果加权平均,就得到了样本的最终分类结果。
优点:利用倾向得分对missing label进行建模,似乎符合直觉。