本文对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∈Jiminpi,j,=j∈Jimaxpi,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 (美团提出的)提供了思路。