分享

稠密检索之Pipeline

 520jefferson 2023-02-07 发布于北京

提纲
1 简介
2 Pipeline
3 Training
4 总结

参考文献

1 简介

    对于一个完备的检索系统,通常是由多个不同模块一同组成的,包括第一阶段的检索召回模块以及后续的重排模块,在这里我们会介绍下检索系统整体的pipeline,以及几种不同pipeline优化的方式。

2 Pipeline

检索系统整个pipeline主要分为以下两个部分:

        a) Retriever,高效地从资源库中召回若干候选文档。这个阶段对时耗要求严苛,不适合用上太过复杂的模型,通常采用bi-encoder模型结构。

        b) Reranker,对于retriever阶段返回的候选文档进行重新排序。需要更加强大的模型来保证排序的准确性,通常采用cross-encoder的结构,具体语言模型会采用纯encoder或者encoder-decoder这种具备更强大文本理解能力的模型结构。通常reranker会分为多个不断进行的模块,不断精简候选列表并重新排序,直到最后结果。

Multi-stage ranking

    合理的多阶段排序结构是为构建一个更加有效的检索流水线,在这样一个流水线中,第一阶段通常利用BM25等算法先从资源库中召回K1个跟query最相关的候选文本。然后第二阶段利用类似monoBERT(pointwise)等模型计算出K1个候选文本doc跟query之间的相似度,保留其中得分最高的K2个候选文本。第三阶段利用duoBERT(pairwise)计算在给定query条件下,将这个K2个候选文本两两组合,计算彼此之间的优先级,也就是将query跟doc1,doc2通过分隔符一起作为Bert的输入,计算对应的得分,这里的得分表示doc1比起doc2,与query更加相关的程度,汇总这K2*(K2-1)个组合的结果,就可以对这个K2个候选文本重新进行排序,再将排序结果作为最终检索结果输出。

图片

图1: multi-stage ranking框架

排序模型训练时主要有以下三种类型的损失函数,
    a) Pointwise: 仅考虑单个query和document的关系,会把将问题转化为多分类或回归问题。
    b) Pairwise: 是对每一对数据样本做一个比较,当一个文档比另一个文档相关排序更靠前的话,就是正例,否则便是负例。

    c) Listwise:直接针对一系列文档的排序结果进行优化。

3 Training

    稠密检索整个流水线是有一系列不同模块堆叠组合的,包括检索模块retrieval以及一个或者多个reranker模型,为此需要设计合理的算法去优化整个流水线。

Separate Training

    最直接的方式就是对于流水线上的各个模块分别优化,但是这种优化方式没有考虑到各个模块之间的联系以及信息交互,所以常常会得到一个并非整体最优的结果。例如对于整个流水线而言,reranker模型依赖于retriever的召回结果,当retriever模块更新时,召回结果就会有所变化,新的负样本对于reranker模型可能就会难以识别,而不考虑retriever的召回结果去优化reranker模型就会导致reranker模型无法很好的适配retriever的召回结果。另外,后续阶段的reranker模型也需要依赖于前面阶段reranker的排序结果等等。

Adaptive training

    基于separate的一些弊端,一种改进版的优化方式就是让retriever跟reranker去适配彼此,让这两者在优化时进行充分信息交互,从而获得一个整体更优的流水线。例如将retrieverl召回的结果作为reranker训练的负样本,或者迭代训练retrieval跟reranker,固定其中一个模块,优化另一个模块,然后交互角色,反复进行。

Joint training

    一般情况下,retriever跟排序模型reranker是通过不同的方式去优化的,所以很难同时优化。Retriever通常是去最大化正样本相对于负样本的概率,根据候选正样本跟候选负样本的整体排名去优化,采用的是listwise优化方式,而reranker多采用的是pointwise或者pairwise的优化方式。于是,有人提出用统一的listwise任务同时优化bi-encoder的retriever跟cross-encoder的reranker,对于这两个模块的相关性预测都通过listwise分布建模,通过一种动态蒸馏的方式来进行retrieval跟reranker之间的信息交互。

4 总结

    尽管不容易同时优化整个稠密检索的流水线,但是相对于稀疏检索,稠密检索更容易针对特定下游任务进行优化。目前稠密检索也被广泛应用在knowledge retriever跟task solver两种不同类型任务中。在前面篇章提及的一些知识增强场景中,也有适应性的训练方式。

参考文献

1.(2022,) Dense Text Retrieval based on Pretrained Language Models: A Survey

https:///abs/2211.14876

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多