面向长文本的多模型协作摘要架构:多LLM文本摘要方法

多LLM摘要框架在每轮对话中包含两个基本步骤:生成和评估。这些步骤在多LLM分散式摘要和集中式摘要中有所不同。在两种策略中,k个不同的LLM都会生成多样化的文本摘要。然而在评估阶段,多LLM集中式摘要方法使用单个LLM来评估摘要并选择最佳摘要,而分散式多LLM摘要则使用k个LLM进行评估。

论文提出的方法旨在处理长文本文档输入,这类文档可能包含数万字,通常超出大多数标准LLM的上下文窗口限制,论文建立了一个两阶段处理流程:首先将源文档分块,独立summarize每个源文档块,然后对连接后的中间结果进行第二轮分块和摘要。在这两个阶段中,两种框架都允许多个LLM协作,最终收敛到一个高质量的完整原始参考文档摘要。

集中式多LLM摘要

单轮处理

每个LLM接收一次提示,生成各自的摘要。然后通过单一评估步骤选择最佳的最终摘要。

在单轮设置中,每个参与模型列表中的LLM都使用相同的提示P独立生成输入文本的摘要。对于每个LLM Mj ∈ M,输出为Sj = Mj(P,S),其中S表示输入文本。对所有Mj运行此步骤会得到一组摘要S = {S1,…,Sk}。从概念上讲,每个模型都贡献其独特的视角,产生多样化的候选摘要池,这对后续评估阶段的稳健摘要选择非常重要。

在收集候选摘要集S后,中央代理C ∈ M对这些摘要进行评估。中央LLM C使用评估提示Pec来评估每个摘要的质量。形式上表示为E = C(Pec, S),其中E是中央LLM对所有候选摘要的评估。这包括选择最佳摘要(以其匿名标识符表示)以及该评估的置信度分数(以0到10的整数表示)。将标识符去匿名化以恢复所选摘要Sj的文本,并将其设置为最终输出S*。在单轮机制中,此时终止流程,不再进行后续迭代。

对话式处理

生成和评估阶段会重复多次。每个生成-评估过程定义为一轮,并定义了流程结束或开始新一轮的条件,直到达到最大轮次。

对话式处理的第一轮与单轮程序相似。每个LLM Mj使用提示P从原始输入文本S生成初始摘要S(1)j:S(1) = Mj(P,S)。如果上一轮评估结果的置信度分数低于阈值,或者LLM未能输出可读的置信度分数,流程将进入下一轮。在第二轮及后续轮次中,使用提示P(i)。后续轮次中的LLM可以访问待摘要文本和上一轮的摘要。具体来说,在第i轮(i > 1):S(i)j = Mj(P(i),S)。

第i轮(i > 1)的评估阶段在概念上与单轮设置相似,但现在是对生成阶段刚刚产生的候选摘要Si = {S1(i), …, Sk(i)}进行操作。中央LLM C使用Pec评估这些候选摘要:E(i) = C(Pec, Si)。如果置信度达到阈值,流程终止,中央LLM选择的摘要被接受为S*。否则,流程进入下一轮摘要生成和评估。

分散式多LLM摘要

单轮处理

生成程序与集中式方法相同。多个LLM独立生成输入文本的摘要,获得摘要列表S = {S1,…,Sk}。

在评估阶段,每个生成摘要的模型都会收到一个新的评估提示,该提示不包含置信度,并收到待摘要文本以及包括自己在内的所有代理生成的摘要。形式上,收集模型偏好E(i),…,E(i),其中每个E(i)代表模型Mj对S(i),…,S(i)中最佳摘要的选择。当大多数模型选择相同的摘要时,即达成收敛。当没有出现多数选择时,在单轮方法(tmax = 1)中,算法选择指定的决胜模型Mt的摘要。

对话式处理

生成遵循与集中式方法相同的方法,产生摘要集S = S1,…,Sk。与单轮方法的一个关键区别在于条件重生成机制:当第一轮未达成共识时,后续轮次使用包含先前评估生成的摘要的新提示。

