LLM in Reranking——利用LLM进行重排

作者 | 酯基 

整理 | NewBeeNLP

https://zhuanlan.zhihu.com/p/660596492

后台留言交流』,加入 NewBee算法讨论组

重排器(Reranker)作为信息检索的第二阶段,需要根据查询和文档的相关性,对候选文档做细粒度的排序。经典的重排方法一般使用交叉编码器,结合文档和查询的语义信息进行打分和排序。

现有的涉及LLM的重排方法大致可以分为三类:

  • 用重排任务微调LLM
  • 使用prompt让LLM进行重排
  • 以及利用LLM做训练数据的增强

本文中针对前两种方法介绍一些研究。

排序学习方法主要分为point-wise,pair-wise以及list-wise三种思路,LLM通过prompt进行重排也类似。

参考综述:Large Language Models for Information Retrieval: A Survey[1]

LRL

Zero-Shot Listwise Document Reranking with a Large Language Model

这篇文章中,与现有的score and rank的point-wise打分方式不同,作者提出一种名为
Listwise Reranker with a Large Language Model (LRL) 的方法,利用GPT-3对文档进行list-wise的排序,直接生成候选文档的identifier序列实现重排。

point-wise vs list-wise

作者提到,这种list-wise的方法能够让模型同时关注到所有的文档信息。

具体地,作者使用如下的instruction让LLM实现文档的重排:

prompt1

模型将根据提示在方括号后生成一系列按相关性重新排序后的passage id。

为了更好地对比,作者还采用了如下方法实现point-wise的打分:

prompt2

此方法中,采用模型生成的第一个token中True与False的概率分布作为具体的分数进行排序。

  • 输入长度限制的处理
    由于GPT-3输入长度限制为4k token,召回的文档长度很容易突破长度限制,本文中作者采用滑动窗口解决这一问题。假设模型每次最多对m个文档进行排序,待排序文档数目为n,则先对列表中倒数m个文档进行排序,再向前滑动m/2,直到列表头部。
    这种方法虽然无法实现对整个列表进行完全的排列,但也能够有效地提高排列结果。

RankVicuna

RankVicuna: Zero-Shot Listwise Document Reranking with Open-Source Large Language Models

RankVicuna 也是一种Listwise的LLM排序方法,但是不同于LRL,它是经过针对重排微调后的模型。利用RankGPT-3.5作为教师模型在MS MARCO v1训练集中随机抽样的100K套训练集文档上生成数据,将RankGPT的能力蒸馏到7B的RankVicuna中。

RankVicuna推理和训练时使用的prompt

PRP

Large Language Models are Effective Text Rankers with Pairwise Ranking Prompting

本文中,作者提出利用LLM做list-wise与point-wise重排任务时,模型存在无法很好地理解排序指令的问题,并且在越小规模的模型中越显著。作者认为这一问题有可能与预训练中缺少相应任务有关。

LLM应用于list-wise时出现的问题

针对这一问题,作者提出一种名为 pairwise ranking prompting (PRP) 的范式,设计了一种简单的prompt,结合了生成和打分的模型API,使得规模较小的开源模型也能够在公开数据集上实现SOTA.

PRP的prompt设计如下图所示,输入为u(q,d_1,d_2)的三元组形式。利用LLM对输入敏感这一特性,同一个三元组会变换顺序输入模型两次,即u(q,d_1,d_2)和u(q,d_2,d_1),若两次判断相反,则记为 d_1=d_2。

PRP图示

用上述的PRP作为一个单元,作者还提出了三种变体:PRP-Allpair、SORTING-BASED以及SLIDING WINDOW

  • PRP-Allpair(ALL PAIR COMPARISONS):每个文档的得分通过与所有的其他文档对比综合计算,文档d_i的分数计算如下式,若判断结果为 d_1=d_2 ,则各得一半的分数。这种方法的明显缺陷在于其时间复杂度O(n^2).
  • PRP-Sorting(SORTING-BASED):使用快速排序算法或堆排序算法进行重排,能够将时间复杂度降低到O(NlogN).
  • PRP-Sliding-K(SLIDING WINDOW):滑动窗口法类似于冒泡排序,由于重排往往只关心top K的文档,而这里的K一般较小,相对于PRP-Allpair仍然能减少许多API调用。
滑动窗口

RankVicuna以及几种baseline模型在DL19和DL20数据集上的结果如下图所示。可以看出,仅7B参数的RankVicuna的重排能力甚至能够媲美175B参数的基于GPT3.5的模型。

RankVicuna的结果与LRL与PRP的对比

PROMPTRANK

Few-shot Reranking for Multi-hop QA via Language Model Prompting

本文中,作者提出一种名为 PROMPTRANK 的框架,依靠prompting和多跳重排,可以在少样本的前提下解决复杂的多跳问答(MQA)。

