怎样增强模型的长文本输出能力?
随着大语言模型的发展,越来越多的模型能够处理超过100k+ tokens的输入上下文。然而,长文本输出仍然是一个挑战。本文探讨了当前模型在生成长文本时的瓶颈,并介绍了一些可能的解决方案。
为什么现有模型生成的文本长度受限?
问题背景
尽管许多模型在预训练阶段处理了大量的长文本,但生成长文本时常常受限,通常不超过2000字。究其原因,主要在于监督微调(SFT)数据集的限制。通过研究发现,SFT数据集缺乏足够长的输出样例,直接影响了模型的输出能力。
具体实例
我们研究了不同最大输出长度的数据对GLM-4-9B-base模型进行SFT微调的结果,发现随着长度要求的增加,生成的最大输出长度依然受限。换句话说,模型能“写”多长的内容,取决于它“读”过的内容长短。
如何解决长文本输出的限制?
自动构建长输出数据集
为了解决SFT数据集中长输出文本数据缺失的问题,我们设计了一个名为「AgentWrite」的pipeline。其具体步骤如下:
- 生成写作计划:根据用户的输入生成一个详细的写作计划,包括每段内容的结构和目标字数。
- 分段生成:模型依次完成每个子任务,并将生成的段落串联起来,最终形成完整的长文本输出。
通过这种方法,AgentWrite能够生成超过20,000字的高质量文本。
教模型生成超长文本
我们利用AgentWrite生成的长输出数据,创建了一个名为LongWriter-6k的数据集,包含了6000条长输出的SFT数据。我们将其与180k条通用SFT数据结合,形成整个训练集。输出长度分布如下:
- 2,000至10,000词之间的输出样例相对均匀,填补了通用SFT数据的不足。
微调与对齐
我们对两种基础模型(GLM-4-9B和Llama-3.1-8B)进行SFT微调,得到两个模型:LongWriter-9B和LongWriter-8B。为了进一步提高模型的输出质量,我们进行了直接偏好优化(DPO)。DPO数据来自GLM-4的DPO数据,并包含4k条长输出正负样本对。
结果验收
测试与评估
我们在LongBench-Write上对4个专有模型和5个开源模型进行了评测,通过以下两项指标评估模型性能:
– S_l:输出长度的符合度评分,输出长度符合要求时得分为100,反之则降低。
– S_q:由GPT-4o从相关性、准确性、连贯性等六个维度进行质量打分。
评价结果
- 长度满足度:大多数模型无法满足2000字以上的长度要求,而LongWriter模型在此类提示下始终提供更长且更丰富的响应。
- DPO效果显著:通过比较LongWriter-9B和LongWriter-9B-DPO的得分发现,DPO显著提高了S_l(+4%)和S_q(+3%)的得分。
- 长文本输出能力:LongWriter模型的最大输出长度目前为10k至20k字之间,进一步提升需要更长输出的数据集。
结论与展望
我们认为,未来可以通过构建更长的SFT训练数据集,进一步突破模型输出长度的限制,达到100k甚至更长的输出长度。
我认为
鲁迅风格阐述
我认为:当前模型的长文本输出能力受限,根源在于微调数据集的不足。只有通过不断完善数据集和创新方法,如AgentWrite,才能进一步突破这一限制,使模型在真实应用中发挥更大的潜力。长文本生成不只是技术的挑战,更是对数据与算法的全方位考验。