为了账号安全,请及时绑定邮箱和手机立即绑定

揭秘超长文本生成:深入解析LongWriter和AgentWrite

大家好,

已经有差不多3个月没有更新博客了。但终于回来了,让我们开始吧!从现在开始,我的博客将主要关注LLM和GenAI领域有趣的科研论文。我将分享我在日常生活中遇到的问题陈述,我们称之为“故事时间”,相信很多读者还记得我在过去博客中的这一环节。之后,我将深入探讨这些问题的技术细节。除了解释研究论文,我还会分享个人经历和实际例子,并且详细说明论文中可能省略的一些技术细节。那么,让我们开始吧!

就在几天前,一位家族朋友来我们家拜访。他们有一个可爱的8岁女儿。那天是8月15日,印度独立日,学校给她布置了一个作业,要求写一篇关于独立日的文章,不少于10000字。这真的很多!我真的不知道该叫这是一篇文章还是一本迷你书本!像往常一样,父母开始代孩子起草。大家首先想到的是ChatGPT或其他类似工具。起初,父母很放松,认为“8月14日,也就是前一天开始起草也没问题,因为只要‘给大模型提示’,就能得到输出。”到了8月14日晚上,他们真的这么做了,但结果怎么样?虽然模型给出了一些不错的输出,但是很难维持以下几点:相关性、准确性、连贯性、清晰度、广度和深度,以及阅读体验。此外,当模型被要求严格不少于10000字时,它会重复内容并严重偏离主题,失去连贯性。

现在,你们可能在想,这六个维度是什么?为了回答这个问题,让我们继续阅读,探讨名为“当前长上下文大型语言模型(LLM)生成超长输出的局限性。”的问题陈述。在这篇博客中,我们将探讨一篇有趣的论文,名为“LONGWRITER:释放长上下文LLM的10,000+单词生成能力。”这些模型可以处理多达100,000个令牌的输入,不过,它们通常难以生成超过2,000个单词的输出。这种限制的主要原因是监督微调(SFT)数据集缺少长输出的示例,从而限制了模型生成长文本的能力。因此,在这篇博客中,我们将了解作者所使用的有趣技术来改进长输出响应,并希望让父母的生活在未来变得更轻松!好了,让我们开始吧!

介绍

我们现在来看看这篇论文提到的一个有趣的难题。论文开篇就强调了一个关于长上下文LLM(Large Language Models)的有趣挑战。虽然这些模型能够处理超过100,000个输入标记,它们依然无法生成超过2,000字的输出。这确实是一个大问题,因为在某些情况下,超过1%的用户请求实际上需要更长的回答。

核心问题在于,训练这些模型的监督微调(SFT)数据集中,长输出示例太少。虽然这些模型能处理长输入,但生成长输出的能力并未得到充分训练。由于很多大型语言模型依赖于这些数据集,这一局限性一直存在。

为了应对这一问题,作者们引入了AgentWrite——一种新方法,帮助这些模型通过将其任务拆分为更小的部分来生成更长的文本。这种方法将输出长度达到20,000字,远远超出了一般可能的长度。

本文还引入了LongWriter-6kLongBench-Write,一个用于训练和测试模型生成超长文本能力的数据集和基准测试。目的是推动大型语言模型的能力边界,让它们能够应对更复杂的任务,让它们更擅长处理需要长时间输出的任务。

现在我们来了解一下Agentwrite是什么以及它是怎么运作的:

第一步:规划
首先要做的是,AgentWrite 从规划开始——就像你写文章前会先做个计划一样。模型根据给定的指令创建一个详细的计划,列出主要内容并为每一部分指定字数。这可以看作是模型的路线图。例如,如果任务是撰写一篇关于罗马帝国的30,000字的文章,计划可能如下所示:

第一段: 罗马帝国起源的简介(700字)

第二段: 罗马帝国的建立过程(800字)

……

第十五段: 罗马帝国历史总结(500字)

这种方法确保模型清楚地知道自己的目标,从而使生成长篇输出变得更简单。这里你可以看看作者是如何组织输入的:

这个提纲确保模型有清晰的结构可遵循,让生成长输出变得更简单。

