AI 文摘

大模型RAG问答排序优化思路LLM-RankFusion:兼看代码生成大模型的系统整理





作者: 老刘说NLP 来源: 老刘说NLP

今天是2024年6月5日,星期三,北京,天气晴。

我们来看看两个问题,一个是关于RAG中大模型排序优化思路LM-RankFusion,另一个是关于代码生成的大模型一个系统整理,都很干货,感兴趣的可以看看。

问题1:关于RAG中LLM排序优化思路LLM-RankFusion

关于RAG中排序进展,现在有关于使用LLM进行文档排序的方法,例如:

1)Pointwise估算查询与单个文档之间的相关性;

2)Listwise通过将查询和文档列表插入到LLM的提示中,并指示其输出重新排序的文档标识符来直接对文档列表进行排名,尽管它们依赖于LLM的强大能力,但受到位置偏差的影响,并且对提示中的文档顺序敏感;

3)Pairwise方法将查询和一对文档提供给LLM,该模型被指示生成更相关文档的标识符;然后,这些成对比较通过高效的排序算法(如堆排序或冒泡排序)进行聚合,以产生最终排名;

4)Setwise一次性比较一组文档,以进一步提高效率;

而在排序聚合方面,可以使用Borda计数法来聚合不同的排序列表,在具体实现思路上,Borda计数法根据每个项目在每个输入排名中的位置为其分配一个分数,并将这些分数相加以产生最终的聚合排名。

但这种基于LLM的方案,很有趣,存在几种不一致性:

一个是顺序不一致性 :LLM对一对段落的判断会根据它们在提示中的呈现顺序而发生变化,这也被称为位置偏差;

一个是传递不一致性 :LLM在一组三个或更多段落上做出一系列三个或更多判断,这些判断在逻辑上相互矛盾,即d1≻d2,d2≻d3,d3≻d1。

所以这个就很奇怪。《LLM-RankFusion: Mitigating Intrinsic Inconsistency in LLM-based Ranking》 (https://arxiv.org/pdf/2406.00231)这一工作提出LLM-RankFusion框架,通过情境学习(ICL)和校准方案来减少顺序不一致,并通过多排序器的聚合来处理传递性不一致。

可以关注的点,包括其技术实现思路:

如下图所示,LLM-RankFusion中,排名列表提案由不同的排名器形成,每个排名器都包含用于解决顺序不一致性的ICL和校准功能。

在缓解顺序不一致性方面,

LLMs(大型语言模型)存在位置偏差,这导致了顺序不一致性。这会在交换段落位置后导致比较结果冲突。之前的工作将顺序不一致性视为比较中的平局,这忽略了基于LLM的排序中位置偏差的本质。提出了两种方法来缓解LLM-RankFusion中的顺序不一致性。

首先,设计ICL提示(In-ContextLearning Prompt),以利用LLMs的少数样本学习能力来缓解顺序不一致性。 提示为LLM提供了两种顺序排列的示例成对比较,如图1所示。这个演示说明了任务是基于查询的相关性来比较段落,而不是基于段落在提示中的位置来选择段落。如表1所示,使用ICL可以平衡LLM从任一位置选择段落的可能性。

其次,校准,在pairwise排名方案中,要求LLM在给定提示下输出标记A来选择第一段落或输出标记B来选择第二段落。 位置偏差使得LLMs更可能选择提示中某个特定位置的段落,而不是仅基于相关性。通过考虑来自两个可能位置的比较,即使LLM偏向于特定位置,使用所有位置下某个段落的平均输出概率也可以缓解这种偏差。

对于每一对段落,使用两种排列(A=di,B=dj)和(A=dj,B=di)向LLM进行查询。对于每个输出,A代表提示中的第一段落,B代表第二段落,然后,从LLM中获取A和B的标记概率。

在多排序器的聚合处理方面,通过将这些结果组合成一个单一、连贯的排名来解决冲突结果,从而限制嘈杂设置的影响。

其中比较重要的是怎么获取到聚合的列表。包括两个:

一个是不同排序方法的聚合。 将基于比较的排序算法Bubblesort和Heapsort生成的排名列表提案进行聚合。Bubblesort算法会反复遍历列表,比较相邻的元素,并在它们顺序错误时交换它们;而Heapsort算法则使用二叉堆来对元素进行排序。通过将具有不同特性的算法生成的排名列表进行聚合,聚合结果对输入数据的变化更具鲁棒性。如果某个算法在特定输入上表现不佳,另一个算法可能会进行补偿,从而得到更一致的整体排名。

另一个是不同LLM的聚合。 单个LLM(大型语言模型)在其偏好上可能具有独特的偏见,因此具有独特的传递性不一致性。因此可以聚合来自多个LLM的排名列表。这有助于减少任何单个LLM的影响,因为单个LLM在处理某些查询时可能不一致。由多个LLM的决策形成的聚合结果可以更加健壮和一致。根据LLM的大小对它们进行分组,并聚合具有相似参数数量的LLM的排名列表。

具体聚合算法如下:

具体地,设C={d1,d2,…,dm}为m个段落的集合,V={v1,v2,…,vn}为n个排名列表建议的集合。每个建议vj根据偏好顺序对段落进行排名,生成一个排名列表Lj,然后使用Borda计数法进行聚合。

其中,rij是段落di在投票者vj的列表Lj中的排名。Borda计数最高的段落即为胜者。通过按段落的Borda计数降序排列,得到聚合列表L:L=⟨dσ(1),dσ(2),…,dσ(m)⟩。

其中σ是{1,2,…,m}的一个排列,满足以下条件:

B(dσ(1))≥B(dσ(2))≥...≥B(dσ(m))  

问题2:关于代码生成大模型一个系统整理

代码生成用大模型综述:《A Survey on Large Language Models for Code Generation》(https://arxiv.org/pdf/2406.00515 ),综述了大型语言模型(LLMs)在代码生成领域的最新进展,讨论了数据整理、最新技术、性能评估和实际应用。我们可以看看其中比较重要的点:

1、整体代码大模型的演变历史

2、代码大模型的主流模型结构及研发范式

3、代码大模型的数据处理流程

4、代码大模型主流预训练数据及微调数据集

5、代码大模型常用评估benchmark

6、代码大模型与RAG的结合范式

总结

看看两个问题,一个是关于RAG中大模型排序优化思路LM-RankFusion,另一个是关于代码生成的大模型一个系统整理,都很干货,感兴趣的可以看看。

参考文献

1、https://arxiv.org/pdf/2406.00231

2、https://arxiv.org/pdf/2406.00515

关于我们

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。

对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。

更多AI工具,参考Github-AiBard123国内AiBard123

可关注我们的公众号:每天AI新工具