第一轮评估与单轮方法相同,但在未达成共识时会进入带有新生成提示的额外轮次。在单轮情况下,未达成共识会立即触发决胜模型机制。相比之下,对话式方法会使用更新的提示启动新的生成-评估轮次。这个过程持续进行,直到出现多数共识或达到tmax轮。在tmax轮后仍未达成共识时,算法默认使用决胜机制。

实验设置

实验使用ArXiv和GovReport数据集评估摘要方法。使用ROUGE-1、ROUGE-L、BLEU-1和BLEU-4指标评估LLM生成摘要的质量。为了与多LLM方法进行比较,采用GPT-3.5、GPT-4o、GPT-4o mini和LLaMA3-8B作为基准。所有模型使用4K字符的块大小,最终摘要表示为生成摘要的连接。

评估结果

分散式和集中式多LLM方法的结果。

多LLM方法不同评估和决胜模型的结果。

  • 多LLM框架显著优于单一LLM基准,在某些情况下性能提升高达3倍
  • 集中式多LLM方法平均提升得分73%,而分散式方法平均提升70%
  • 仅使用两个LLM和单轮生成评估就能获得显著的性能提升,表明该方法具有成本效益
  • 该框架在不同的中央模型(评估器)和决胜模型中表现稳定
  • 超过两个LLM和额外的生成评估轮次并未带来进一步改进

实现代码

 fromlangchain_ollamaimportChatOllama  gemma2=ChatOllama(model="gemma2:9b", temperature=0)  llama3=ChatOllama(model="llama3:8b", temperature=0)  llama3_1=ChatOllama(model="llama3.1:8b", temperature=0)prompt_initial_summary="""  Provide a concise summary of the text in around 160 words.   Output the summary text only and nothing else.  

提示词

 prompt_initial_summary = """Provide a concise summary of the text in around 160 words. Output the summary text only and nothing else.

{text}

""".strip()prompt_subsequent_summary = """
Given the original text below, along with the summaries of that text by 3 LLMs,
please generate a better summary of the original text in about 160 words.
ORIGINAL:

{text}

Summary by agent_1:

{summary_1}

Summary by agent_2:

{summary_2}

Summary by agent_3:

{summary_3}

""".strip()prompt_decentralised_evaluation = """
Given the original text below, along with the summaries of that text by 3 agents,
please evaluate the summaries and output the name of the agent that has the best summary. 
Output the exact name only and nothing else.
ORIGINAL:

{text}

Summary by agent_1:

{summary_1}

Summary by agent_2:

{summary_2}

Summary by agent_3:

{summary_3}

""".strip()prompt_centralised_evaluation = """
Given the initial text below, along with the summaries of that text by 3 LLMs,
please evaluate the generated summaries and output the name of the LLM has the best summary. 
On a separate line indicate a confidence level between 0 and 10.ORIGINAL:

{text}

Summary by agent_1:

{summary_1}

Summary by agent_2:

{summary_2}

Summary by agent_3:

{summary_3}


Remember, on a separate line indicate a confidence level between 0 and 10.
""".strip()prompt_concate = """
Provide a concise summary of the text in around 160 words. 
Output the summary text only and nothing else.

{summaries}