第二步:撰写
接下来,模型开始写作。根据第一步的提纲,模型按段落顺序生成文本——一段接一段。这种顺序生成的方法确保每个段落都建立在前一个段落的基础上,从而保持整体的连贯性。通过以前的段落作为上下文,模型避免了诸如重复或不连贯等常见问题,这些问题在生成较长文本时尤其常见。结果是,生成的文本可以长达20,000多字,同时保持了高质量。以下是如何用清晰的指导性说明来支持输入文本的例子。想象一下为初学者量身定制的精准培训,帮助他们在未来更好地学习。

希望你们都清楚AgentWrite方法的作用。很快我们会看到,在LongWriter-6k和LongBench-Write中应用AgentWrite方法后的验证和结果。在此之前,让我们先来看看这些数据集是如何被创建的,以及模型是如何用这种方法的数据集进行微调的。

长篇生成器:教模型生成超长内容

了解了_AgentWrite_的工作方式后,接下来的一个重要问题就是——我们能否真正教会大型语言模型(LLMs)稳定地生成超长输出?本文通过构建特定数据集、微调模型和使用直接偏好优化(DPO)来提升性能,详细探讨了这个问题。不用担心,我们将探讨每个细节!让我们从第一步‘数据,数据,数据!’开始。

4.1: 数据构建工作

指令的选择:
这一步是手动挑选出那些自然需要长输出的指令。团队从这6,000条指令中选择了这样的指令——其中3,000条来自GLM-4中的SFT数据(中文),另外3,000条来自WildChat-1M中的数据(英文)。GPT-4o自动化了这一选择过程,并通过额外的基于规则的过滤,过滤掉有毒或不相关的指令。经过人工验证后,超过95%的这些指令被确认确实需要长输出的指令。

生成回复:
指令设定完成后,就开始使用由GPT-4驱动的_AgentWrite_管道生成回复。生成的输出经过严格的后处理阶段,过滤掉了那些太短或因规划步骤失败导致的回复。为了提高清晰度,删除了如“段落1”,“段落2”之类的无关标识符。最终形成了名为_LongWriter-6k_的数据集,该数据集提供从2,000到10,000字的广泛输出长度——这正是补充通用SFT数据集所需的内容。

数据结合:
下一步是将 LongWriter-6k 与 SFT 通用数据结合,它包括了来自 GLM-4 SFT 数据集的 180k 条对话。这种结合有效补充了现有数据集中长输出的不足,确保模型有足够多的学习样本。

现在我们已经了解了数据是如何构建的,接下来让我们看看数据在训练模型时是怎么用的。

4.2, 模型训练

监督式微调(一种机器学习技术)

使用的模型:
团队专注于调整两个开源模型:GLM-4–9B 和 Llama-3.1–8B。这两个模型都能处理高达128k令牌的上下文窗口——非常适合我们想要实现的超长输出。

训练过程:
为了微调这些模型,采用了一种损失加权策略。与按照序列平均损失不同,是按照每个标记来平均损失。这种方法确保较长的输出能更有效地影响训练过程。训练进行了 8xH800 80G GPU 使用 DeepSpeed+ZeRO3+CPU offloading,批量大小为 8,学习率为 1e-5,打包长度为 32k(token)。训练进行了 4 个周期,总共大约 2,500 到 3,000 步。

对损失加权策略感到困惑吗?如果是的话,我来给你详细解释一下。如果不是,你可以直接跳到下一节。

Token层级 损失平均化
它是怎么工作的
  • 模型不在序列级别上平均损失,而是在批次中的所有标记上平均损失。这确保了每个标记,无论它出现在短序列还是长序列中,对学习过程的贡献是同等的。
例子
  • 假设序列1有9个标记,序列2有100个标记。
  • 那么序列1每个标记的损失率是0.2,序列2每个标记的损失率是0.3。

这意味着模型的学习过程会更多地受到较长序列的影响,因为较长序列中有更多对损失有贡献的词汇单元(token)。

为什么这对长输出很重要

  • 在用于生成超长输出的模型微调过程中,通过平均每个 token 的损失值,可以确保模型在训练过程中更重视较长的序列。每个 token 对损失都有贡献,从而鼓励模型更好地生成长且连贯的文本。

