本文对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
如图所示,作者将检索+重排序分为了三个阶段:H0H_{0}H0、H1H_{1}H1 和 H2H_{2}H2 。
-
H0H_{0}H0 :“Bag of Words” BM25
阶段 H0H_{0}H0 使用 BM25 进行精确的词条匹配,接收查询 qqq ,输出 top-k0k_{0}k0 个候选 R0R_{0}R0
-
H1H_{1}H1 :monoBERT
monoBERT 就是最原始的BERT用法,将查询与段落按照BERT的方式拼接,计算他们之间的相关性分数,论文将这种方式称为 Pointwise re-ranker。阶段 H1H_{1}H1 基于 monoBERT 生成的相关性分数,输出 top-k1k_{1}k1 个候选 R1R_{1}R1
-
H2H_{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 将查询 qqq,候选段落 did_{i}di 和候选段落 djd_{j}dj 拼接送入BERT,取[CLS]输出向量计算概率,因为有 k1k_{1}k1 个候选段落,所以要计算 k1∗(k1−1)k_{1} * (k_{1}-1)k1∗(k1−1) 次概率。 训练时采用以下损失函数:
Lduo =−∑i∈Jpos ,j∈Jneg log(pi,j)−∑i∈Jneg ,j∈Jposlog(1−pi,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)
根据损失函数来看,建模的任务应该是最大化段落 did_{i}di 与查询 qqq 的相关分数大于段落 djd_{j}dj 与查询 qqq 的相关分数的概率,即 did_{i}di 优于 djd_{j}dj 的概率。在推理时,聚合成对分数 pi,jp_{i,j}pi,j,以便每个文档都收到一个分数 sis_{i}si。论文给出了五种不同的聚合方法(SUM、BINARY、MIN、MAX 和 SAMPLE):
SUM :si=∑j∈Jipi,j,BINARY :si=∑j∈Ji1pi,j>0.5,MIN :si=minj∈Jipi,j,MAX :si=maxj∈Jipi,j,SAMPLE :si=∑j∈Ji(m)pi,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,
其中 Ji&#61;{0≤j<∣R1∣,j≠i}J_{i}&#61;\left\{0 \leq j<\left|R_{1}\right|, j \neq i\right\}Ji&#61;{0≤j<∣R1∣,j&#61;i}&#xff0c;mmm 是从集合 JiJ_{i}Ji 中不放回抽取的样本数。最终的候选列表 R2R_{2}R2 根据分数 sis_{i}si 重新排列 R1R_{1}R1 中的候选得到。
3. 实验结果分析
等等&#xff0c;BM25 &#43; monoBERT &#43; duoBERT &#43; TCP 里面的 TCP 呢&#xff1f;这是个什么东西&#xff1f;协议&#xff1f;其实 TCP 是 Target Corpus Pre-training 的缩写&#xff0c;即在目标语料库 MS MARCO 进一步预训练的意思&#xff0c;就这么简单。
上图显示了在 MS MARCO 数据集上的实验结果&#xff0c;Anserini 实现的 BM25 要比微软的效果好两个点&#xff0c;造成差异的原因有以下几种&#xff1a; tokenization、停用词选择、词干提取和参数调整等。这种多阶段的方法还是比较费时的&#xff0c;毕竟要接连过两个交互式BERT&#xff0c;duoBERT 还要计算 k1∗(k1−1)k_{1} * (k_{1}-1)k1∗(k1−1) 次&#xff0c;很大程度上增加了检索延迟&#xff0c;但是将 Pairwise 应用于 BERT 上这一点还是很有借鉴性的&#xff0c;这篇论文也在一定程度上为后来的榜首 DR-BERT &#xff08;美团提出的&#xff09;提供了思路。