LongWriter——从长文本语言模型中释放出10,000+字的生成能力

news2025/2/24 9:30:59

概述

当前的长上下文大型语言模型 (LLM) 可以处理多达 100,000 个词的输入,但它们很难生成超过 2,000 个词的输出。受控实验表明,该模型的有效生成长度本质上受到监督微调(SFT) 期间看到的示例的限制。换句话说,这种输出限制源于现有 SFT 数据集中长输出示例的稀缺性。

长上下文LLM 的最新进展推动了内存容量显着扩展的模型的开发,能够处理长度超过100,000 个标记的历史记录。然而,尽管它们能够处理大量输入,但当前的长上下文LLM 很难生成同样长的输出。

为了探索这一限制,LongWriter使用多个需要不同长度响应的查询来探测最先进的长上下文模型的最大输出长度,例如“写一篇关于罗马帝国历史的 10,000 字的文章”。结果表明,所有模型始终无法产生超过 2,000 字的输出。同时,对用户交互日志的分析显示,超过 1% 的用户提示明确要求输出超过此限制,这凸显了当前研究迫切需要克服这一限制。

为了解决这个问题,LongWriter 引入了AgentWrite,这是一种基于代理的管道,可将超长生成任务分解为子任务,使现成的 LLM 能够生成超过 20,000 个单词的连贯输出。利用 AgentWrite,LongWriter 构建了 LongWriter-6k,这是一个包含 6,000 个 SFT 数据样本的数据集,输出长度从 2k 到 32k 个单词不等。通过将此数据集纳入模型训练,LongWriter 成功地将现有模型的输出长度扩展到 10,000 个单词以上,同时保持了输出质量。

LongWriter 还开发了 LongBench-Write,这是一个用于评估超长生成能力的综合基准。通过 DPO 进一步改进的 9B 参数模型在此基准上实现了最先进的性能,甚至超越了更大的专有模型。

在这里插入图片描述

LongWriter:10,000+ 单词生成框架

长上下文大型语言模型(LLM) 的最新进展导致了内存容量显着增加的模型的创建,这些模型能够处理超过100,000 个标记的历史记录。尽管能够处理大量输入,但当前的长上下文模型仍难以生成相当长度的输出。为了研究这一限制,LongWriter 通过各种需要不同响应长度的查询来检查最先进的长上下文模型的最大输出长度,例如“写一篇10,000 字的关于罗马帝国历史的文章”。根据调查结果,LongWriter 观察到所有模型都无法生成超过2,000 字的输出。此外,对用户交互日志的分析表明,超过1% 的用户提示特别要求超出此限制的输出,凸显了当前研究迫切需要解决这一问题。
在这里插入图片描述
LongWriter 的研究揭示了一个关键见解:输出长度的限制主要源于监督微调 (SFT) 数据集的特性。具体而言,LongWriter 发现,尽管模型在预训练阶段接触了更长的序列,但其最大生成长度实际上受到其 SFT 数据集中存在的输出长度上限的限制。这一发现解释了当前模型中普遍存在的 2,000 字生成限制,因为现有的 SFT 数据集很少包含超过此长度的示例。此外,由于许多数据集都是从最先进的 LLM 中提炼出来的,因此它们也从其源模型继承了输出长度限制。

为了解决这一限制,LongWriter 引入了 AgentWrite,这是一种基于代理的新型管道,旨在利用现成的 LLM 自动构建扩展的连贯输出。AgentWrite 分为两个阶段:首先,它根据用户的输入制定详细的写作计划,概述每个段落的结构和目标字数。然后,按照这个计划,它会提示模型按顺序生成每个段落的内容。LongWriter 的实验证实,AgentWrite 可以生成多达 20,000 个单词的高质量连贯输出。

在 AgentWrite 管道的基础上,LongWriter 利用 GPT-4o 生成了 6,000 个长输出 SFT 数据,命名为 LongWriter-6k,并将这些数据添加到训练现有模型中。值得注意的是,LongWriter-6k 成功释放了模型生成长度超过 10,000 字的结构良好的输出的能力。为了严格评估这种方法的有效性,LongWriter 开发了 LongBench-Write 基准,其中包含一组多样化的用户写作指令,输出长度规格范围从 0-500 字、500-2,000 字、2,000-4,000 字和超过 4,000 字。在 LongBench-Write 上的评估表明,LongWriter 的 9B 大小模型达到了最先进的性能,甚至与更大的专有模型相比也是如此。LongWriter 进一步构建偏好数据并使用 DPO 帮助模型更好地遵循长写作指令并生成更高质量的书面内容,这也已通过实验证明是有效的。

