????本文对MS MARCO Passage Ranking 榜单的 BM25 + monoBERT + duoBERT + TCP 进行解读,原文地址请点击此处。
1. 背景介绍
????这个模型在MS MARCO上的最好成绩是0.38,和目前的SOTA 0.45有一定差距,但由于作者 Rodrigo Nogueira 等人在此前的一篇论文《Passage Re-ranking with BERT》中首次将BERT用于检索中的重排序任务,是将BERT作为重排序器的鼻祖,因此他的 BM25 + monoBERT + duoBERT + TCP 还是要解读一遍的。在《Passage Re-ranking with BERT》中,Rodrigo Nogueira 给出了BERT作为重排序器(查询与段落拼接,当成BERT句子对分类任务来做)的 Baseline 结果,如下图, ????BM25 + monoBERT + duoBERT + TCP 这个模型探索了BERT作为重排序器的更多玩法,比朴素地使用BERT的效果提升约3个点,我们在后面介绍。
2. Multi-Stage Ranking with BERT
????如图所示,作者将检索+重排序分为了三个阶段:
H
0
H_{0}
H0?、
H
1
H_{1}
H1? 和
H
2
H_{2}
H2? 。
-
H
0
H_{0}
H0? :“Bag of Words” BM25 ????阶段
H
0
H_{0}
H0? 使用 BM25 进行精确的词条匹配,接收查询
q
q
q ,输出 top-
k
0
k_{0}
k0? 个候选
R
0
R_{0}
R0? -
H
1
H_{1}
H1? :monoBERT ????monoBERT 就是最原始的BERT用法,将查询与段落按照BERT的方式拼接,计算他们之间的相关性分数,论文将这种方式称为 Pointwise re-ranker。阶段
H
1
H_{1}
H1? 基于 monoBERT 生成的相关性分数,输出 top-
k
1
k_{1}
k1? 个候选
R
1
R_{1}
R1? -
H
2
H_{2}
H2? :duoBERT ????这个 duoBERT 比较新鲜,采用了 Pairwise 的方式训练 re-ranker。注意到这里出现的 Pairwise 和 前面的 Pointwise,这两其实是之前机器学习排序模型(Learning to Rank)中的概念:
????根据学习目标的不同,排序模型大体可以分为Pointwise、Pairwise和Listwise。这三种方法的示意图如上图所示。其中,Pointwise方法直接预测每个文档和问题的相关分数,尽管这种方法很容易实现,但对于排序来说,更重要的是学到不同文档之间的排序关系。基于这种思想,Pairwise方法将排序问题转换为对两两文档的比较。具体来讲,给定一个问题,每个文档都会和其他的文档两两比较,判断该文档是否优于其他文档。这样的话,模型就学习到了不同文档之间的相对关系。
????然而,Pairwise的排序任务存在两个问题:第一,这种方法优化两两文档的比较而非更多文档的排序,跟文档排序的目标不同;第二,随机从文档中抽取Pair容易造成训练数据偏置的问题。为了弥补这些问题,Listwise方法将Pairwsie的思路加以延伸,直接学习排序之间的相互关系。根据使用的损失函数形式,研究人员提出了多种不同的Listwise模型。比如,ListNet直接使用每个文档的top-1概率分布作为排序列表,并使用交叉熵损失来优化。ListMLE使用最大似然来优化。SoftRank直接使用NDCG这种排序的度量指标来进行优化。大多数研究表明,相比于Pointwise和Pairwise方法,Listwise的学习方式能够产生更好的排序结果。(以上两段引用自这里)
????回到本文,duoBERT 将查询
q
q
q,候选段落
d
i
d_{i}
di? 和候选段落
d
j
d_{j}
dj? 拼接送入BERT,取[CLS]输出向量计算概率,因为有
k
1
k_{1}
k1? 个候选段落,所以要计算
k
1
?
(
k
1
?
1
)
k_{1} * (k_{1}-1)
k1??(k1??1) 次概率。 训练时采用以下损失函数:
L
duo?
=
?
∑
i
∈
J
pos?
,
j
∈
J
neg?
log
?
(
p
i
,
j
)
?
∑
i
∈
J
neg?
,
j
∈
J
p
o
s
log
?
(
1
?
p
i
,
j
)
\begin{aligned} L_{\text {duo }}=-& \sum_{i \in J_{\text {pos }}, j \in J_{\text {neg }}} \log \left(p_{i, j}\right) \\ &-\sum_{i \in J_{\text {neg }}, j \in J_{\mathrm{pos}}} \log \left(1-p_{i, j}\right) \end{aligned}
Lduo??=??i∈Jpos??,j∈Jneg??∑?log(pi,j?)?i∈Jneg??,j∈Jpos?∑?log(1?pi,j?)?
????根据损失函数来看,建模的任务应该是最大化段落
d
i
d_{i}
di? 与查询
q
q
q 的相关分数大于段落
d
j
d_{j}
dj? 与查询
q
q
q 的相关分数的概率,即
d
i
d_{i}
di? 优于
d
j
d_{j}
dj? 的概率。在推理时,聚合成对分数
p
i
,
j
p_{i,j}
pi,j?,以便每个文档都收到一个分数
s
i
s_{i}
si?。论文给出了五种不同的聚合方法(SUM、BINARY、MIN、MAX 和 SAMPLE):
?SUM?
:
s
i
=
∑
j
∈
J
i
p
i
,
j
,
?BINARY?
:
s
i
=
∑
j
∈
J
i
1
p
i
,
j
>
0.5
,
?MIN?
:
s
i
=
min
?
j
∈
J
i
p
i
,
j
,
?MAX?
:
s
i
=
max
?
j
∈
J
i
p
i
,
j
,
?SAMPLE?
:
s
i
=
∑
j
∈
J
i
(
m
)
p
i
,
j
,
\begin{aligned} \text { SUM }: s_{i} &=\sum_{j \in J_{i}} p_{i, j}, \\ \text { BINARY }: s_{i}&= \sum_{j \in J_{i}} \mathbb{1}_{p_{i, j}>0.5}, \\ \text { MIN }: s_{i} &=\min _{j \in J_{i}} p_{i, j}, \\ \text { MAX }: s_{i} &=\max _{j \in J_{i}} p_{i, j}, \\ \text { SAMPLE }: s_{i} &=\sum_{j \in J_{i}(m)} p_{i, j}, \end{aligned}
?SUM?:si??BINARY?:si??MIN?:si??MAX?:si??SAMPLE?:si??=j∈Ji?∑?pi,j?,=j∈Ji?∑?1pi,j?>0.5?,=j∈Ji?min?pi,j?,=j∈Ji?max?pi,j?,=j∈Ji?(m)∑?pi,j?,?
????其中
J
i
=
{
0
≤
j
<
∣
R
1
∣
,
j
≠
i
}
J_{i}=\left\{0 \leq j<\left|R_{1}\right|, j \neq i\right\}
Ji?={0≤j<∣R1?∣,j?=i},
m
m
m 是从集合
J
i
J_{i}
Ji? 中不放回抽取的样本数。最终的候选列表
R
2
R_{2}
R2? 根据分数
s
i
s_{i}
si? 重新排列
R
1
R_{1}
R1? 中的候选得到。
3. 实验结果分析
????等等,BM25 + monoBERT + duoBERT + TCP 里面的 TCP 呢?这是个什么东西?协议?其实 TCP 是 Target Corpus Pre-training 的缩写,即在目标语料库 MS MARCO 进一步预训练的意思,就这么简单。 ????上图显示了在 MS MARCO 数据集上的实验结果,Anserini 实现的 BM25 要比微软的效果好两个点,造成差异的原因有以下几种: tokenization、停用词选择、词干提取和参数调整等。这种多阶段的方法还是比较费时的,毕竟要接连过两个交互式BERT,duoBERT 还要计算
k
1
?
(
k
1
?
1
)
k_{1} * (k_{1}-1)
k1??(k1??1) 次,很大程度上增加了检索延迟,但是将 Pairwise 应用于 BERT 上这一点还是很有借鉴性的,这篇论文也在一定程度上为后来的榜首 DR-BERT (美团提出的)提供了思路。
|