当前位置:   article > 正文

文献阅读:Is ChatGPT Good at Search? Investigating Large Language Models as Re-Ranking Agent

is chatgpt good at search? investigating large language models as re-ranking

1. 文章摘要

这篇文章的核心工作主要是考察了一下GPT模型在排序任务当中的效果,发现通过合适的方法(文中给出的滑动窗口 + 排序),可以使得GPT模型在文本排序上的效果超过现在的有监督模型的SOTA结果。

更甚者,使用GPT模型的标注结果进行模型蒸馏,获得的蒸馏模型的效果在某些任务当中依然可以超过当前的SOTA结果。

文中给出了整体的实验结果图如下:
在这里插入图片描述

由此,文章展示了GPT模型在语义理解上的强大能力以及另一种可行的应用途径。

下面,我们来具体看一下这篇文章的具体内容。

2. 方法介绍

这篇文章的方法的核心其实就是如何将GPT模型的结果适配到排序任务当中,或者更一般地说,如何将LLM模型应用在排序任务当中。

文中给出了三种可行的方法,他们可以用下面三张图来分别展示:
在这里插入图片描述

其中,前两种方法是已有的方法,其思路其实还是比较常见的ranker的思路,就是对每一个文档给出一个score,然后通过这个score给所有的文档进行一下排序。

而第三种方法是文中提出一个方法,具体来说,不再借由一个外部的分数,而是直接让模型端到端的对文档进行排序。

下面,我们来具体来看一下这三个具体的方法:

1. Query Generation

首先,第一种常见的方法还是使用比较直接的思路,就是尝试计算出每一个回答的ppl值,然后使用这个ppl值作为文档的relevant score,从而对文档进行排序。

当然,这里一个显著的问题就是,ppl本质上还是描述的是文本的通顺度,而非是语义的契合度,虽然两者往往是非常契合的,但是并不等价,因此这种方式先天上存在一定的缺陷……

2. Relevance Generation

关于文中的第二种方法,如前所述,本质上依然还是用一个score来对每一个文档进行打分。

不过不同于第一种方法当中使用ppl,这里更偏近于朝向语义层面的理解,如上图b中所示,是给出passage与query之后,直接询问两者的相关性,然后通过回答当中yes与no的生成概率p的大小进行打分。

用文中的公式表达即为:

s i = { 1 + p ( y e s ) if output is yes 1 − p ( n o ) if output is no s_i = \left\{

1+p(yes)if output is yes1p(no)if output is no
\right. si={1+p(yes)1p(no)if output is yesif output is no

这里的实现更类似于当前主流的ranker实现方式,不过逻辑上同样存在一定的缺陷,即在考虑回答是都是point-wise考察答案的,因此相互比较的时候可能会存在一定的问题。

3. Permutation Generation

最后这种permutation generation的方式是这篇文章当中作者提出的方案,这个方案其实算是最为直接且暴力的一个方案,就是直接利用LLM的语义理解能力直接要求LLM来对所有的候选doc进行关联性排序。

当然,通常而言,候选集的doc数量是非常大的,而LLM的输入则是有限的,因此事实上我们往往无法保证能够一次性将文本全部输入。

因此这里文章中引入了滑动窗口的方法,即仿照冒泡排序的思路,每次只对前k个文本进行排序,然后将窗口移动s,然后对后续的k个文本进行排序,迭代遍历整个文本之后,我们就能获得效果最好的前s个文本了。

具体方法可以用文中的图示进行展示如下:
在这里插入图片描述

这种方法的好处在于端到端,直接利用LLM的语义理解能力对任务进行处理,但是缺点在于需要多次调用LLM,成本和时间上都不太划算,另外由于LLM本身生成内容的可能存在一定的错误,经过多次窗口这种错误将会被放大。

下面,我们就来具体看一下其实验的效果。

3. 实验考察

1. 实验数据 & 模型设计

文中使用的实验数据主要包括以下一些:

  1. TREC
  2. BEIR
  3. Mr.TyDi

而关于文中的模型使用,则主要包括以下一些模型:

  1. text-curie-001
  2. text-davinci-003
  3. gpt-3.5-turbo
  4. gpt-4

而作为control模型的,文中则主要使用了一下如下一些对照模型:

  1. 有监督模型
    1. monoBERT
    2. monoT5
    3. TART
    4. mmarcoCE
  2. 无监督模型
    1. UPR
    2. InPars
    3. Promptagator++

下面,我们来看一下文中得到的具体实验结果。

2. 实验结果

1. TREC

首先,我们给出TREC数据集上的实验效果如下:
在这里插入图片描述

可以看到:

  1. permutation的方法效果显著优于另外两种ranker使用方法;
  2. permutation的方法在GPT4以及chatgpt的情况下效果可以趋近且超过有监督模型的效果。
2. BEIR

在BEIR数据集上,文中的结果如下:
在这里插入图片描述

可以看到:

  • 和TREC数据集上的结果相接近,同样有permutation的结果甚至可以超过有监督模型的效果。
3. Mr.TyDi

最后,我们看一下文中给出的Mr.TyDi数据集上的模型表现:
在这里插入图片描述

同样可以看到:

  • GPT4模型上的效果同样可以在大多数的语种下超过其他control模型。

3. 消解实验

另外,文中还对于permutation的方式进行了消解实验。

文中主要考察了以下一些因素对实验结果的影响:

  1. 窗口长度(rank文章数目)
  2. 初始排序顺序
  3. rank次数
  4. 使用模型

具体实验结果如下图所示:
在这里插入图片描述

可以看到:

  • 整体而言,窗口越长,实验效果越好
  • 初始顺序会大幅影响模型的效果,可见gpt的ranker更多只能充当要给辅助的精排工具,如果要其在乱序当中直接找出最好的top10,其效果就比较差了;
  • 通过多次迭代排序的方式,我们可以进一步优化效果,但是相对的,成本也会增加;
  • gpt4的效果是最好的,所以如果成本允许的话通过使用gpt4进行精排有助于提升效果

4. 蒸馏实验考察

1. 模型设计

首先,关于模型的设计,文中采用DeBERTa-v3-base的架构并载入其参数进行初始化,但是对于Loss的设计,文中给出了几种不同的设计:

  1. Listwise Cross-Entropy

    L = − l o g ( e s i ∑ j e s j ) L = - log(\frac{e^{s_i}}{\sum\limits_{j}e^{s_j}}) L=log(jesjesi)

  2. RankNet

    L = ∑ r i < r j l o g ( 1 + e s i − s j ) L = \sum\limits_{r_i < r_j} log(1 + e^{s_i - s_j}) L=ri<rjlog(1+esisj)

  3. LambdaLoss

    L = ∑ r i < r j Δ N D C G l o g 2 ( 1 + e s i − s j ) L = \sum\limits_{r_i < r_j} \Delta NDCG \mathop{log}_2(1+e^{s_i - s_j}) L=ri<rjΔNDCGlog2(1+esisj)

  4. Pointwise Binary Cross-Entropy

    L = − ∑ i y i l o g ( σ ( s i ) ) + ( 1 − y i ) l o g ( 1 − σ ( s i ) ) L = - \sum_{i} y_i log (\sigma (s_i)) + (1-y_i) log (1 - \sigma (s_i)) L=iyilog(σ(si))+(1yi)log(1σ(si))

2. 实验结果

我们给出文中的实验结果如下:
在这里插入图片描述

可以看到:

  • 在ranker问题当中,整体而言,LambdaLoss和RankNet的两种loss设计效果更好;
  • 蒸馏的模型效果是可以超越有监督的训练模型的。

5. 结论

综上,文中其实还是在探讨以GPT模型为代表的LLM的应用方法,这里尝试了一下LLM在ranker当中的用法,不过从结果来看,事实上还是主要依赖于LLM对于语义内容的强理解。

可以看到,基于LLM对于语义理解的能力,LLM对于结果的精排能够展现出超出现有有监督模型的SOTA效果,不过如果完全使用LLM进行排序,除了成本上的考虑之外,其生成结果的不稳定性也会导致效果的变差,典型的证明就是上述ranker的效果对于初始顺序的敏感性。

通过蒸馏获得小模型的方式可以很好的结合两者的效果,从而获得整体上更好的一个效果。

这种思路也是可以借鉴于其他任务当中的,通过GPT生成pseudo数据,然后进行蒸馏训练小模型来对任务进行优化。不过这种思路现在也挺主流的就是了……

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/332216
推荐阅读
相关标签
  

闽ICP备14008679号