总而言之,LongWriter 的工作做出了以下新颖的贡献:

  • **生成长度限制分析:**LongWriter 确定了限制当前长上下文 LLM 输出长度的主要因素,即 SFT 数据中对输出长度的限制。
  • **AgentWrite:**为了克服这一限制,LongWriter 提出了 AgentWrite,它使用分而治之的方法,利用现成的 LLM 自动构建具有超长输出的 SFT 数据。使用此方法,LongWriter 构建了 LongWriter-6k 数据集。
  • **扩展当前 LLM 的输出窗口大小:**LongWriter 将 LongWriter-6k 数据集整合到其 SFT 数据中,成功将现有模型的输出窗口大小扩展至 10,000 多个字,且不影响输出质量。LongWriter 表明 DPO 进一步增强了模型的长文本写作能力。

AgentWrite:自动数据构建

为了利用现成的 LLM 自动生成输出较长的 SFT 数据,LongWriter 设计了 ​​AgentWrite,一种分而治之式的代理管道。AgentWrite 首先将长篇写作任务分解为多个子任务,每个子任务仅要求模型写一段话。然后模型按顺序执行这些子任务,LongWriter 将子任务的输出连接起来以获得最终的长篇输出。这种使用 LLM 代理将复杂任务分解为多个子任务的方法已经应用于问题解决、软件开发和模型评估等各个领域。LongWriter 的工作首次探索了集成规划以使模型能够完成复杂的长篇写作任务。下面详细介绍了 AgentWrite 的每个步骤。

在这里插入图片描述

第一步:计划

LongWriter 受到人类作家思维过程的启发,人类作家通常首先为长篇写作任务制定一个总体计划,LongWriter 利用 LLM 的规划功能,在给定写作指示的情况下输出这样的写作大纲。该计划包括每个段落的主要内容和字数要求。LongWriter 使用的提示如下:

“I need you to help me break down the following long-form writing instruction into multiple subtasks. Each subtask will guide the writing of one paragraph in the essay and should include the main points and word count requirements for that paragraph. The writing instruction is as follows: {User Instruction}. Please break it down in the following format, with each subtask taking up one line:

Paragraph 1 – Main Point: [Describe the main point of the paragraph, in detail] – Word Count: [Word count requirement, e.g., 400 words]
Paragraph 2 – Main Point: [Describe the main point of the paragraph, in detail] – Word Count: [Word count requirement, e.g. 1000 words].

Make sure that each subtask is clear and specific, and that all subtasks cover the entire content of the writing instruction. Do not split the subtasks too finely; each subtask’s paragraph should be no less than 200 words and no more than 1000 words. Do not output any other content.”

第二步:书写

在获得步骤 I 中的写作计划后,LongWriter 串行调用 LLM 完成每个子任务,逐段生成写作内容。为了保证输出的连贯性,在 LongWriter 调用模型生成第 n 段时,会将之前生成的 n-1 段也一并输入,让模型根据已有的写作历史继续写下一段。虽然这种串行方式无法并行调用模型同时完成多个子任务,输入长度也会变长,但 LongWriter 在验证中表明,这种方式得到的写作整体连贯性和质量远优于并行生成的输出。LongWriter 使用的提示为:

Writing instruction:
{User Instruction}
Writing steps:
{The writing plan generated in Step I}
Already written text:
{Previous generated (n-1) paragraphs}

验证

LongWriter 在两个长篇写作数据集上测试了所提出的 AgentWrite 方法的生成长度和质量。第一个数据集 LongWrite-Ruler 用于精确测量该方法可以提供的输出长度。第二个数据集 LongBench-Write 主要用于评估模型生成的内容在长度和写作质量方面与用户指示的匹配程度。

LongBench-Write :为了评估模型在更多元的长篇写作指令上的表现,LongWriter 收集了 120 条不同的用户写作提示,其中 60 条为中文,60 条为英文。为了更好地评估模型的输出长度是否符合用户要求,LongWriter 确保这些指令都包含明确的字数要求。这些指令根据字数要求分为 0-500 字、500-2,000 字、2,000-4,000 字和 4,000 字以上四个子集。此外,指令根据输出类型分为文学与创意写作、学术与专著、科普、实用写作、新闻报道、社区论坛和教育培训七大类。

