首页 > 其他分享 >LLM-Blender:大语言模型排序融合框架

LLM-Blender:大语言模型排序融合框架

时间:2023-06-26 11:46:50浏览次数:42  
标签:模型 回答 PairRanker LLM 排序 Blender

随着Alpaca, Vicuna, Baize, Koala等诸多大型语言模型的问世,研究人员发现虽然一些模型比如Vicuna的整体的平均表现最优,但是针对每个单独的输入,其最优模型的分布实际上是非常分散的,比如最好的Vicuna也只在20%的任务里比其他模型有优势。

有没有可能通过集成学习来综合诸多开源的「弱」LLM的能力,来使得他们整体成为一个「强」LLM呢?

AI2,USC,和浙大的研究员由此提出了一个集成学习框架,LLM-Blender,它通过排序和融合来对各个LLM的输出进行集成,从而达到了较为稳定的提升。

图片

论文链接:https://arxiv.org/abs/2306.02561

代码链接:https://github.com/yuchenlin/LLM-Blender

对于同一条指令来自不同LLMs的回答,LLM-Blender框架可以有效选择出其中质量更高的回答,再基于这些回答融合生成一个新的质量更高的回答。

图片

为了促进集成学习在LLM社区的发展和测试LLM-Blender的能力,论文作者们构建了一个新的指令数据集MixInstrcut。

数据采样于Aplapa-GPT-4, Laion, ShareGPT等流行的指令数据集。对于每个指令,MixInstruct还包括了11个包括Vicuna, Baize, Open Asssistant等当前流行的开源大型语言模型的回答。

论文的进行了一系列实验评估了不同LLMs在MixInstruct数据集上的差异性,并测试了LLM-Blender在集成多个LLMs回答的能力。

实验证明了LLM-Blender集成得到的回答在所有LLM回答中平均排名为3.01,其中68.59%都排名在前三,这远超平均排名最好为3.90的单个模型Open Assistant,以及Vicuna(只有有52.88%的回答被排到前三)。

主要贡献

1. 提出了一个新的针对大型语言模型的集成学习框架LLM-Blender,用于对多个LLMs的回答进行排序与融合。LLM-Blender由两个简单有效的模块PairRanker与GenFuser组成。

2. 一个新的指令数据集MixInstruct。其中的每一条指令都包含了来自Vicuna等数十个当前流行的开源LLMs的回答,用来训练与评估集成学习框架LLM-Blender。

3. 首次证明了集成学习在LLM社区的显著效果与其应用价值。

4. 开源LLM-Blender工具包,方便LLM社区研究人员使用与进一步研究。

大型语言模型的集成学习

LLM-Blender: 排序+融合

 

LLM-Blender主要包含两个模块,PairRanker和GenFuser,分别对应框架运行的两个阶段:排序(Rank)与融合(Fuse)。

在排序阶段,论文首先通过PairRanker对不同的LLMs回答进行成对比较,得到这些回答的排名。

在融合阶段,论文选择其中的排名中的前k(如k=3)个回答,将其于原指令一起打包送到GenFuser模块作为输入,再重新生成一个融合回答。

图片

对于第一个模块PairRanker,论文认为基于双向注意力的成对比较在候选回答较为相似的情况下十分重要。

以往的排序模型均采用将源文本和单个候选序列连接编码,并在推导时直接输出一个绝对分数作为对候选序列排序的依据。

而LLM-Blender的第一个模块PairRanker将源文本与一组(两个)候选序列同时连接进行编码,利用双向注意力来提高排序模型的表现,作者认为这种方法可以更好的捕捉不同候选回答之间的微小差异,从而提高比较的正确率。

图片

此外,与传统的成对排序方法仅仅在训练过程中采用成对比较的损失函数不同的是,PairRanker在推导过程中同样采用成对比较。

论文提出了三种简单的聚合方法,MaxLogits, MaxWins, 与Bubble Sort来完成从比较矩阵到单个候选序列分数的计算,这三种方法在后续实验中均被证明有效。其中MaxLogits效果最好。

图片