生成的模型:
微调过程产生了两个模型:LongWriter-9B(基于GLM-4–9B)和 LongWriter-8B(基于Llama-3.1–8B)。

对齐 (DPO)

目标:
为了进一步提高质量并符合长度限制,团队将直接偏好优化(DPO)应用到了 LongWriter-9B 模型上。我稍后会详细解释一下。然后我们再来看看论文中是如何使用它的。

了解直接偏好优化法(DPO)

直接偏好优化(DPO)技术 是一种通过利用偏好数据优化语言模型的技术。其主要目的是提高模型生成符合人类偏好或特定标准(如遵循指令或高质量内容)的输出的能力。

1. DPO实际应用示例(便于简单理解)

想象你在构建一个能够生成短故事的AI。你希望这个AI不仅能产生富有创意的故事,还能让这些故事通顺且吸引人。

第一步:生成多个版本的故事:AI基于相同的提示创作多个故事版本。

版本A:一个非常有创意但有点混乱的故事。

版本B:一个不太有创意但非常清晰且引人入胜的故事。

版本C:一个既富有创意又条理清楚但稍微欠缺一些深度的故事。

第二步:对输出进行评分:人工评审员或评估系统会根据输出是否符合预期的标准(如创新性、连贯性和吸引力等)对其进行排名。

排名为:C版本 > B版本 > A版本

步骤3:根据偏好优化:AI经过微调,生成的输出更像版本C,在创意、连贯性和吸引力方面达到最佳平衡。这一过程让AI学会根据给定的标准生成一个好的故事。

2. DPO的技术说明 — 不是专门针对论文的内容,而是DPO在实际中是如何运作的。

DPO包括几个步骤:

  • 数据收集阶段:收集模型生成的输出对。对于每一对输出,为每一对输出分配一个偏好标签,表示根据特定标准(例如清晰度、相关性、创意性)哪一个输出更好。
  • 偏好数据:模型使用这些偏好数据进行训练,目标是使模型在未来生成更倾向于首选输出的概率最大化。
  • 目标函数:模型的目标函数被调整,以更倾向于偏好输出的概率,这通常通过使用诸如成对排名损失函数或根据偏好给输出打分的奖励函数来实现。
  • 微调:然后使用调整后的目标函数对模型进行微调,使其在未来类似情况下更有可能生成符合偏好的输出。
3. DPO在论文中的使用。

所以,我们已经讨论了什么是直接偏好优化(DPO),那么在研究中它是如何被应用的呢?在论文的背景下,使用了 LongWriter-6k 数据集进行初始微调之后,DPO 就开始发挥作用了。这里的目标是提升模型生成更符合用户需求的长篇内容的能力。

这里是对DPO使用的简要说明:

生成输出:
在模型使用 LongWriter-6k 数据集微调之后,就可以看看它的表现了。对于需要长篇回复的提示,模型会生成多个输出。例如,如果提示是要求生成一篇详细的10,000字文章,模型会生成几个版本的文章。

生成偏好数据:
接下来,这些输出会被评估和排序,根据它们满足期望标准的程度来排名,例如长度、连贯性和整体质量等指标。例如,如果提示要求生成10,000字的文档,那些最接近这个长度且保持连贯性和高质量的输出会被优先考虑,这样就能确保生成的内容最接近预期标准。

优化模型的步骤:
现在,利用这些排名,模型被进一步微调以。这一步才是真正让DPO产生魔力的地方——模型的参数被调整,以便让模型学会偏好那些在偏好排序模型中排名最高的输出。换句话说,模型正在被训练去理解,“你应该朝这些类型的输出努力。” 但请注意,这并不是在优化目标函数。通过这个过程,确保在第二次微调过程中,模型学会从最佳输出中选择最好的结果!所以,这并不是像通常那样优化某个目标函数或损失函数。你可能会疑惑为什么在这个过程中需要这么多的人工干预——顺便说一句,我的老板曾经告诉我“有时候努力工作比聪明工作更有效”

最终评估:
应用DPO之后,模型会使用比如 LongBench-Write 这样的基准进行另一轮评估。这最后一步非常重要,可以确保模型不仅仅是在生成长文本,而是生成高质量且长度合适的文本。