在评估过程中,LongWriter 采用两个指标:一个用于对输出长度进行评分,另一个用于对输出质量进行评分。模型的输出长度根据其与说明中指定的要求的接近程度进行评分。对于输出质量,LongWriter 使用 LLM-as-a-judge 方法,选择最先进的GPT-4o模型从六个维度对输出进行评分:相关性、准确性、连贯性、清晰度、广度和深度以及阅读体验。最终得分是通过对长度得分和质量得分取平均值来计算的。

验证结果:LongWriter 在 LongWrite-Ruler 上展示了输出长度测量结果,发现 AgentWrite 成功将 GPT-4o 的输出长度从最大 2k 字扩展到大约 20k 字。LongWriter 还在 LongBench-Write 上评估了输出质量和对所需输出长度的遵守情况,表明在评估 AgentWrite 的性能时,GPT-4o 可以成功完成长度在 2,000 字以下的输出任务。
在这里插入图片描述

监督微调

LongWriter 基于最新的两个开源模型 GLM-4-9B 和 Llama-3.1-8B 进行训练。这两个模型都是基础模型,支持最大 128k token 的上下文窗口,天然适合在长输出上进行训练。为了提高训练效率,LongWriter 采用了带损失权重的打包训练。在这两个模型上训练后,得到了两个模型:LongWriter-9B(简称 GLM-4-9B-LongWriter)和 LongWriter-8B(简称 Llama-3.1-8B-LongWriter)。

同时,LongWriter 注意到,如果按序列平均损失,即取批次内每个序列的平均损失的平均值,则长输出数据中每个目标 token 对损失的贡献将明显小于短输出数据。在 LongWriter 的实验中,还发现这会导致模型在长输出任务上的表现不佳。因此,LongWriter 选择了一种按 token 平均损失的损失加权策略,其中损失被计算为该批次内所有目标 token 损失的平均值。

所有模型均使用具有 8xH800 80G GPU 和 DeepSpeed+ZeRO3+CPU 卸载的节点进行训练。LongWriter 使用批大小为 8、学习率为 1e-5 和打包长度为 32k。模型训练了 4 个 epoch,大约需要 2,500-3,000 步。

对齐(DPO)

为了进一步提高模型的输出质量并增强其遵循指令长度约束的能力,LongWriter 在监督微调的 LongWriter-9B 模型上执行直接偏好优化 (DPO)。DPO 数据来自 GLM-4 的聊天 DPO 数据(约 50k 个条目)。此外,LongWriter 构建了 4k 对专门针对长格式写作指令的数据。对于每个写作指令,LongWriter 从 LongWriter-9B 中抽取 4 个输出,并按照特定方法对这些输出进行评分。长度遵循分数也会在计算时合并。然后选择得分最高的输出作为正样本,并从其余三个输出中随机选择一个作为负样本。

最终的模型 LongWriter-9B-DPO 在上述数据混合上进行了 250 步训练。LongWriter 遵循 DPO 训练的特定配方。

LongWriter:实验和结果

LongWriter 在 LongBench-Writer 上评估了 4 个专有模型和 5 个开源模型,以及经过训练的 LongWriter 模型。据 LongWriter 所知,Suri-IORPO 是唯一一个也适用于长文本生成的先前模型。它基于 Mistral-7B-Instruct-v0.2 使用 LoRA 进行训练。与 LongWrite-Ruler 上的评估设置一致,LongWriter 将输出温度设置为 0.5,并将模型的生成最大令牌参数配置为其 API 调用允许的最大值。对于开源模型,它设置为 32,768。
在这里插入图片描述

大多数先前的模型无法满足超过 2,000 字的长度要求,而 LongWriter 模型始终能够对此类提示提供更长、更丰富的响应。

观察各个要求长度范围内提示的输出长度得分 SlS_lSl​,LongWriter 发现之前的模型在 [2k, 4k) 范围内的提示上普遍表现不佳(得分低于 70),只有 Claude 3.5 Sonnet 取得了不错的分数。对于 [4k, 20k) 范围内的提示,几乎所有之前的模型都完全无法达到目标输出长度,甚至得分为 0(即所有输出长度均小于要求长度的三分之一)。通过添加来自 LongWriter-6k 的训练数据,LongWriter 训练后的模型可以有效达到要求的输出长度,同时保持良好的质量,正如 [2k, 20k) 范围内的得分和散点图所表明的那样。
在这里插入图片描述

DPO有效地提高了模型的输出质量和满足长生成中长度要求的能力。