与现有的部分文本融合方法不同,GenFuser并未直接将所有候选序列(即数十个LLMs的回答)作为一起送入这一模块,而是在PairRanker的排序结果上选择最好的前k个,与源文本一起送入GenFuser进行融合。

这是因为论文认为部分未经筛选的低质量的候选序列可能会影响GenFuser模块的融合质量。

MixInstruct: 新的LLMs集成学习基准

为了更好地评估LLM-Blender地能力,论文构建了MixInstruct数据集。指令来源包括Alpaca-GPT4 等四种流行的大型指令数据集,标准回答来源于GPT-4, ChatGPT和人类标注。

其中每一条指令都包含Vicuna等数十个当前流行的大型语言模型的回答。

图片

论文还使用ChatGPT对在测试集(5K)这些回答进行成对比较,并统计每个回答在比较中获胜的次数,将不同LLMs获胜次数排名第一的比例在图中进行了总结。可以明显看到不同LLM回答的质量各有千秋,并非一家独大。

此结果证明了不同LLMs之间能力的多样性,而这也正是集成学习框架LLM-Blender能够成功的原因之一。

实验

 

实验设置

论文实验中,LLM-Blender的两个模块PairRanker与GenFuser分别采用Deberta-v3-Large(400m)和Flan-T5-XL(3b)作为各自的骨架模型(backbone)。两个模型均在MixInstruct大小为100k的训练集上进行训练(更多细节见论文)。

为了更好地评估不同各种生成模型在MixInstruct上的能力,论文不仅采用了一些传统自动度量指标BERTScore, BLEURT和BARTScore, 并将ChatGPT的比较结果按照比较中获胜的次数归并为整体排名值(GPT-Rank)。

由于Vicuna与Open Assistant在LLM社区的显著表现,论文还特别将所有模型的结果与这两个模型进行了比较,给出了对应的获胜比例。此外,实验还统计了不同模型在与其他所有模型比较的过程中被排名为前3的比例(Top-3)。

LLMs:各有千秋

在这些模型中,Open Assistant、Vicuna和Alpaca是表现最好的三个模型,继它们之后,Baize、Moss和ChatGLM也在MixInstruction上表现出色。

而Mosaic MPT、StableLM和Flan-T5在评估中排名较为靠后。尽管如此,他们的GPT-Rank也并非一个接近最低排名(11)的数字,再次说明每个LLM的回答都有他们自己的优势。

此外,同样可以注意的是,尽管Open Assistant和Vicuna综合表现最为出色,在其他模型与这两个模型的比较中,仍旧有部分比例的回答被认为要优于他们。

Rankers:PairRanker优势明显

而在诸多排序模型的比较中,PairRanker作为成对比较的排序模型,表现明显要优于SummaReranker和SimCLS等非成对比较的模型。

尤其在GPT-Rank,BARTScore,BLEURT和Top-3的比例上,PairRanker取得了所有排序模型中最好的效果,并且要优于任意一个LLM。

除了对排序模型得到的Top-1选择进行分析外,论文还对排序模型的整体排序质量通过Pearson相关系数,Spearman相关系数和Searman’s Footrule距离进行了评估。

正如表中所示,在所有的自动度量指标的排序中,BartScore的排序结果与GPT-Rank相关性最高。而PairRanker的排序结果在所有排序模型中取得的相关性最高,甚至超过BARTScore。

GenFuser进一步提高PairRanker效果

论文最后比较了整个LLM-Blender框架生成的回答的质量。LLM-Blender将PairRanker排序得到的前3个回答送入到GenFuser中进行融合生成。

最终发现,融合生成的回答不仅在三个自动度量指标BARTScore等上取得了巨大的提升,还在GPT-Rank和Top-3比例上取得了最佳的结果,LLM-Blender在实验的评估中展现了预期中的卓越性能。

结语

LLM-Blender是一个简单的集成学习框架,适用于任何LLMs和任务。它通过学习通过成对比较的方式来排序每个回答的质量,再通过融合生成的方式来决定最后的输出。在MixInstruct的测试集上取得了最优的效果。