""".strip()

汇总

 class SingleTurnCentralised():  def __init__(self, models):  self.models = models  def generate(self, text):  summaries = []  for model in self.models:  summaries.append(model.invoke([{"role": "user", "content": prompt_initial_summary.format(text=text)}]).content)  return summaries  def evaluate(self, text, summaries):  response = gemma2.invoke([  {"role": "user", "content": prompt_centralised_evaluation.format(text=text, summary_1=summaries[0], summary_2=summaries[1], summary_3=summaries[2])}  ]).content  winner, *_, confidence = response.split()  return winner, confidence  def __call__(self, chunks):  summarised_chunks = []  for chunk in chunks:  summaries = self.generate(chunk)  winner, confidence = self.evaluate(chunk, summaries)  summarised_chunks.append(summaries[int(winner[-1]) -1])  final_summary = gemma2.invoke([{"role": "user", "content": prompt_concate.format(summaries="\n".join(summarised_chunks))}]).content  return final_summary  single_turn_centralised = SingleTurnCentralised([gemma2, llama3, llama3_1])  final_summary = single_turn_centralised(chunks)

论文地址

Multi-LLM Text Summarization

https://avoid.overfit.cn/post/ba136ba242694d68bce4c5499c85c647

作者: Ritvik Rastogi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/8179.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker 部署 java 项目详解

在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署。今天我们以若依项目为例,总结下部署项目的整体流程。简单来说,第一步:安装项目所需的中间件;第二步&#xff1…

Crawl4AI 人工智能自动采集数据

文章目录 1 使用 Crawl 的步骤2 AI 智能体应用实例3 结语 Crawl是一款免费的开源工具,利用AI技术简化网络爬取和数据提取,提高信息收集与分析的效率。它智能识别网页内容,并将数据转换为易于处理的格式,功能全面且操作简便。 定位…

使用vitepress搭建自己的博客项目

一、介绍can-vitepress-blog 什么是CAN BLOG CAN BLOG是基于vitepress二开的个人博客系统,他能够方便使用者快速构建自己的博客文章,无需繁琐的配置和复杂的代码编写。 CAN BLOG以antdv为UI设计基础,简洁大方,界面友好&#xf…

On to OpenGL and 3D computer graphics

2. On to OpenGL and 3D computer graphics 声明:该代码来自:Computer Graphics Through OpenGL From Theory to Experiments,仅用作学习参考 2.1 First Program Square.cpp完整代码 /// // square.cpp // // OpenGL program to draw a squ…

Excel分区间统计分析(等步长、不等步长、多维度)

在数据分析过程中,可能会需要统计不同数据区间的人数、某个数据区间的平均值或者进行分组区间统计,本文从excel函数到数据透视表的方法,从简单需求到复杂需求,采用不同的方法进行讲解,尤其是通过数据透视表的强大功能大…

低代码系统-产品架构案例介绍、得帆云(八)

产品名称 得帆云DeCode低代码平台-私有化 得帆云DeMDM主数据管理平台 得帆云DeCode低代码平台-公有云 得帆云DePortal企业门户 得帆云DeFusion融合集成平台 得帆云DeHoop数据中台 名词 概念 云原生 指自己搭建的运维平台,区别于阿里云、腾讯云 Dehoop 指…

mybatis(78/134)

前天学了很多&#xff0c;关于java的反射机制&#xff0c;其实跳过了new对象&#xff0c;然后底层生成了字节码&#xff0c;创建了对应的编码。手搓了一遍源码&#xff0c;还是比较复杂的。 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE …

1.23 补题 寒假训练营

E 一起走很长的路&#xff01; 输入描述 第一行输入两个整数 n,q&#xff08;1≤n,q≤210^5&#xff09;&#xff0c;代表多米诺骨牌的个数和询问次数。 第二行输入 n 个整数 a1,a2,…,an​&#xff08;1≤ai≤10^9&#xff09;&#xff0c;表示多米诺骨牌的重量。 此后输入…

从入门到精通:RabbitMQ的深度探索与实战应用

目录 一、RabbitMQ 初相识 二、基础概念速览 &#xff08;一&#xff09;消息队列是什么 &#xff08;二&#xff09;RabbitMQ 核心组件 三、RabbitMQ 基本使用 &#xff08;一&#xff09;安装与环境搭建 &#xff08;二&#xff09;简单示例 &#xff08;三&#xff09;…

基于vscode的cppcmake调试环境配置

1. 创建项目文件 创建cpp文件及CMakeLists.txt文件 helloOpenCV.cpp #include <opencv2/opencv.hpp> int main() {// 创建图像&#xff0c;初始化为黑色cv::Mat image cv::Mat::zeros(200, 300, CV_8UC3);// 设置为纯绿色 (BGR格式&#xff1a;0, 255, 0)image.setTo…

后端面试题分享第一弹(状态码、进程线程、TCPUDP)

后端面试题分享第一弹 1. 如何查看状态码&#xff0c;状态码含义 在Web开发和调试过程中&#xff0c;HTTP状态码是了解请求处理情况的重要工具。 查看状态码的步骤 打开开发者工具&#xff1a; 在大多数浏览器中&#xff0c;您可以通过按下 F12 键或右键单击页面并选择“检查…

(1)STM32 USB设备开发-基础知识

开篇感谢&#xff1a; 【经验分享】STM32 USB相关知识扫盲 - STM32团队 ST意法半导体中文论坛 单片机学习记录_桃成蹊2.0的博客-CSDN博客 USB_不吃鱼的猫丿的博客-CSDN博客 1、USB鼠标_哔哩哔哩_bilibili usb_冰糖葫的博客-CSDN博客 USB_lqonlylove的博客-CSDN博客 USB …

win32汇编环境,对话框程序中使用进度条控件

;运行效果 ;win32汇编环境,对话框程序中使用进度条控件 ;进度条控件主要涉及的是长度单位,每步步长,推进的时间。 ;比如你的长度是1000,步长是100,每秒走1次,则10秒走完全程 ;比如你的长度是1000,步长是10,每秒走1次,则100秒走完全程,但每格格子的长度与上面一样 ;以下…

CrypTen——基于pytorch的隐私保护机器学习框架

目录 一、CrypTen概述 二、应用场景 三、CrypTen优势 四、CrypTen技术解析 1.基于pytorch的构建基础 2.核心密码学原语 3.加密模型训练流程 五、传统隐私保护技术与CrypTen的对比 1.传统隐私保护技术介绍 2.CrypTen与传统隐私保护技术的区别 六、CrypTen的环境配置…

电梯系统的UML文档11

场景 7.3 紧急制动 3 –当电梯停止在某一楼层时&#xff0c;如果命令门打开&#xff0c;但是门不开&#xff0c;则紧急制动将触发。 图 16: 场景 7.3- 紧急制动 - 门将不开启当电梯停止在目的层 场景 7.4 紧急制动 4 –如果电梯移动时门打开&#xff0c;紧急制动将触发。 图 1…

【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置(单机)

Elasticsearch系列文章目录 【Elasticsearch 基础入门】一文带你了解Elasticsearch&#xff01;&#xff01;&#xff01;【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置&#xff08;单机&#xff09; 目录 Elasticsearch系列文章目录前言单机模式1. 安装 J…

正点原子Linux 移植USB Wifi模块MT7601U驱动(上)

目录 下载驱动MT7601驱动文件中重要的几个文件1.README_STA_usb2.sta_ate_iwpriv_usage.txt3.config.mk4.Makefile 移植过程编译驱动成ko文件复制到根文件系统里驱动加载失败常见原因A. DMA缓存大小不够B. RT2870STA.dat文件没配置好 模块加载测试开启无线网卡并设置IP地址 参考…

Linux相关概念和易错知识点(26)(命名管道、共享内存)

目录 1.命名管道 &#xff08;1&#xff09;匿名管道 -> 命名管道 ①匿名管道 ②命名管道 &#xff08;2&#xff09;命名管道的使用 ①创建和删除命名管道文件 ②命名管道文件的特性 ③命名管道和匿名管道的区别 &#xff08;3&#xff09;用命名管道实现进程间通信…

【时时三省】(C语言基础)对比一组函数

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对比一组函数 比如对比一下scanf fscanf sscanf和printf fprintf sprintf scanf 针对标准输入的格式化的输入语句 其实它针对的是stdin fscanf 针对所有输入流的格式化的输入语句 它是针对s…

Leecode刷题C语言之组合总和②

执行结果:通过 执行用时和内存消耗如下&#xff1a; int** ans; int* ansColumnSizes; int ansSize;int* sequence; int sequenceSize;int** freq; int freqSize;void dfs(int pos, int rest) {if (rest 0) {int* tmp malloc(sizeof(int) * sequenceSize);memcpy(tmp, seque…