通过对比 LongWriter-9B 和 LongWriter9B-DPO 的得分,我们发现 DPO 显著提升了 Sl (+4%) 和 Sq (+3%) 的得分,并且这种提升在所有范围内都是一致的。这表明在长代场景下,DPO 仍然有助于提升模型的输出质量,能够更好地将模型的输出长度与请求的长度对齐。后一个结论最近也在 Yuan 等人 (2024) 的较短代中观察到。我们还手动注释了 GPT-4o 和三个 longwriter 模型在 LongBench-Write 中的输出结果的成对胜负,并在图 9 中将结果可视化。我们可以看到,在 58% 的情况下,人类更喜欢 DPO 训练的模型而不是 LongWriter-9B。此外,尽管参数较少,但 LongWriter-9B-DPO 与 GPT-4o 打成平手。
在这里插入图片描述

LongWriter 模型的输出长度限制扩展到 10k 到 20k 字之间,而需要更多具有长输出的数据来支持更长的输出。

继 LongWrite-Ruler 测试之后,我们还展示了 LongWriter 模型的 LongWrite-Ruler 测试结果。结果表明,它们的最大生成长度在 10k-20k 字之间。缺乏具有更长输出的 SFT 数据可能是阻止模型实现更长输出长度的主要原因。

总结

在本文中,我们讨论了 LongWriter,这是一个基于代理的管道,它将超长生成任务分解为子任务,确定了当前 LLM 的 2,000 字生成限制,并建议通过在对齐期间添加长输出数据来增加其输出窗口大小。为了自动构建长输出数据,LongWriter 开发了 AgentWrite,这是一个基于代理的管道,它使用现成的 LLM 创建扩展的、连贯的输出。LongWriter 使用构建的 LongWriter-6k 成功地将当前 LLM 的输出窗口大小扩展到 10,000 字以上。对训练数据的广泛消融研究证明了这种方法的有效性。对于未来的工作,LongWriter 建议以下三个方向:1. 扩展 AgentWrite 框架以构建具有更长输出的数据,以进一步扩展 LLM 的输出窗口大小。2. 改进 AgentWrite 框架以获得更高质量的长输出数据。3. 更长的模型输出给推理效率带来了挑战。已经提出了几种方法来提高推理效率。值得研究这些方法如何在不影响生成质量的情况下确保提高模型效率。

原文地址:https://www.unite.ai/longwriter-unleashing-10000-word-generation-from-long-context-llms/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三维模型单体化软件:地理信息与遥感领域的精细化革命

在地理信息与遥感科学日新月异的发展浪潮中,单体化软件作为一股强大的驱动力,正引领着我们迈向空间信息处理与应用的新纪元。本文旨在深度解析单体化软件的核心价值、技术前沿、实践应用及面临的挑战,共同探讨这一技术如何塑造行业的未来。 …

【手撕OJ题】——BM8 链表中倒数最后k个结点

目录 🕒 题目⌛ 方法① - 直接遍历⌛ 方法② - 快慢指针 🕒 题目 🔎 BM8 链表中倒数最后k个结点【难度:简单🟢】 输入一个长度为 n 的链表,设链表中的元素的值为 a i a_i ai​ ,返回该链表中倒…

一款MySQL数据库实时增量同步工具,能够监听MySQL二进制日志(Binlog)的变动(附源码)

背景 作为一名CURD的程序员,少不了跟MySQL打交道,在同步数据的时候,MySQL的Binlog显得重中之重,所以处理Binlog的工具尤为重要。 其中阿里巴巴开源的canal 更是耳闻目睹,但是今天小编给大家介绍另外一款MySQL数据库实…

【C++11】常用新语法②(类的新功能 || 可变参数模板 || lambda表达式 || 包装器)

🔥个人主页: Forcible Bug Maker 🔥专栏: C 目录 🌈前言🔥类的新功能新增默认成员函数强制生成默认函数的关键字default禁止生成默认函数的关键字delete 🔥可变参数模板递归函数方式展开参数包…

论文翻译:Benchmarking Large Language Models in Retrieval-Augmented Generation

https://ojs.aaai.org/index.php/AAAI/article/view/29728 检索增强型生成中的大型语言模型基准测试 文章目录 检索增强型生成中的大型语言模型基准测试摘要1 引言2 相关工作3 检索增强型生成基准RAG所需能力数据构建评估指标 4实验设置噪声鲁棒性结果负面拒绝测试平台结果信息…

算法5:位运算

文章目录 小试牛刀进入正题 没写代码的题,其链接点开都是有代码的。开始前请思考下图: 小试牛刀 位1的个数 class Solution { public:int hammingWeight(int n) {int res 0;while (n) {n & n - 1;res;}return res;} };比特位计数 class Solution…

