LongWriter:释放10,000+字生成的长上下文LLM
当前的长上下文大型语言模型(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数据样本,输出长度从2,000字到32,000字不等。通过将此数据集纳入模型训练中,LongWriter成功地将现有模型的输出长度扩展到超过10,000字,同时保持输出质量。LongWriter还开发了LongBench-Write基准,用于评估超长生成能力。经过DPO改进的9B参数模型在此基准上实现了最先进的性能,甚至超过了更大的专有模型。在本文中,我们将讨论LongWriter框架,探索其架构,并将其性能与最先进的长上下文LLM进行比较。让我们开始吧。LongWriter:10,000+字生成框架最近的长上下文LLM的进展导致了具有显著扩大内存容量的模型的发展,这些模型能够处理超过100,000个令牌的历史。尽管它们能够处理广泛的输入,但当前的长上下文LLM仍然难以生成同样长的输出。为了探索这个限制,LongWriter探索了最先进的长上下文模型的最大输出长度,使用多个需要不同长度响应的查询,例如“写一篇10,000字的关于罗马帝国历史的文章”。根据发现,LongWriter观察到所有模型一致地无法生成超过2,000字的输出。此外,用户交互日志的分析显示,超过1%的用户提示明确要求输出超过这个限制,突出了当前研究中需要克服这个限制的迫切需求。LongWriter的研究揭示了一个关键的见解:输出长度的限制主要根源于SFT数据集的特征。具体来说,LongWriter发现,模型的最大生成长度在很大程度上受到其SFT数据集中输出长度的上限的限制,尽管它在预训练阶段接触到了更长的序列。这种发现解释了当前模型中普遍的2,000字生成限制,因为现有的SFT数据集很少包含超过这个长度的示例。此外,由于许多数据集是从最先进的LLM中提取的,它们也继承了源模型的输出长度限制。为了解决这个限制,LongWriter引入了AgentWrite,一种代理式管道,用于分解超长生成任务为子任务,允许现成的LLM生成连贯的输出。AgentWrite首先将长生成任务分解为多个子任务,每个子任务需要模型写一个段落。然后,模型按照顺序执行这些子任务,LongWriter将子任务输出连接起来以获得最终的长输出。这种方法已经在各种领域中应用,例如问题解决、软件开发和模型评估。LongWriter的工作是首次探索将规划集成到模型中,以使其能够完成复杂的长文本生成任务。每个步骤的AgentWrite都在下面详细介绍。步骤I:计划受人类作家思考过程的启发,LongWriter利用LLM的规划能力,根据写作指令输出写作大纲。这个大纲包括每个段落的主要内容和字数要求。LongWriter使用的提示如下:“我需要你帮助我将以下长文生成指令分解为多个子任务。每个子任务将指导写一个段落,并应包括该段落的主要点和字数要求。写作指令如下:{用户指令}。请按照以下格式分解,每个子任务占一行: 段落1 – 主要点:[描述该段落的主要点,详细] – 字数:[字数要求,例如400字] 段落2 – 主要点:[描述该段落的主要点,详细] – 字数:[字数要求,例如1000字]。” 请确保每个子任务清晰具体,并且所有子任务涵盖整个写作指令的内容。不要将子任务分解得太细,每个子任务的段落应至少200字,至多1000字。不要输出任何其他内容。”步骤II:写作在获得步骤I的写作计划后,LongWriter顺序地调用LLM来完成每个子任务,生成写作内容,部分部分。为了确保输出的连贯性,当LongWriter调用模型来生成第n个部分时,之前生成的n-1个部分也被输入,以便模型可以继续写作下一个部分,基于现有的写作历史。虽然这种顺序方式防止了对模型的并行调用来完成多个子任务,同时输入长度变得更长,但LongWriter在验证中表明,这种方式获得的写作的整体连贯性和质量远远优于并行生成的输出。LongWriter使用的提示如下:“你是一个优秀的写作助手。我将给你一个原始的写作指令和我的计划步骤。我还将提供我已经写的文本。请帮助我继续写作下一个段落,基于写作指令、计划步骤和已经写的文本。”写作指令: {用户指令} 计划步骤: {步骤I生成的写作计划} 已经写的文本: {之前生成的(n-1)个段落}请整合原始写作指令、计划步骤和已经写的文本,现在继续写作{计划的第n个段落,即写作计划中的第n行}。”验证LongWriter在两个长文生成数据集上测试了AgentWrite方法的生成长度和质量。第一个数据集LongWrite-Ruler,用于测量方法可以提供的输出长度。第二个数据集LongBench-Write,主要用于评估模型生成的内容与用户指令在长度和写作质量方面的吻合程度。LongBench-Write:为了评估模型在更广泛的长文生成指令上的性能,LongWriter收集了120个多样化的用户写作提示,包括60个中文和60个英文。为了更好地评估模型的输出长度是否满足用户要求,LongWriter确保所有这些指令都包含明确的字数要求。这些指令被分为四个子集,基于字数要求:0-500字,500-2000字,2000-4000字和超过4000字。此外,指令被分类为七种类型,基于输出类型:文学和创意写作、学术和专著、流行科学、功能性写作、新闻报道、社区论坛和教育与培训。在评估中,LongWriter采用了两个指标:一个用于评估输出长度,另一个用于评估输出质量。模型的输出长度是根据其接近指令中指定的要求的程度来评分的。对于输出质量,LongWriter使用LLM作为评判的方法,选择最先进的GPT-4o模型来评估输出在六个维度:相关性、准确性、连贯性、清晰性、广度和深度以及阅读体验。最终得分是通过平均长度得分和质量得分计算得出。验证结果:LongWriter在LongWrite-Ruler上呈现了输出长度的测量,并发现AgentWrite成功地将GPT-4o的输出长度从2k字扩展到约20k字。LongWriter还评估了LongBench-Write上的输出质量和输出长度的吻合程度,表明GPT-4o可以成功完成输出长度在2,000字以下的任务。监督微调LongWriter基于两个最新的开源模型进行训练,分别是GLM-4-9B和Llama-3.1-8B。两个模型都是基础模型,支持最多128k个令牌的上下文窗口,使其自然适合用于长输出的训练。为了使训练更加高效,LongWriter采用了带有损失加权的打包训练。两个模型的训练结果分别是LongWriter-9B(GLM-4-9B-LongWriter的缩写)和LongWriter-8B(Llama-3.1-8B-LongWriter的缩写)。同时,LongWriter注意到,如果损失是按序列平均的,即每个序列的平均损失在批次中计算,那么在长输出数据中,每个目标令牌对损失的贡献将远远小于那些输出较短的数据。因此,LongWriter选择了一种损失加权策略,即按令牌平均损失,其中损失是批次中所有目标令牌的损失的平均值。所有模型都使用一个带有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评估了4个专有模型和5个开源模型在LongBench-Write上的性能,以及训练的LongWriter模型。据LongWriter所知,Suri-IORPO是唯一一个也针对长文本生成进行对齐的先前模型。它是基于Mistral-7B-Instruct-v0.2使用LoRA训练的。与LongWrite-Ruler上的评估设置一致,LongWriter将输出温度设置为0.5,并配置模型的生成最大令牌参数为其API调用允许的最大值。对于开源模型,它被设置为32,768。大多数之前的模型无法满足超过2,000字的长度要求,而LongWriter模型一致地提供了更长、更丰富的响应。观察每个长度范围内的输出长度评分,LongWriter发现之前的模型通常在[2k, 4k)范围内的提示上表现较差(评分低于70),只有Claude 3.5 Sonnet获得了不错的评分。对于[4k, 20k)范围内的提示,几乎所有之前的模型都完全无法达到目标输出长度,甚至评分为0(意味着所有输出长度都小于所需长度的三分之一)。通过添加LongWriter-6k的训练数据,LongWriter的训练模型可以有效地达到所需的输出长度,同时保持良好的质量,如[2k, 20k)范围和散点图中的评分所示。DPO有效地提高了模型的输出质量和其遵循长度约束的能力。通过比较LongWriter-9B和LongWriter-9B-DPO的评分,我们发现DPO显著提高了Sl(+4%)和Sq(+3%)评分,这种提高在所有范围内都是一致的。这表明在长文生成场景中,DPO仍然有助于提高模型的输出质量,并可以更好地使模型的输出长度与请求的长度一致。后者也最近在Yuan等人(2024年)的较短生成中被观察到。我们还手动注释了GPT-4o和三个LongWriter模型在LongBench-Write上的输出的配对胜利和失败,并将结果可视化在图9中。我们可以看到,人类更喜欢DPO训练的模型,而LongWriter-9B-DPO尽管参数更少,但也与GPT-4o取得了平局。 LongWriter模型的输出长度限制被扩展到10k至20k字之间,而支持更长输出所需的更多数据仍在开发中。根据LongWrite-Ruler测试的结果,LongWriter模型的最大生成长度在10k至20k字之间。缺乏SFT数据中的长输出可能是模型无法达到更长输出长度的主要原因。 最后的思考在这项工作中,我们讨论了LongWriter,一种代理式管道,用于分解超长生成任务为子任务,找到了当前LLM的2,000字生成限制,并提出了增加其输出窗口大小的方法。为了自动构建长输出数据,LongWriter开发了AgentWrite,一种代理式管道,使用现成的LLM创建扩展的连贯输出。LongWriter成功地将现有LLM的输出窗口大小扩展到超过10,000字,同时保持输出质量。广泛的消融研究表明了这种方法的有效性。对于未来的工作,LongWriter建议以下三个方向:1. 扩展AgentWrite框架以构建更长输出的数据,从而进一步扩展LLM的输出窗口大小。2....