标签:模型,回答,PairRanker,LLM,排序,Blender
From: https://www.cnblogs.com/botai/p/LLM-Blender.html

相关文章

  • 27.插入排序
    自从上次小桂子发现了冒泡排序后,他开始相信自己的聪明才智比伴读小书童居然要高,所以他更加热衷于排序算法研究了,没事的时候,时不时找几个宫女演练一下,这时他又发现了一个新的排序方式,对于一下宫女们的队列:1.首先,我们只考虑第一个元素,从第一个元素171开始,该元素可以认为已经被排......
  • C++面试八股文:std::array如何实现编译器排序?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第25面:面试官:array熟悉吗?二师兄:你说的是原生数组还是std::array?面试官:你觉得两者有什么区别?二师兄:区别不是很大,原生数组(非动态数组)和std::array都在栈上开辟空间,初始化的时候需要提供数组长度,且长度不可改变。有一点区别的是,st......
  • C++面试八股文:std::array如何实现编译器排序?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第25面:面试官:array熟悉吗?二师兄:你说的是原生数组还是std::array?面试官:你觉得两者有什么区别?二师兄:区别不是很大,原生数组(非动态数组)和std::array都在栈上开辟空间,初始化的时候需要提供数组长度,且长度不可改变。有一点区别的是,std......
  • 26.冒泡排序
    每当皇帝选妃时,首席太监小桂子总是忍不住在旁边偷窥这些候选的美女,有一次他发现做为伴读小书童的你居然犯了个常人都可以轻易看出的错误,有几位候选的美女站成如下一排:当我们采用前面的选择排序时,我们仍然要将候选者遍历5遍,才能完成最终的排序,但其实,本身这些美女除了第一个外,已经......
  • 25.选择排序
    从前有个王国,国王骄奢无度,贪图女色,后宫佳丽三千,但还是动用大量财力物力在全国范围内招妃纳妾,浸淫于女色之中。又是一年的选妃开始,今年国王对身高比较敏感,要求这些候选者按照从低到高的顺序排列,供其选择。。。宫廷首席太监小桂子于是命令所有小公公把宫女的身高都量出来并上报到......
  • 个人博客-给推荐文章添加排序字段
    个人博客-给推荐文章添加排序字段前言前篇文章优化了推荐文章的加载,但是呢,还是不太满意,之前是按照文章的发布日期去排序的,既然是推荐文章,还是得用一个字段去专门管理顺序。设计思路:给推荐文章表添加一个排序字段,然后写一个修改方法即可。数据库字段这里的数据类型以sqlite3......
  • 刷新20项代码任务SOTA,Salesforce提出新型基础LLM系列编码器-解码器Code T5+
    前言 大型语言模型(LLMs)最近在代码层面的一系列下游任务中表现十分出彩。通过对大量基于代码的数据(如GitHub公共数据)进行预训练,LLM可以学习丰富的上下文表征,这些表征可以迁移到各种与代码相关的下游任务。但是,许多现有的模型只能在一部分任务中表现良好,这可能是架构和......
  • php 二维数组排序
    主要通过 array_multisort函数来进行排序<?php//原数组$arr=[["name"=>"小明","age"=>18],["name"=>"小红","age"=>7],["name"=>"小刚","age"=>52],[&......
  • LLM开发的5个要点为你节省50%时间
    推特博主@agishaun基于上方内容,分享了他自己的在千余小开发实践中的经验和收获,帮助你少走弯路:1.每个人都可以学会提示词学习使用LLM进行开发,可以节约节省大量时间。因此,尽可能将LLM整合到你的开发流程中,建议从MicrosoftCopilot开始。2.数据,数据,还是数据!数据质量是L......
  • 如何快速高效的使用 LLM 构建应用程序
    原文:https://a16z.com/2023/06/20/emerging-architectures-for-llm-applications/大型语言模型是一种强大的新原语,用于构建软件。但是由于它们如此新颖——并且与普通计算资源的行为方式如此不同——我们并不总是明确知道如何使用它们。在这篇文章中,我们分享了一种新兴的LLM应用......