计算机毕业设计选题推荐-猫眼电影数据可视化分析-Python爬虫-k-means算法

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

进程和文件痕迹排查——LINUX

目录 介绍步骤 介绍 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在早期面向进程设计的计算机结构中,进程是程序的基本执行实体&…

fastadmin 安装

环境要求,大家可以参考官方文档的,我这里使用的是phpstudy,很多已经集成了。 注意一点,PHP 版本:PHP 7.4 。 第二步:下载 下载地址:https://www.fastadmin.net/download.html 进入下载地址后…

IDEA:Terminal找不到npm

Terminal的命令失效通过修改cmd.exe的方式还是不生效的话,考虑是windwos11 默认idea不是通过管理员启动的,如下图修改就可以了。

前端vue 3中使用 顶象 vue3 版本

顶象 验证 的插件 不知道大家使用过没有 顶象-业务安全引领者&#xff0c;让数字世界无风险 可以防止 机器人刷接口 等 可以在任何 加密操作中使用 下面我直接 贴代码 解释 <script src"https://cdn.dingxiang-inc.com/ctu-group/captcha-ui/v5/index.js" cro…

第12章 网络 (2)

目录 12.5 网络命名空间 12.6 套接字缓冲区 12.6.1 使用 sk_buff 管理数据 12.6.2 管理套接字缓冲区数据 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;查看后续文章。 12.5 网络命名空间 一个网卡可能只在某个特定命名空间可见。 struct net&#xff1a; 表…

C语言贪吃蛇之BUG满天飞

C语言贪吃蛇之BUG满天飞 今天无意间翻到了大一用C语言写的贪吃蛇&#xff0c;竟然还标注着BUG满天飞&#xff0c;留存一下做个纪念&#xff0c;可能以后就找不到了 /* 此程序 --> 贪吃蛇3.0 Sur_流沐 当前版本&#xff1a; Bug满天飞 */ #include<stdio.h> #includ…

Linux C、C++编程之线程同步

【图书推荐】《Linux C与C一线开发实践&#xff08;第2版&#xff09;》_linux c与c一线开发实践pdf-CSDN博客《Linux C与C一线开发实践&#xff08;第2版&#xff09;&#xff08;Linux技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com…

qt处理表格,Qtxlsx库文件的安装以及导入

qt想要处理excel表格的&#xff0c;这个过程中避免不了使用Qtxlsx这个库文件。这几天花了几天时间&#xff0c;终于本地调通了。记录一下。 关于Qtxlsx的使用&#xff0c;大致分为2中方法。 方法一&#xff1a;直接下载对应的xlsx文件&#xff0c;然后在.pro文件中 这种方法是…

使用Java往Geoserver发布tif图层和shp图层

1. Maven依赖 栅格文件对应Tif文件 (即: 栅格就是tif) 矢量文件对应shp文件(即: 矢量就是shp) 注: 有的依赖可能在中央仓库及一些镜像仓库找不到需要手动指定仓库, 在依赖最下方 <!-- 中文转拼音工具类 --><dependency><groupId>com.belerweb</groupId&g…

指针的学习和理解

初级 1、指针的概念 在64位操作系统中&#xff0c;不管什么类型的指针都占8个字节 int a1; int* p&a;//p就是一个整型的指针&#xff0c;保存了a的地址2、指针和变量 int* p&a;* p100; // 等价于a100p //p&a*有两种定义&#xff1a; 定义的时候&#xff08;前…

【工具类】Java优雅的将XML转为JSON格式、XML转JSON

Java优雅的将XML转为JSON格式、XML转JSON 1. 导入依赖1.1 Maven使用1.2 Gradle使用 2. 代码编写3.运行示例 1. 导入依赖 1.1 Maven使用 <dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</vers…

TCP连接过程

文章目录 TCP连接过程 附录TCP报文中关键术语字段 后面再完整出理论、出实战、出总结 TCP连接过程 三次握手&#xff08;Three-Way Handshake&#xff09;过程。 TCP抓包结果分析&#xff1a; step1&#xff1a;Client1客户端--->Server1服务器发送SYN&#xff08;同步…

【C++二分查找 前缀和】1658. 将 x 减到 0 的最小操作数

本文涉及的基础知识点 C二分查找 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode1658. 将 x 减到 0 的最小操作数 给你一个整数数组 nums 和一个整数 x 。每一次操作时&#xff0c;你应当移除数组 nums 最左边或最右边的元素&am…