摘要
当前的长上下文大型语言模型(LLMs)可以处理多达 100,000 个令牌的输入,但难以生成超过甚至 2,000 字的输出。通过控制实验,我们发现模型的有效生成长度本质上受到在监督微调(SFT)期间所见样本的限制。换句话说,它们的输出限制是由于现有 SFT 数据集中的长输出示例稀缺。为了解决这个问题,我们引入了 AgentWrite,一个基于代理,将超长生成任务分解为子任务,使现成的LLMs能够生成超过 20,000 字的连贯输出。利用 AgentWrite,我们构建了 LongWriter-6k 数据集,包含 6,000 个 SFT 数据,输出长度从 2k 到 32k 字不等。通过将此数据集纳入模型训练,我们成功地将现有模型的输出长度扩展到超过 10,000 字,同时保持输出质量。我们还开发了 LongBench-Write,一个全面的基准,用于评估超长生成能力。 通过 DPO 进一步改进的我们的 9B 参数模型,在这个基准测试中达到了最先进的性能,甚至超越了更大规模的专有模型。总的来说,我们的工作表明现有的长上下文LLM已经具备了更大的输出窗口的潜力——你所需要的是在模型对齐期间使用具有扩展输出的数据,以解锁这一能力。我们的代码和模型位于:github.com/THUDM/LongWriter。
-
Introduction
近期,在长上下文大型语言模型(LLMs)领域的发展,导致了能够处理超 100,000 个令牌长度历史的模型的开发(Anthropic, 2024;Reid 等,2024;GLM , 2024)。然而,尽管它们能够处理大量输入,但当前的长上下文模型(LLMs)在生成同样长度的输出方面仍然存在困难。为了探讨这一限制,我们对最先进的长上下文模型进行了多次查询的测试,这些查询需要不同长度的响应,例如,“撰写一篇关于罗马帝国历史的 10,000 字文章”(有关此测试的详细信息,请参阅第 2 节)。从图 1 的结果中,我们发现所有模型始终无法生成超过 2,000 字长度的输出。同时,从 WildChat 的用户交互日志(Zhao 等,2024)的分析中发现,超过 1%的用户提示明确要求超过这个限制的输出,这凸显了当前研究中克服这一限制的迫切需求。
作为一项初步研究,我们首先探讨了当前模型中观察到的生成长度限制的根本原因(第 2 节)。我们的研究揭示了一个关键的见解:输出长度的约束主要源于监督微调(SFT)数据集的特性。具体来说,我们发现,尽管模型在预训练阶段接触到了更长的序列,但其最大生成长度实际上是由其 SFT 数据集中的输出长度上限决定的(Xiong 等人,2024;Fu 等人,2024)。这一发现解释了当前模型普遍存在的 2000 字生成长度限制,因为现有的 SFT 数据集很少包含超过这个长度的例子。此外,由于许多数据集是从最先进的LLMs(Chiang 等人,2023;Ding 等人,2023)中提炼而来,它们也从其源模型继承了输出长度的限制。
为了解决这一限制,我们引入了 AgentWrite,一种基于代理的流水线设计,旨在利用现成的LLMs自动构建扩展且连贯的输出(第 3 节)。AgentWrite 操作分为两个阶段:首先,根据用户输入,它制定一个详细的文章计划,概述每段的结构和目标字数。然后,按照这个计划,它依次提示模型为每段生成内容。我们的实验验证了 AgentWrite 能够生成高达 20,000 字的高质量和连贯输出。
基于 AgentWrite ,我们利用 GPT-4o 生成了 6000 个长输出的 SFT 数据,命名为 LongWriter-6k,并将这些数据加入到现有模型的训练中。值得注意的是,LongWriter6k 成功地使模型能够生成超过 10000 个单词的结构良好输出(第 4 节)。为了严格评估我们方法的有效性,我们开发了 LongBench-Write 基准,其中包含一组多样化的用户写作指令,输出长度规格从 0-500 字、500-2000 字、2000-4000 字以及超过 4000 字。在 LongBench-Write 上的评估显示,我们的 9B 大小模型在性能上达到了最先进的水平,甚至超过了更大的专有模型。我们进一步构建了偏好数据,并使用 DPO(Rafailov 等,2024)帮助模型更好地遵循长篇写作指令,生成高质量的书面内容,这一方法也通过实验得到了证明。
总之,我们的工作做出了以下新颖的贡献:
分析生成长度限制:我们确定了当前(长上下文)LLMs输出长度的主要限制因素,即 SFT 数据中的输出长度约束。
为了克服这一限制,我们提出了 AgentWrite,它使用了分而治之的方法与现成的LLMs工具,自动构建了具有超长输出的 SFT 数据。通过这种方法,我们构建了 LongWriter-6k 数据集。
当前LLMs输出窗口大小的扩展:我们将 LongWriter-6k 数据集整合到我们的 SFT 数据中,成功地将现有模型的输出窗口大小扩展到 10,000+个单词,同时不牺牲输出质量。我们表明,DPO 进一步增强了模型的长文本写作能力。
-
查找输出长度受限制的原因
首先,我们构建了 LongWrite-Ruler 评估,以探索LLMs生成长度的限制。然后,我们探讨了它们生成长度受限的原因:通过改变模型 SFT 阶段数据的最大输出长度,我们发现 LongWrite-Ruler 测试中训练模型的最大输出长度与 SFT 数据的最大输出长度之间存在显著的正相关关系。请注意,在本文中,输出长度以单词(或中文文本的字符)为单位进行测量,而不是以令牌为单位,因为不同的模型可能采用不同的分词方法。
LongWrite-Ruler。为了探索LLM能提供的最大输出长度,我们构建了一个轻量级测试:我们创建了 8 种不同的指令,每种语言四种,通过在指令中变化输出长度要求“L”。例如,“写一篇关于罗马帝国历史的 L 字文章”。在测试中,我们使用 L ∈ {1000, 2000, 5000, 10000, 20000, 30000},总共产生了 48 个测试提示(详细测试案例在附录 B 中)。
探索。我们在 LongWrite-Ruler 上测量了 4 个开源模型和 4 个专有模型(我们在表 5 中详细说明了评估的模型)的最大输出长度。在推理过程中,我们将温度设置为 0.5。对于专有模型,我们将生成时的 max tokens 参数配置为对应模型 API 调用支持的最大输出长度。对于开源模型,我们将其设置为 32k。在输出中,我们验证了没有模型因 max tokens 限制而产生截断的输出,这可能会低估它们的最大输出长度。同时,我们几乎观察不到重复内容生成的情况,这可能会导致过高的估计。结果可视化在图 1 中:对于每个长度要求(x 轴),我们绘制了模型在对应指令下的平均输出长度(y 轴)。我们使用对数刻度绘制 x 轴和 y 轴。从图中我们可以观察到,所有模型的最大输出长度大约为 2 千字。专有模型的有效输出窗口大小通常无法达到它们的最大 token 生成长度。 此外,由于拒绝案例数量的增加,当所需长度超过 10k 时,平均输出长度甚至会随着所需长度的增加而减少。
受控实验。我们假设常见的 2000 词输出长度限制是由于 SFT 数据中固有的输出长度限制造成的,也就是说,“一个人只能说他读过的内容”。为了测试这一假设,我们通过改变 SFT 数据进行一系列受控实验。在我们的实验中,我们以 GLM-4-9B(GLM et al., 2024)作为基础模型,并选择 GLM-4 的聊天 SFT 数据(总共 180k 数据,是 GLM-4 全部 SFT 数据的一部分)作为完整的 SFT 数据集。为了控制 SFT 数据的最大输出长度,我们分别过滤掉超过 500 词、1000 词和 2000 词的输出长度的数据。这产生了三个训练集,分别占原始数据的 72%、98%和 99.9%。
我们在这三个训练集上训练 GLM-4-9B 模型,并测量生成模型的最大输出长度在 LongWriter-Ruler 上的结果(测试 L ∈ {500, 1000, 2000, 4000})。如图 2 所示,模型的最大输出长度与 SFT 数据中的最大输出长度成正比,分别达到约 600、900 和 1800 个单词。这一最大输出长度的增加也对应于模型在每个所需长度上的平均输出长度的改进。这一发现表明,模型的输出限制是由于 SFT 数据中的输出长度不足。此外,这一限制无法通过LLM合成训练数据(Tunstall 等,2023;Abdin 等,2024)或通过迭代 SFT(Chen 等,2024b;Burns 等,2023)来克服,因为现有的模型生成的数据仍然无法突破长度限制。在接下来的章节中,我们将探讨构建具有更长输出长度的 SFT 数据的构建,以进一步释放模型在更长输出生成方面的潜力。
-
AGENTWRITE: 自动数据构建
利用现成的LLMs工具自动生成具有更长输出的 SFT 数据,利用AgentWrite,这是一种分而治之的agent 流水线(如图 3 所示)。AgentWrite 首先将长篇写作任务分解为多个子任务,每个子任务只需要模型编写一段段落。然后,模型按顺序执行这些子任务,并将子任务输出连接起来以获得最终的长输出。使用LLM代理将复杂任务分解为多个子任务的方法已经在诸如问题解决(Wu 等人,2023 年)、软件开发(Qian 等人,2023 年)和模型评估(Saha 等人,2024 年)等领域中应用。我们的工作是首次探索将规划集成到模型中,以完成复杂长篇写作任务。我们将详细介绍 AgentWrite 的每一步。
3.1 Plan
受人类作家思考过程的启发,作家通常会为长篇写作任务制定整体计划,这通常涉及规划结构并为每部分的内容和长度做打算。我们利用LLMs的规划能力,根据写作指令输出这样的写作大纲,包括每段的主要内容和字数要求。以下是我们的prompt:
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.
3.2 Write
获取了步骤 I 中的写作计划后,我们依次调用LLM来完成每个子任务,逐段生成写作内容。为了确保输出的一致性,当我们调用模型生成第 n 段时,我们还会输入之前生成的前 n-1 段,使模型能够基于现有的写作历史继续编写下一段。尽管这种依次调用的方式阻止了同时调用模型完成多个子任务,并且输入长度变长,但在我们的验证中,我们展示了通过这种方式获得的写作整体一致性与质量远超并行生成的输出。我们提供了使用的prompt:
You are an excellent writing assistant. I will give you an original writing instruction and my planned writing steps. I will also provide you with the text I have already written. Please help me continue writing the next paragraph based on the writing instruction, writing steps, and the already written text. Writing instruction: {User Instruction} Writing steps: {The writing plan generated in Step I} Already written text: {Previous generated (n-1) paragraphs} Please integrate the original writing instruction, writing steps, and the already written text, and now continue writing {The plan for the n-th paragraph, i.e., the n-th line in the writing plan} for me. If needed, you can add a small subtitle at the beginning. Remember to only output the paragraph you write, without repeating the already written text.
3.3 Validation 验证
我们使用两种长文本写作数据集对提出的 AgentWrite 方法的生成长度和质量进行测试。第一个是 LongWrite-Ruler(在第二节中介绍),用于测量方法能提供多长的输出。第二个是我们构建的 LongBenchWrite 基准,主要用于评估模型生成的内容在长度和写作质量上与用户指令的匹配程度。
LongBench-Write。为了评估模型在更广泛类型的长篇写作指令上的性能,我们收集了 120 个不同的用户写作提示,其中 60 个是中文,60 个是英文。为了更好地评估模型输出长度是否满足用户需求,我们确保所有这些指令都包含明确的字数要求。我们将这些指令按照字数要求分为四组:0-500 字,500-2000 字,2000-4000 字,以及超过 4000 字。此外,我们根据输出类型将指令分为七类:文学与创意写作,学术与专著,科普,功能写作,新闻报道,社区论坛,以及教育与培训。我们在表 1 中列出了每组的数据数量。
在评估过程中,我们采用两种指标:一种用于评估输出长度,另一种用于评估输出质量。我们希望模型的输出长度尽可能接近指令中规定的长度要求。因此,我们使用分段线性函数计算输出长度得分 S(其中 l 是所需长度,l 是实际输出长度):
换句话说,当输出长度符合要求时,得分为完美的 100 分。当输出长度大于要求的 4 倍或小于 1/3 倍时,得分线性衰减至 0。由于过短的输出往往比过长的输出更成问题,我们为过短的输出设置了更高的得分衰减系数。
为了自动评估输出质量,我们采用LLM-as-a-judge(郑等人,2024 年;白等人,2024 年 b)的方法。具体来说,我们选择最先进的 GPT-4o(OpenAI,2024 年 a)模型作为评判者,对输出在六个维度上进行评分:相关性、准确性、连贯性、清晰度、广度和深度,以及阅读体验(请参阅附录 C 中的评分提示)。为了尽可能地将质量指标与输出长度分离,我们在提示中指导评判者模型仅根据输出的质量进行评分,而不考虑其长度。我们通过六个维度的平均得分来获得整体输出质量得分 Sq。最终得分S_mean通过 Sl 和 Sq 的平均值计算得出。
验证结果。我们将LongWrite-Ruler上的输出长度测量结果展示在图 4 中。我们发现,AgentWriter 成功地将 GPT-4o 的最大输出长度从 2 千个单词扩展到大约 2 万个单词。此外,我们还在LongBench-Write上评估了输出质量和所需的输出长度的遵守情况。考虑到 GPT-4o 能够成功完成在评估 AgentWrite 的性能时,我们仅在指令要求输出长度为 2,000 字或更长的情况下应用 AgentWrite,并对 LongBench-Write 任务中的输出质量以及所需输出长度的遵守情况进行评估。对于输出长度在 2,000 字以下的任务,我们只评估输出质量。此外,我们还评估了一个名为“+Parallel”的 AgentWrite 变体,在第二步中并行调用模型为每段生成输出。
LongBench-Write的结果显示在表 2 中(不同质量维度的综合质量评分详细情况请参见表 6)。在加入 AgentWrite 后,GPT-4o 可以生成长达 20,000 字的内容。这显著提高了 GPT-4o 的长度遵循评分(S),尤其是在输出长度范围为[4,000, 20,000)字时。进一步分析质量评分(S),我们可以看到,AgentWrite 在扩展输出长度的同时,并没有牺牲输出的质量。通过在六个维度上比较质量评分,我们发现 AgentWrite 显著提高了广度和深度评分(+5%),同时略微降低了连贯性和清晰度评分(-2%)。在查看输出数据时,我们还注意到使用 AgentWrite 生成的输出偶尔会包含轻微的重复。例如,模型可能会重复前一段的内容,或者在输出中频繁提供总结。此外,我们发现,虽然+Parallel 略微提高了模型的输出长度评分,但它损害了 AgentWrite 的输出质量,尤其是在连贯性方面(-6%)。 这表明在 AgentWrite 的第二步中,有必要向模型提供之前生成的上下文。
-
LONGWRITER: 教模型生成超长输出
既然我们已经有了一个代理框架,该框架利用现成的LLMs自动生成更长的输出,我们现在很好奇:是否有可能将生成超长输出的能力教给LLMs,使它们能够在单个输出中完成长篇写作任务?带着这个问题,我们进行了模型训练实验。在接下来的部分中,我们将讨论训练数据的构建、模型训练和实验结果。
4.1 数据构建
我们首先从现有数据集选择 6000 条用户指令,这些指令需要长输出(超过 2000 个单词)。具体来说,我们从 GLM-4 的 SFT 数据(GLM 等人,2024 年)中选择 3000 条指令,主要为中文。此外,我们从 WildChat-1M(赵等人,2024 年)中选择 3000 条指令,这是用户与 ChatGPT/GPT-4 对话的公共日志,主要为英文。对于自动选择过程,我们使用 GPT-4o(OpenAI,2024a),利用附录 C 提供的提示。我们进一步应用基于规则的匹配来筛选出有毒指令和旨在进行数据抓取的指令。我们手动检查自动选择的指令,并验证超过 95%的指令确实需要几千个单词的回答。
对于这 6000 条指令,我们然后使用 AgentWrite (在第 3 节中介绍)与 GPT4o 获取响应。我们进一步处理获取的数据,包括过滤掉输出过短的案例以及在 AgentWrite 的第一步中获取的规划步骤过多导致模型输出崩溃的情况。大约有 0.2%的数据被过滤掉。同时,我们清理了模型可能在每个输出部分的开头添加的无关标识符,如“段落 1”、“段落 2”等。我们称我们最终获得的长输出数据集为“longwriter-6k”。
在模型训练中,为了确保模型的通用能力,我们将 longwriter-6k 与通用 SFT 数据结合,形成整个训练集。在我们的实验中,我们使用 GLM-4 的 SFT 数据(GLM 等人,2024)中的 180k 聊天 SFT 数据作为通用 SFT 数据。获取的数据的输出长度分布显示在图 5 中。我们可以看到,longwriter-6k 有效地补充了输出长度在 2 千字以上的一般 SFT 数据的稀缺性,并且 longwriter-6k 的输出长度在 2 千到 1 万字之间相对均匀分布。
4.2 模型训练
监督微调。我们基于两个最新的开源模型进行训练,分别是 GLM-4-9B 和 Llama-3.1-8B。这两个都是基础模型,支持上下文窗口最多可达 128k 个令牌,因此自然适合用于长输出的训练。为了使训练更加高效,我们采用了packing training with loss weighting(Bai et al., 2024a)。在对这两个模型进行训练后,我们得到了两个模型:LongWriter-9B(GLM-4-9B-LongWriter 的缩写),和 LongWriter-8B(Llama-3.1-8B-LongWriter 的缩写)。
同时,我们注意到,如果我们通过序列平均损失,即在一批中每个序列的平均损失的平均值,那么在长输出数据中每个目标令牌对损失的贡献将远小于短输出的那些。在我们的实验中,我们还发现这导致了长输出任务上的模型性能不佳。因此,我们选择了一种损失加权策略,通过token平均损失,其中损失是计算在该批中所有目标令牌的损失的平均值。
所有模型均使用配备 8xH800 80G GPU 的节点,以及 DeepSpeed + ZeRO3 + CPU offloading (Rasley 等人,2020 年)进行训练。我们使用批处理大小为 8,学习率为 1e-5,以及打包长度为 32k。我们对模型进行 4 轮训练,大约需要 2,500-3,000 步。
对齐alignment(DPO)。为了进一步提高模型的输出质量并增强其遵循指令长度限制的能力,我们在监督微调的 LongWriter-9B 模型上执行直接偏好优化(Rafailov 等,2024 年)。DPO 数据来自 GLM-4 chat DPO 数据(大约 5 万条记录)。此外,我们构建了 4 千对数据,专门针对长文写作指令。具体来说,对于每条写作指令,我们从 LongWriter-9B 中采样 4 个输出,并按照 Hou 等(2024 年)的方法对这些输出进行评分。我们还结合了一个长度遵循分数,计算方法见公式 1。然后,我们选择得分最高的输出作为正样本,并随机选择剩余的三个输出之一作为负样本。最终得到的模型,LongWriter-9B-DPO,在上述数据混合上进行了 250 步的训练。我们遵循 Hou 等(2024 年)的 DPO 训练食谱。
4.3 实验
4.3.1 结果
我们对LongBench-Write(模型详情见表 5)上的 4 个私有模型和 5 个开源模型进行了评估,同时包括了我们训练的LongWriter 模型。据我们所知,Suri-IORPO(Pham 等人,2024 年)是唯一一个针对长文本生成进行对齐的先前模型。它基于 Mistral-7B-Instruct-v0.2(Jiang 等人,2023 年)进行训练,使用了 LoRA(Hu 等人,2021 年)。与 LongWrite-Ruler 上的评估设置一致,我们将输出温度设置为 0.5,并将模型的生成最大令牌数参数配置为其 API 调用允许的最大值。对于开源模型,我们将其设置为 32,768。主要结果见表 3。我们还在表 8 中报告了平均响应长度和中位数响应长度。图 6 展示了模型响应长度与w.r.t的关系。在 LongBench-Write 的 120 条指令所需长度上。我们的发现如下。
1.大多数之前的模型无法满足超过 2000 字的长度要求,而 LongWriter 模型始终能为这类提示提供更长、更丰富的内容。通过观察每个所需长度范围内提示的输出长度得分 Sl,我们发现之前的模型在[2k, 4k)范围的提示上通常表现不佳(得分低于 70),只有 Claude 3.5 Sonnet 能够获得相对不错的分数。对于[4k, 20k)范围的提示,几乎所有之前的模型都无法达到目标输出长度,甚至得分 0(这意味着所有输出长度都小于所需长度的 1/3)。通过添加 LongWriter-6k 的训练数据,我们的训练模型能够有效地达到所需输出长度,同时保持良好的质量,这在 Sand Son [2k, 20k)范围和图 6 中的散点图中得到了建议。
为了进一步验证长输出生成的LongWriter 模型是否能够产生连贯且逻辑上连接的长文本,而不是简单地将不相关的段落拼接在一起,我们使用了模型输出上的长上下文LLMs的累积平均负对数似然度测试。这种测试通常用于评估长上下文LLMs在长文本中建模远距离依赖的能力(Xiong 等人,2024;Reid 等人,2024)。同时,可以反向使用:利用已建立的长上下文LLMs来检测长文本中的远距离依赖,从而筛选出高质量的长文本数据(Chen 等人,2024a)。在我们的测试中,我们使用了两个支持 128k 上下文窗口的现有长上下文模型:GLM-4-9B 和 Llama-3.1-8B。图 7 报告了在大约 100 个超过 8192 个令牌的文本样本上,三个长 Writer 模型生成的文本在不同位置上的累积平均 NLL 损失。较低的 NLL 值表示预测更好。我们观察到,两个模型在较晚的位置上获得了显著更好的预测,这表明长 Writer 模型输出中远距离依赖的普遍存在。
DPO 有效地提高了模型的输出质量和遵循长度要求的能力。通过比较 LongWriter-9B 和 LongWriter9B-DPO 的分数,我们发现 DPO 显著提高了 S(+4%)和 S(+3%)的分数,并且在所有范围内都有稳定的改进。这表明在长生成场景中,DPO 仍然有助于提高模型的输出质量,并且能够更好地使模型的输出长度与对齐输入的长度要求。后者在元等人(2024 年)的较短世代中也最近被观察到。我们还手动标注了 GPT-4o 和三个长写模型在 LongBench-Write 输出中的两两胜败,并在图 9 中可视化结果。我们可以看到,在 58%的情况下,人类更偏好 DPO 训练的模型而非 LongWriter-9B。此外,尽管参数更少,LongWriter-9B-DPO 仍与 GPT-4o 打成平手。
LongWritere的输出长度限制扩展到 10,000 至 20,000 个单词之间,而为了支持更长的输出,需要更多的长输出数据。在第 2 节的长写-尺子测试之后,我们还展示了长写-尺子测试结果的长写模型图 8。结果表明,它们的最大生成长度在 10,000 至 20,000 个单词之间。缺乏具有更长输出的 SFT 数据可能是阻止模型实现更长输出长度的主要原因。如图 5 所示,输出长度为 20,000 个单词或更长的数据显示点少于 100 个。我们相信,未来构建更长的训练 SFT 数据可以进一步推动模型输出长度限制的边界,获得 100,000 个或更长的输出长度。
4.3.2 Ablation Study 消融实验
我们在 GLM-4-9B 上进行了三项数据消融实验,并将评估结果与 LongBench-Write 上的 LongWriter-9B 进行比较。结果如表 4 所示。
Ablation on LongWriter-6k dataset 。首先,我们在长写手-6k 数据集上进行消融实验。如表所示,添加长写手-6k 数据集后,模型(长写手-9B)可以处理 2000 字及以上的输出长度,这由输出长度指标 Sl 表示。同时,根据 S(质量)指标,添加长写手-6k 数据集训练的模型在质量上表现出显著的改进(+5%),尤其是在需要输出长度在[2k, 4k)范围的提示响应中。我们进一步观察到,模型输出质量的改进主要体现在“广度和深度”两个维度上,与消融模型相比,绝对改进了 18%。同时,如右图所示,长写手-6k 数据集并未导致生成更长响应的偏见。
Ablation on plan-augmented output data 在计划增强输出数据的消融实验。先前的研究表明,通过 Chain-of-Thought(Wei 等人,2022)或 Tree-of-Thought(Yao 等人,2024)等方式,促使LLMs外部化其推理过程,可以有效提高复杂任务的性能。因此,我们想知道——在生成写作内容之前,教模型首先输出写作计划是否对长输出任务有益?为了回答这个问题,我们构建了一个计划增强的 LongWriter-6k 数据集。具体来说,我们通过 AgentWrite 的 Step I 获取的写作计划与写作内容的开头通过两个换行符连接,使用组合文本作为 SFT 数据的输出。在评估过程中,我们过滤掉模型生成开始时输出的写作计划。表 4 中的结果显示,使用计划增强数据训练的模型在输出长度指标 S 上略有提高,但在输出质量上有所下降。总体而言,教授模型在生成写作内容之前首先输出其推理过程(写作计划)并不显著提高任务性能,与直接输出写作内容相比。 这可能是因为模型在直接学习生成写作内容时已经内化了因果推理过程(邓等,2024 年;余等,2024 年),因此不再依赖于明确输出推理过程。
Comparison with instruction backtranslation synthetic data 与指令反向翻译合成数据的比较。我们还探索了使用指令反向翻译(Li 等人,2024a)来构建长输出 SFT 数据的方法,这是之前LLM长形式生成研究中常用的方法(Wang 等人,2024;Pham 等人,2024)。具体来说,我们从预训练数据集中筛选出长度在 2k 到 32k 词之间的文本样本(包含英文和中文数据),并使用 GLM-4-Long 选择那些写作质量更高的样本。然后,我们使用 GLM-4-Long 通过指令反向翻译为这些输出生成指令。这产生了 6k 合成数据,然后将其纳入训练。根据表 4 的结果,使用反向翻译指令数据训练的模型在生成更长响应方面未能满足用户需求。其 S 分数并未超过仅使用一般 SFT 数据训练的模型(第二行),生成质量(S)也受到影响。我们认为这种方法对模型的学习有害,原因有两个主要方面:1. 选择的长文本质量低:作为输出来源的长文本质量不高。 由于它们源自预训练数据,许多是从网页中抓取的,导致格式混乱和潜在的噪音。2. 后翻译指令与实际用户指令之间的不一致性:后翻译指令与实际用户指令的分布不匹配。这阻止了模型学习可泛化的功能。为了进一步提高使用后翻译构建的数据训练的模型的性能,未来的努力可能考虑收集更高质量的长文本,并生成更多样化且更接近实际用户指令分布的指令。
-
Relation Work 相关工作
Long context LLM 长上下文LLM. 如果我们将LLM比作人类大脑,上下文窗口就是其工作记忆。高级智能生物需要足够的工作记忆来完成各种复杂的任务。同样,一个优秀的LLM需要足够长的上下文长度来取代人类完成这些任务。一系列研究探讨了如何扩展LLMs的上下文窗口长度以支持长上下文任务,使LLM能够“看到更多内容并理解更长的内容”。这包括 zero-shot 扩展方法(Han 等,2023;Xiao 等,2023;Zhang 等,2024a;Jin 等,2024;An 等,2024),以及涉及在更长序列上对模型进行微调以实现更长记忆的方法(Chen 等,2023a;Peng 等,2023;Xiong 等,2024;Chen 等,2023b;Bai 等,2024a;Fu 等,2024)。对于具有足够工作记忆的智能代理,它们不仅应该能够理解更长的输入,还应该具备产生更长输出的能力。然而,在当前的长上下文LLMs中,我们发现它们的最大输出长度(约 2000 个单词)远短于它们可以作为输入接收的最大上下文长度(>100,000 个单词)。为了弥合这一差距,我们的工作研究如何扩展长上下文LLMs的最大输出长度。
Aligning LLM to follow constraints in instruction. 将LLM对齐以遵循指令中的约束。由于我们的方法主要依赖于将LLMs对齐以遵循用户指令并提供更长、更丰富的输出,我们研究了LLM对齐的文献。先前的研究表明,通过对齐训练,包括基于监督的微调和从人类反馈的强化学习(赵宇等,2022 年;阿奇亚姆等,2023 年),LLM可以被教导优先考虑特权指令(沃克尔等,2024 年),遵循长度约束(袁等,2024 年),并遵循多约束指令(何等,2024 年;孙等,2024 年;范等,2024 年)。我们的对齐方法特别针对的是将LLMs对齐以满足要求超长输出的用户指令这一未充分探索的问题。
-
结论
在本工作中,我们确定了当前LLMs的 2000 词生成限制,并提议通过在对齐过程中添加长输出数据来增加其输出窗口大小。为了自动构建长输出数据,我们开发了基于agent流水线 AgentWrite,该管道使用现成的LLMs来创建扩展且连贯的输出。我们成功地将当前LLMs的输出窗口大小扩展到 10,000+词,通过我们构建的LongWriter-6k。在训练数据上的大量消融研究表明,我们的方法的有效性。对于未来工作,我们建议以下三个方向:1. 扩展 AgentWrite 框架以构建具有更长输出的数据,进一步扩展LLM的输出窗口大小。2. 精化 AgentWrite 框架以实现更高质量的长输出数据。3. 更长的模型输出带来了推理效率的挑战。已经提出了几种方法来提高推理效率(Zhang 等,2024b;Cai 等,2024;Li 等,2024b)。值得研究这些方法如何在不牺牲生成质量的情况下确保提高模型效率。