前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LLM in Reranking——利用LLM进行重排

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

作者头像
NewBeeNLP
发布2023-10-25 10:25:51
1.2K0
发布2023-10-25 10:25:51
举报
文章被收录于专栏:NewBeeNLPNewBeeNLP

重排器(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).
s_i=1 * \sum_{j \neq i} \mathbb{I}_{d_i>d_j}+0.5 * \sum_{j \neq i} \mathbb{I}_{d_i=d_j}
  • 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打分的依据,定义如下式:

\operatorname{Score}_q(c)=P_{\mathrm{LM}}\left(q \mid \tau_c\right)

其中

P_{\mathrm{LM}}\left(q \mid \tau_c\right)

为给定模型提示

\tau\_c

,模型产生问题q的概率。特别地,作者提到在实验中,使用

P_{\mathrm{LM}}\left(q \mid \tau_c\right)

的效果要显著地好于

P_{\mathrm{LM}}\left(c \mid \tau_q\right)

作者解释称,这一方面是由于LLM对输入格式很敏感,使用

P_{\mathrm{LM}}\left(c \mid \tau_q\right)

产生的分数可靠性较低。另一方面,

P_{\mathrm{LM}}\left(q \mid \tau_c\right)

中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重排器难以落地。

本文参考资料

[1]

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NewBeeNLP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LRL
  • RankVicuna
  • PRP
  • PROMPTRANK
    • Method
      • Instruction Search & Ensembling
        • Demonstration Ensembling
          • 实验
          • 总结
            • 本文参考资料
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档