多跳问答(multi-hop question answering, MQA)是指query对应多个文档,且回答问题需要结合召回的复数文档进行多步推理的场景。目前的MQA大多基于retrieve-then-read的pipeline,然而这种模式下往往需要大规模的训练数据,对低资源场景(如医疗、法律等特定领域)不友好。

Method

使用TF-IDF相似度得到初步的候选文档集,再使用LLM进行重排。

LLM对召回的文档先进行打分,保留top K_1个文档,用超链接对这些文档进行扩展,再用LLM对扩展文档打分并挑选top K_2的文档,如此往复直到到达最大深度H。

给定一个查询q和推理路径c,作者使用条件概率作为LLM打分的依据,定义如下式:

其中 为给定模型提示 ,模型产生问题q的概率。特别地,作者提到在实验中,使用 的效果要显著地好于

作者解释称,这一方面是由于LLM对输入格式很敏感,使用 产生的分数可靠性较低。另一方面, 中prompt的格式,即问题位于文档后的形式,与LLM预训练语料的格式较为接近(例:FAQ),使得模型能够更加适应这种任务。

Instruction Search & Ensembling

在指令的编写中,作者使用了Instruction Search的方法,即不使用人工编写instruction,而是让语言模型进行填空,例如:

Task: < X > documents and < Y > question. Question:

mask部分可以填为 _< X > = “Read the following” and < Y > = “answer the”_,作者采用了两种不同的模板,并且用不同的instruction的最终得分进行集成,得到最终分数。

作者提到,结合不同prompt所得结果的分数能够使分数稳定,降低最终分数对不同prompt的敏感度。

Demonstration Ensembling

在提示中,作者还考虑了添加示例。但是由于模型输入长度限制,每个输入最多只能加入一个示例。作者同样通过集成的方法来解决这一问题,即每个提示包含一个不同的示例,最终通过集成不同提示的得分,使模型同时能从多个示例中进行学习。

实验

实验部分,作者采用HotpotQA,一个多跳查询的数据集,以及2WikiMQA进行测试。评价指标使用召回率Recall@2/10/20。

在实验中,作者用语言模型生成了200种instructions并随机采样其中10个,集成分数的方法采用最大值。从结果中可以看出,零样本的PROMPTRANK已经可以显著地提升召回表现,甚至超越了完全监督的DrKit。

HotpotQA结果

结果也显示,示例的加入可以进一步提升模型表现。从下图中可以看出随着示例的加入,模型的性能有较大的提升。由于输入长度限制(1024 tokens),每次输入的示例不会超过2个,这个结果也证明了Demonstration Ensembling这一方法的有效性。

示例数量的影响

总结

LLM不同于传统的交叉编码器,具有更强的语义理解能力,并且能够捕捉到文档列表整体的顺序信息,它仍然面对几个不可忽视的问题。

一方面,LLM的输入长度对于一个文档列表来说还是十分受限的,必须通过滑动窗口或集成的方式才能实现文档输入。另一方面,list-wise的LLM重排器对于输入非常敏感,在某些极端的情况下,例如将输入文档随机打乱顺序时,模型的输出结果甚至可能不如BM25。另外,还有参数过剩与时效性的问题会导致LLM重排器难以落地。


一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)



本文参考资料

[1]

Large Language Models for Information Retrieval: A Survey: https://arxiv.org/abs/2308.07107v2


相关推荐

  • 软考证书,彻底爆了!!
  • 400万token,大模型推理飙升22倍!清华校友爆火一作,GitHub狂揽1.8k星
  • 前端新特性:Compute Pressure API!!!
  • 截至 2023 年,我个人的 C 编程风格
  • 微软超 5000 亿“天价”收购完成;AI 耗电相当于一个国家年用电量;Ubuntu 23.10 镜像遭下架 | 极客头条
  • 阿里内部首发前端开发手册,完整版开放下载了!
  • 学会 arthas,让你 3 年经验掌握 5 年功力!
  • Spring Batch 批处理框架优化实践,效率嘎嘎高!
  • 深入理解Java注解的实现原理,注解的本质
  • 当自动驾驶遇上GPT-4V:L4要解决了?
  • 超级干货 | 数据平滑9大妙招
  • 【深度学习】计算机视觉领域如何从别人的论文里获取自己的idea?
  • 保姆级教程:不到30行代码上手讯飞版ChatGPT-API
  • 巧用 Redis,实现微博 Feed 流功能!
  • 微软全力拥抱 Java !
  • 使用CSS圆锥渐变创建背景图案
  • 让 web 再次伟大:用 CanvasKit 实现超级丝滑的原神地图(已开源)!!!
  • 不满意网上的Token无感知刷新方案,自己琢磨了个解决方案~
  • 当个 PM 式程序员「GitHub 热点速览」
  • 「原生案例」如何在JavaScript中实现实时搜索功能