第4. AgentWrite如何使用DPO(数据保护官)

现在,让我们把这和_AgentWrite_联系起来,它是如何利用DPO来增强其性能的。

提高长度的准确性:
AgentWrite 所解决的主要挑战之一是让模型符合特定的长度要求,比如生成一篇确切的10,000字长的文章而不遗漏。DPO通过优化模型来更偏好符合这些长度要求的输出来帮助解决这一问题。因此,经过DPO优化后,模型更可能准确地达到长度目标。

提升内容质量:
但不仅仅是满足字数要求。借助DPO,AgentWrite 进一步提升了模型生成内容的一致性、相关性和清晰度。通过在DPO过程中专注于高质量的输出,AgentWrite 确保模型不仅不会冗长,还会生成值得阅读的文本——既长又有力,内容丰富且有力。

所以最后,我们了解到DPO是如何被进一步提高输出质量,并且拥有更好的下一版本微调模型的特性。到目前为止,在本文中,我们已经讨论了六个经常被提及的维度。在这之前,我将向您解释这六个指标是什么及其评估方法之前,我想先给您一个简要的介绍。让我们用一种有趣的方式来理解这一点。

想象一下:你的老板刚刚要求你起草一份关于“远程工作对团队生产效率的影响”的1,000字的报告。自然而然地,你转向你的可靠的AI助手寻求帮助。现在,让我们来看看你如何评估AI的输出,是否真的能让老板满意,而不是收到一封严肃的邮件说“我们需要谈谈”。

相关性:
首先,报告必须紧扣主题。你不希望AI跑题,谈论诸如海滩度假的好处这类话题或为什么猫咪适合做办公室宠物(除非你的老板特别喜欢猫)。

准确性:
接下来,报告必须准确无误。你希望提出远程工作如何影响生产效率的坚实见解,而不是像“在家工作可以让生产效率提高200%,尤其是当你在后台播放奈飞节目时”这样的意外说法。

连贯性:
报告应有清晰的逻辑结构。它应该像一个井井有条的会议议程那样流畅,而不是像无序的头脑风暴会议那样杂乱。每一部分都应该自然地过渡到下一部分,让您的老板能够轻松跟上进度,不需要中途停下来喝咖啡休息。

清晰易懂:
语言应当简洁明了——不要使用难以理解的专业术语,也不要使用过于复杂的句子,让人感觉像是在读法律文书。你的老板应该能够快速浏览,立刻抓住要点,而不会一头雾水,怀疑你是不是请律师代笔。

广度与深度:
报告应当全面覆盖所有关键方面——比如远程工作如何影响团队协作、生产力指标,以及对员工士气的影响。确保报告详尽无遗,以避免那种让人头疼的“这里能不能再详细一点?”的反馈。

阅读体验:
最后,报告应该引人入胜且易于阅读。你不想看到你的老板在阅读时打哈欠,更不想让他觉得需要重写部分内容。文章应该写得流畅专业,让你的老板觉得你确实下了功夫(即使你得到了一点AI的帮助)。

但是现在,你可能在想——我们是如何实际评估这些指标的呢?毕竟,你的AI并没有自带一个“老板认可度计”或“清晰度表”。那么,让我们来看看这一切是怎么回事。

这些指标是如何计算的呢?让我们看看 LLM 作为法官(LLM-as-a-Judge)的情况。

所以,在理解了评估文本质量的六个关键维度之后,自然就会想到问,“这个AI到底是怎么做到这些的?”毕竟,模型本身并不会“理解”这些指标。这时,我们就需要用到“LLM作为裁判”的方法了。

LLM-as-a-Judge 概览
研究人员巧妙地利用了LLM本身来评估生成内容的质量,而不是依赖人类评审者来评估每一项内容。通过利用模型广泛的知识和上下文理解能力,它可以对我们之前讨论的六个维度提供客观的评价。顺便说一下,我的老板也曾经告诉我 “有时候聪明地工作比辛辛苦苦地干活更好”

评分过程:它是如何工作的
运作方式相当直接。研究人员设计了一些特定的提示来让GPT-4评估输出内容。例如,模型可能被要求评估输出内容与原始提示的相关性,或评判写作的清晰度。提示可能如下所示:

