赞
踩
这篇文章的核心工作主要是考察了一下GPT模型在排序任务当中的效果,发现通过合适的方法(文中给出的滑动窗口 + 排序),可以使得GPT模型在文本排序上的效果超过现在的有监督模型的SOTA结果。
更甚者,使用GPT模型的标注结果进行模型蒸馏,获得的蒸馏模型的效果在某些任务当中依然可以超过当前的SOTA结果。
文中给出了整体的实验结果图如下:
由此,文章展示了GPT模型在语义理解上的强大能力以及另一种可行的应用途径。
下面,我们来具体看一下这篇文章的具体内容。
这篇文章的方法的核心其实就是如何将GPT模型的结果适配到排序任务当中,或者更一般地说,如何将LLM模型应用在排序任务当中。
文中给出了三种可行的方法,他们可以用下面三张图来分别展示:
其中,前两种方法是已有的方法,其思路其实还是比较常见的ranker的思路,就是对每一个文档给出一个score,然后通过这个score给所有的文档进行一下排序。
而第三种方法是文中提出一个方法,具体来说,不再借由一个外部的分数,而是直接让模型端到端的对文档进行排序。
下面,我们来具体来看一下这三个具体的方法:
首先,第一种常见的方法还是使用比较直接的思路,就是尝试计算出每一个回答的ppl值,然后使用这个ppl值作为文档的relevant score,从而对文档进行排序。
当然,这里一个显著的问题就是,ppl本质上还是描述的是文本的通顺度,而非是语义的契合度,虽然两者往往是非常契合的,但是并不等价,因此这种方式先天上存在一定的缺陷……
关于文中的第二种方法,如前所述,本质上依然还是用一个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\{
这里的实现更类似于当前主流的ranker实现方式,不过逻辑上同样存在一定的缺陷,即在考虑回答是都是point-wise考察答案的,因此相互比较的时候可能会存在一定的问题。
最后这种permutation generation的方式是这篇文章当中作者提出的方案,这个方案其实算是最为直接且暴力的一个方案,就是直接利用LLM的语义理解能力直接要求LLM来对所有的候选doc进行关联性排序。
当然,通常而言,候选集的doc数量是非常大的,而LLM的输入则是有限的,因此事实上我们往往无法保证能够一次性将文本全部输入。
因此这里文章中引入了滑动窗口的方法,即仿照冒泡排序的思路,每次只对前k个文本进行排序,然后将窗口移动s,然后对后续的k个文本进行排序,迭代遍历整个文本之后,我们就能获得效果最好的前s个文本了。
具体方法可以用文中的图示进行展示如下:
这种方法的好处在于端到端,直接利用LLM的语义理解能力对任务进行处理,但是缺点在于需要多次调用LLM,成本和时间上都不太划算,另外由于LLM本身生成内容的可能存在一定的错误,经过多次窗口这种错误将会被放大。
下面,我们就来具体看一下其实验的效果。
文中使用的实验数据主要包括以下一些:
而关于文中的模型使用,则主要包括以下一些模型:
而作为control模型的,文中则主要使用了一下如下一些对照模型:
下面,我们来看一下文中得到的具体实验结果。
首先,我们给出TREC数据集上的实验效果如下:
可以看到:
在BEIR数据集上,文中的结果如下:
可以看到:
最后,我们看一下文中给出的Mr.TyDi数据集上的模型表现:
同样可以看到:
另外,文中还对于permutation的方式进行了消解实验。
文中主要考察了以下一些因素对实验结果的影响:
具体实验结果如下图所示:
可以看到:
首先,关于模型的设计,文中采用DeBERTa-v3-base的架构并载入其参数进行初始化,但是对于Loss的设计,文中给出了几种不同的设计:
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(j∑esjesi)
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<rj∑log(1+esi−sj)
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+esi−sj)
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=−i∑yilog(σ(si))+(1−yi)log(1−σ(si))
我们给出文中的实验结果如下:
可以看到:
综上,文中其实还是在探讨以GPT模型为代表的LLM的应用方法,这里尝试了一下LLM在ranker当中的用法,不过从结果来看,事实上还是主要依赖于LLM对于语义内容的强理解。
可以看到,基于LLM对于语义理解的能力,LLM对于结果的精排能够展现出超出现有有监督模型的SOTA效果,不过如果完全使用LLM进行排序,除了成本上的考虑之外,其生成结果的不稳定性也会导致效果的变差,典型的证明就是上述ranker的效果对于初始顺序的敏感性。
通过蒸馏获得小模型的方式可以很好的结合两者的效果,从而获得整体上更好的一个效果。
这种思路也是可以借鉴于其他任务当中的,通过GPT生成pseudo数据,然后进行蒸馏训练小模型来对任务进行优化。不过这种思路现在也挺主流的就是了……
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。