“您是文本质量评估方面的专家。请从六个维度对AI助手的回答进行打分:相关性、准确性、连贯性、清晰度、广度和深度,还有阅读体验。请给每个维度打1到5分,谢谢。”

模型然后根据这些提示来分析文本,并给出一个分数,通常会以结构化的格式,比如 JSON,输出评估结果,其中包括分数和简短解释以及相关说明。

预定义指标的运用
对于特定的指标如输出长度,模型使用了一种更技术化的方法——一种分段线性函数(一种更复杂的数学方法)。这个函数会根据实际输出长度与所需长度的匹配程度调整得分。例如,如果输出长度偏离了预期长度,得分会相应降低。

如果输出正好是1,000个单词,而提示要求的是1,000个单词,得分可能是满分100。

如果输出稍微有些偏差——比如长了或短了大约10%——得分会稍微低一些。

而如果差距很大——比如长了或短了50%——得分会大幅减少。

这种方法确保模型受到激励生成预期长度的文本,并对偏差过大的输出进行惩罚。

训练过程中不包含内置指标
需要注意的是,这些指标,模型本身并不“知道”它是因为相关性和连贯性而被评判的。它只是根据训练数据生成文本,没有意识到自己被评判的标准。评估是在外部进行的,使用一个独立的模型(例如GPT-4o)作为裁判。

工具与技术
虽然有些模型可以在人工标注的数据集上进行微调,但本文主要依赖于GPT-4O现有的能力来评估文本,无需额外的微调。这个想法是为了模仿人类评估写作质量的方式,利用模型丰富的知识和对语言的理解来评估文本。

实验结果摘要:LongBench-Write 模型评测报告

研究团队利用LongBench-Write基准评估了一组模型,其中包括4个专有模型和5个开源模型。此次评估还包括新训练的_LongWriter_模型。在现有模型中,唯一另一个专门针对长文本生成进行对齐的模型是Suri-IORPO,它是基于Mistral-7B-Instruct-v0.2,并通过LoRA进行微调的。

在评估过程中,团队将每个模型的温度设置为0.5这个值,并将最大标记数设置为API允许的最大值。对于开源模型,这个数值被设为32,768。

表3总结了关键结果,包括平均和中位响应的长度,而图6则展示了各模型的输出长度与120个不同指令所需长度的匹配程度。

实验中的关键发现

咱们来看看这张表吧!

输出长度表现.
  • 先前模型的局限性: 大多数现有模型难以达到超过2,000字的标准。比如,在2000到4000字范围内,大多数模型得分低于70,只有Claude 3.5 Sonnet 表现还算可以(见上表3)。
  • 长篇输出的主要问题: 对于需要4,000到20,000字的任务,几乎所有之前的模型都无法达到目标输出长度,许多模型得分是0(即输出长度少于所需长度的三分之一)(详见下图6)。

  • LongWriter 模型的成功: 相比之下,增强训练数据后,LongWriter 模型不仅能够满足所需的输出长度,同时也能保持良好的质量,如 Si(输出长度评分)和 Sq(质量评分)所示,这些数值均在 [2k, 20k) 的范围之内(参见表 3 和图 6)。
长输出的连贯:
  • 用于连贯性的NLL测试: 使用累积NLL测试来确保_LongWriter_模型生成的长文本连贯且逻辑上紧密相连(参见图7)。

摸着脑袋或者对NLL感到困惑?别紧张,让我用有趣的方式给你解释一下!

NLL测试解析:经理与员工的评价

想象你是一位经理,你是一位经理,你有一位员工(我们叫他希特什),他需要准备一份长报告。当希特什写报告时,你会在不同的阶段检查——比如在写完引言、第一部分和一半之后等等。你想看看希特什是否能紧扣主题并合理推进报告。

现在,如果Hitesh做得很好,你会发现预测报告接下来的内容会更容易,因为所有内容都合乎逻辑地衔接。你会一边点头一边想着“是的,这很有道理”,而且你会很高兴,因为Hitesh让生活变得更轻松,这让您感到很开心。这意味着“负对数似然”(NLL)得分很低——好的表现意味着报告内容的连贯性很高,你对接下来的内容也不会感到特别惊讶,因为一切都衔接得非常顺畅。

但如果是希特开始唠叨,加入一些无关的点,或者报告在结构上开始散架,你预测接下来会发生什么的能力就会下降。你现在会抓头挠腮,试图理清到底发生了什么。这将导致NLL分数更高——表明报告的连贯性在下降。

现在,让我们看看上面的图7

  • 红线(GLM-4–9B)和蓝线(Llama-3.1–8B)分别代表两个不同的“Hitesh”(或模型)在写报告(生成文本)时的表现。
  • 随着报告沿x轴变长,你在检查报告是否仍然有条理。
  • 图表上较低的线表示报告保持连贯,读起来不会那么惊讶(较低的NLL)。因此,在这种情况下,蓝线中的Hitesh(Llama-3.1–8B)在保持连贯性方面稍微逊色于红线中的Hitesh(GLM-4–9B)。
DPO(直接偏好优化)的影响
  • 提高质量和长度一致性的效果: DPO的应用使输出长度评分(Sl)和质量评分(Sq)在所有范围内分别提高了4%和3%(见表3和图8)。
  • 人类偏好: 人工评估显示,在58%的情况下,人类更喜欢DPO训练模型的输出,虽然参数较少,LongWriter-9B-DPO 的表现与GPT-4o不相上下(如图9所示)。

颜色编码说明: 蓝色代表胜率低于50%,红色代表胜率高于50%。LongWriter-9B-DPO 胜率较高(红色更多),这意味着它通常优于其他模型。

消融研究:了解不同数据方法的影响

论文中的消融实验考察了不同的数据配置如何影响 LongWriter-9B 模型的性能。以下是根据表四中报告的结果总结的关键发现:

LongWriter-6k 数据集上的消融:

  • 没有 LongWriter-6k 数据集时:
    仅用一般的SFT数据训练 LongWriter-9B 模型时,其性能显著下降。整体输出长度评分(Sl)降到了48.1,质量评分(Sq)降到了77.1。见上表4
  • 使用 LongWriter-6k 数据集:
    加入了 LongWriter-6k 数据集之后,模型的表现有了显著提升。生成较长的文本的能力大幅提升,尤其是在[2k, 4k)字范围内,输出长度评分(Sl)提升至76.0,质量评分(Sq)提升至80.2。整体质量评分(Sq)提高了5个百分点,其中在“广度及深度”维度上,提升了18%。请参见上表4
博客结尾:笑着收尾 🙂
两干字的上限问题:
  • 我们发现当前的大型语言模型(LLM)在大约2,000字时遇到了“玻璃天花板”——就像试图写一部小说但中途却发现自己墨水用完了。
AgentWrite: 来帮忙
  • 来吧,介绍我们的超级英雄小助手 AgentWrite! 这款基于代理的助手能够帮助大语言模型打破天花板,写出更长、更连贯的文章——就像给模型来了一杯特大号的咖啡一样,让它在写更长的报告时精神满满。
LongWriter-6k:训练升级:
  • LongWriter-6k ——我们模型的秘密武器——的帮助下,我们将输出长度延长到了超过10,000字。这就像一夜就成了畅销书作家一样。
消融研究:证明其确实有效:
  • 我们的消融研究表明,AgentWrite 不仅仅是一时的杰作。它持续增强模型的表现,证明了一点额外的数据可以带来很大的提升。
未来的冒险:
  • 更长的内容: 接下来,我们将致力于增加更多字数——因为谁不喜欢更长的故事呢?
  • 更高的质量: 我们将优化 AgentWrite,确保增加的字数不会变成不必要的冗谈(没有人喜欢话多的同事)。
  • 效率挑战: 随着输出变长,我们需要继续关注效率——因为即使是最好的作者也需要编辑帮忙保持简洁。

就这样,今天的部分就是这样。在结束之前,我想特别感谢所有参与这篇论文的作者们,为解决这一领域的实际问题并取得如此有洞察力的成果而付出的努力。作者及机构 : 白雨石†, 张嘉杰†, 潜鑫, 郑霖志, 朱思齐, 侯磊, 董宇潇, 汤捷, 李涓子。智谱AI, 清华大学

希望大家喜欢这篇博客。下期见!
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消