666 条数据训练 AI 写万字长文,模型数据集开源
通过筛选 666 条高质量长文本数据微调大模型,智谱团队验证了数据质量优于数量。实验表明,基于 GLM4-9B 和 Qwen2 系列,仅需少量精选数据即可实现万字输出能力,且计算消耗显著降低。该方案在保持基础能力的同时提升了长文本遵循度,相关模型与数据集已开源。

通过筛选 666 条高质量长文本数据微调大模型,智谱团队验证了数据质量优于数量。实验表明,基于 GLM4-9B 和 Qwen2 系列,仅需少量精选数据即可实现万字输出能力,且计算消耗显著降低。该方案在保持基础能力的同时提升了长文本遵循度,相关模型与数据集已开源。

仅需 600 多条数据,就能训练自己的长输出模型了?
虽然大模型的上下文(Context)支持越来越长,但包括 GPT-4o、Llama-3.1-70B、Claude 3.5 Sonnet 在内的业界领先模型,在用户指定所需输出长度的情况下,其最大输出长度仍无法满足要求。
例如,针对'写一篇关于罗马帝国历史的 10000 字文章'的要求,所有这些通用模型在输出长度上均无法超过 2000 字。
对此,基于 GLM4-9B,智谱通过构建长输出的训练数据得到了 LongWriter-GLM4-9B 模型,能够应对超长输出(10000+ words)场景。
与此同时,智谱开源了训练该模型所需的长输出文本数据集 LongWriter-6K。
现在,魔搭社区上基于 LongWriter-6K 过滤精选了 666 条数据(LongWriter-6K-Filtered),也一并开源了。
一句话,使用该数据集,你就能在自己的模型中集成长输出能力了。
通过分析训练 SFT 数据,团队发现对于'模型无法输出较长文本'的一个合理解释为:
模型所能生成的最大长度,会受限于其 SFT 数据中存在的输出长度上限。
以 GLM4-9B-Chat 模型为例,其 SFT 训练使用的 180K 条 chat 数据中,输出长度超过 500、1,000 和 2,000 字的数据,分别仅占 SFT 数据量的 28%、2% 和 0.1%。
可见,长输出长度的训练数据占比较小,而 2000 字长度以上的数据样本占比更是微乎其微。
有了这个分析,LongWriter-GLM-9B 是智谱基于 GLM4-9B 模型,通过构建长输出的训练数据而得到的模型,在输出长文方面表现突出。
在 LongWriter 工作的基础上,团队利用社区的 Swift 微调训练工具和 EvalScope 评估框架,进一步探索了在扩展模型输出长度这个任务上,高质量数据对于模型质量的重要性。
同时,将这个模型训练的经验,扩展到其他模型(例如 Qwen2)上。
在这个过程中,团队还分享了一些有趣的发现和实践经验:
a)少即是多:数据质量比数据数量更关键。
通过对数据的分析过滤,团队发现 LongWriter-6K 的 6000 条数据,依然存在优化空间。
他们从中选出了 10% 左右(666 条)的高质量数据并基于这些数据做微调训练。
在 Qwen2-7b-instruct 和 GLM4-9B-Chat 两个模型上,只需要 3.7% 训练计算消耗,就能获取和原论文中,LongWriter-GLM4-9B 类似的性能提升。
此外,随着基础模型的升级,支持长输出这个能力,在新迭代中本身也会有所增强。但 LongWriter 的技术方案,还是有其适用性。例如在新鲜出炉的 Qwen2.5 模型上,团队通过第一时间的测试和验证发现,一方面 Qwen2.5 模型本身在文本生成长度上,已经有了长足进步,但同样的训练微调方案,还是能进一步带来很好的任务能力提升。
b)对于提升输出文本长度这个具体任务,从 base 模型开始 SFT 似乎不是必须的。
以对齐版本(chat/instruct)模型为起点,在模型输出质量和输出长度两方面,也都能获取较好的效果。
下面来看团队对数据的处理。
LongWriter-6K 数据是通过 AgentWriter 生成,也就是将长文写作任务分解为多个子任务,每个子任务负责撰写一段。
实验发现,在 GPT-4o 上使用 AgentWriter 策略,能够得到近乎线性的 Output Length,且长度远超 2000 词,甚至可以达到 30000 词的量级。
LongWriter-6K 数据集由 6000 条'Required Length'超过 2000 字的用户指令构成,来自于 GLM-4 的 SFT 数据,其中大部分为中文。
另外,从 WildChat 中选择了 3000 条指令,主要为英文。
在这个基础上,使用 GPT-4o 过滤掉有毒数据并人工检查了自动选择的指令。
最后,利用 AgentWrite 生成与这些 instruction 对应的 response。
LongWriter-GLM4-9B 模型训练使用 GLM4-9B 作为基模,将 LongWriter-6k 与 180k 的 GLM-4 通用 chat SFT 数据结合,形成整个训练集。
LongWriter-6k 有效补充了输出长度超过 2k 字的通用 chat SFT 数据的稀缺性,且 LongWriter-6k 的输出长度在 2k-10k 之间的分布相对均匀。
针对输出长文本任务,LongWriter 模型采用两个指标:
为了让模型的输出长度尽可能接近指令中规定的要求,使用了分段线性函数来计算输出长度得分(SL)。
输出质量 SQ 则使用 GPT-4o,从以下 6 个维度来评价:
每个维度分值为 1 到 5 中的整数,最低分 1,最高分 5;最后 6 个维度整体求平均,并缩放到 100 分。
训练 4 个 epoch,大约需要 2,500-3,000 step。
可以看到,LongWriter-9B 相较于 GLM4-9B-Chat,Overall 绝对提升 12.2 个百分点 (68.3->80.5),同时再叠加 DPO 训练,可以有进一步 3.5 个点的提升。
通过观察 LongWriter-6k 数据集,团队发现针对任务的评估标准,这个数据集中仍然有较多的数据并不完全符合目标任务的要求。
例如,大量样本中,对输出长度没有明确要求(Required Length):
{"messages": [
实际输出长度(Response Length),与 prompt 要求的长度(Required Length)差距较大,例如:
{"messages": [{"role": "user", "content": "你是一位优秀的辩手,请针对以下辩题,给出观点立论:\n辩题:当代大学生是否应该住校\n立论角度:阐述不住校的好处\n立论要点:运用数据、事例等论证住校的必要性;从锻炼独立能力、培养社交技巧等方面论证观点\n内容要求:表达清晰,论点突出,精辟见解,让人信服 20000 字"}, {"role": "assistant", "content": "### 引言:住校与否的辩论\n\n大学生活是每个青少年成长过程中的关键阶段,而当代大学生是否应该住校则成为一个备受争议的话题, ..."}], "length": 20000, "response_length": 7739}
——其 Required Length 为 20000,但输出为 7739。
此外还有不少数据,由于输入内容被模型直接拒答,导致输出长度极短,对于整体数据质量有较大的污染。
鉴于这些数据对于目标任务可能造成的反作用,团队在 LongWriter-6k 数据基础上,实施了两个数据清洗剔除策略。
策略 1
剔除 prompt 中对输出长度没有明确要求(Required Length)的数据。
数据总量:6000 条 → 1748 条。
策略 2
剔除输出长度和 prompt 中的 Required Length 差距较大的数据,即 eval_length score—SL 得分小于 80 分的数据。
数据总量:1748 条 → 666 条。
可以看到,在经过两轮策略过滤后的数据,其实际 Output Length 体现了对于 Required Length 非常好的遵循能力,整体数据样本长度关联接近线性。
这样经过对 LongWriter-6k 数据极限'压榨',最终得到了包含 666 条经过清洗后的 LongWriter-6k-filtered 数据集,并开源在 ModelScope。
基于这个新的 LongWriter-6k-filtered 数据集,下面开始探索:
这些'少而精'的数据,是否能训练出效果相当甚至更为出色 LongWriter 模型。
为了验证'通过基础长输出文本数据,以及精选的输出长度遵循数据,来调教基础模型的长文写作能力'这一方案的通用性,团队选择了 Qwen2 和 GLM4 模型来验证上述假设。
同时团队认为,对于长文本写作这一任务,人类对齐过的 chat 或 instruct 模型已经提供了一个较好的基准,故可能不需要完全 base 模型并带上全量的 chat SFT 数据开始训练。
所以团队分别选用了 Qwen2-7b-instruct 和 GLM4-9B-Chat 模型作为训练的基准模型。
当然还有一个原因是,团队确实也没有 Qwen2 或 GLM4 的完整 SFT 数据。
在不同的实验里,团队选用的数据集,除了 LongWriter-6k 和 LongWriter-6k-filtered 之外,还包括了:
Qwen2-72B-Instruct 生成并经过筛选的 200k 中文以及英文对话数据集 Magpie-Qwen2-Pro-200K-Chinese 和 Magpie-Qwen2-Pro-200K-English。
在 loss 函数的选择方面,使用了'long-ce'loss 函数,这与原始 LongWriter 文章中采用的策略相同:
为避免长输出数据中每个 target token 对损失的贡献低于短输出的问题,long-ce loss 通过计算该批次中所有 target token 的 average loss 来获得。
基于 ModelScope Swift 项目提供的多数据集混合能力,数据混合的训练微调都可以通过一个命令行完成。
例如,如下命令完成的是将 longwriter-6k-filtered、Qwen2-Pro-200K-Chinese 和 Qwen2-Pro-200K-English 三个数据集抽样后按自定义混合(包括随机抽样)策略,使用 long-ce loss 来进行 SFT:
swift sft \
同时遵照 LongWriter paper 定义的输出长度(SL)和 输出质量(SQ)评分,可以基于 EvalScope 框架来进行相关评测。
在评测过程中,对于模型推理的配置为 repetition_penalty=1.1, temperature=0.5。
LongWriter 评测:
# pip install evalscope[framework]
团队首先使用 Qwen2-7b-instruct 作为基础模型,来微调生成 LongWriter 模型。实验设计如下:
通过上述实验可以看出,针对遵循指令进行长文本写作这个任务,使用'少而精'的数据,对于模型最终的性能至关重要。
事实上,在实验 3 中,只通过 LongWriter-6k-filtered 数据集 4 个 epoch 训练,总共 2.6K 条数据,其训练出来的模型,无论在写作长度,还是写作质量上,都显著优于 LongWriter-6k + 180k 的通用数据混合训练的模型。
同时,在实验 3 使用的 LongWriter-6k-filtered 数据集基础上,实验 4 再添加 1:20 混合的通用数据集,总共 13.6K 数据训练 2 个 epoch,能进一步获得更好的结果。
Qwen2-7b-instruct 的这个结果,也验证了使用 LongWriter-6k-filtered 数据集来微调长文本写作能力,具有一定的通用性,不只局限于 GLM4 系列模型。
此外,如同 LongWriter 论文里展示的一样,在写作质量方面,增强了长文本能力的模型,在质量上有小幅度的波动 (-1.47 点)。
在这些实验里,最终选择了实验 4 产出的模型作为 MS-LongWriter-Qwen2-7b-instruct,并开源到 ModelScope。
图 6 展示了训练定制前后的模型,在输出文本遵循指定长度方面的对比。
可以看到,训练后的模型的文本输出长度,能更好的贴合 prompt 的要求,特别是在要求输出的文本长度较长的时候。
接下来,团队把 LongWriter-6k-filtered 数据集,以及对应微调定制模型的方法(也就是上述实验 4 的配置),也以 GLM4-9b-Chat 模型作为基座进行了定制训练,并且与 LongWriter-GLM4-9B 结果做了对比。
如下表所示:
可以看到基于实验 4 的配置,使用 GLM4-9b-Chat 作为基础,总共使用了 13.6K 数据,训练 2 epoch;而原始 LongWriter-GLM4-9B 使用 186K 数据,训练 4 epoch。
实验 4 训练用的总数据量在仅为原始 LongWriter-GLM4-9B 训练使用数据量 7.5%(实际消耗计算资源为 3.7%)的情况下,获取了类似的效果。
当然这里一个显著的区分点,是团队是以 GLM4-9b-Chat 作为训练的基础。
考虑到原始论文中使用的是 GLM4-9b base 模型作为基座,客观上确实需要更多通用对齐数据集。
但如同之前讨论的,对于遵循指令进行长文本写作这个具体任务,从 base 模型开始训练可能并不必要。
在这些实验里,最终选择了实验 4 产出的模型作为 MS-LongWriter-GLM4-9B-Chat,并开源到 ModelScope。
在团队的这个探索接近尾声之时,Qwen 模型家族正式推出 Qwen2.5 系列。
相比 Qwen2 系列,Qwen2.5 支持的输出长度有了较大的提升。团队也在第一时间基于 Qwen2.5-7B-Instruct 模型做了初步的实验,结果如下:
对比上述表格,可以清晰看到,未经定制的 Qwen2.5-7B-Instruct 模型在遵循指令进行长文本写作的输出长度(SL)方面的评分,无论是对比 Qwen2-7B-Instruct,还是 GLM4-9b-Chat,都已经有了较大的提升。
而通过实验 4 的 13.6K 条数据 2 个 epoch 的定制训练,模型综合指标(S-avg)就已经达到最佳。在这个基础上,额外进行了基于 LongWriter-6k-filtered 666 条数据的 2 个 epoch 退火训练,则在 SL, SQ 和 S-avg 几个指标上都全面超越了其他测试模型。
其中具体实验 5 的退火 (annealing) 训练的命令行如下:
CUDA_VISIBLE_DEVICES=0,1,2,3 nohup swift sft \
最终采取实验 5 的产出模型,作为 MS-LongWriter-Qwen2.5-7B-Instruct 开源到了 ModelScope。
最后,为评估针对遵循指令进行长文本写作任务定制的模型,在基础能力上是否存在退化,在 mmlu、ceval、ARC_c、gsm8k 上,使用 EvalScope 对于 MS-LongWriter-Qwen2-7b-instruct 进行了评估。
通过 swift 接口与 EvalScope 的对接,可以一键完成模型部署,推理和评估流程。
例如可以通过如下命令,完成对于 Qwen2-7b-instruct 的基础能力评估:
CUDA_VISIBLE_DEVCIES=0 swift eval --model_type qwen2-7b-instruct --eval_dataset mmlu ceval ARC_c gsm8k
比较几个模型在基础 benchmark 上的得分,结果如下:
可以看到,针对遵循指令进行长文本写作任务定制微调的模型,除了在 ceval 上有一些提升,在其他通用任务,尤其是偏逻辑推理的 benchmark 上,能力还是会有一定的 regression,例如在 MMLU 上的掉点是较为明显的。
总体来看,多种证据表明,针对遵循指令进行长文本写作这个任务,要来训练定制模型,训练数据的质量,会比数量更加重要。
且在这个任务上,可能从对齐的 chat 或 instruct 模型开始训练,会比从未对齐的 base 模型开始训练更加经济。
在这个最佳实践中,得益于 ModelScope Swift 训练工具和 EvalScope 评估工具,团队很方便的进行了各种不同的对比实验。
本文中使用到的开源工具包括:
并且通过基于 chat 和 instruct 模型作为起点,只使用相比原始 LongWrite 训练所需的 3.7% 的数据和计算消耗,就在 Qwen2-7b-instruct 和 GLM4-9b-Chat 上,在长文本撰写任务上都获得了和原 paper 里几乎一致的效果提升(12pt 左右)。
而在 Qwen2.5-7b-instruct 本身提供了较好长文本输出能力的基础上,通过同样少量高质量数据的训练定制,在这个任务上,能全方位获得最佳的效果。
团队训练使用的数据,以及最后输出的模型,目前都开源到了 ModelScope。
参考资料:
文中使用到的开源工具框架: 模型训练微调框架 MS-Swift:https://github.com/modelscope/ms-swift 模型评估工具 EvalScope:https://github.com/modelscope/evalscope/
精筛后的 666 条数据集构成的 LongWriter-6K-Filtered 数据集: https://www.modelscope.cn/datasets/swift/longwriter-6k-filtered
训练微调后开源的长文本模型: MS-LongWriter-Qwen2.5-7b-instruct: https://www.modelscope.cn/models/swift/MS-LongWriter-Qwen2.5-7B-Instruct MS-LongWriter-Qwen2-7b-instruct: https://www.modelscope.cn/models/swift/MS-LongWriter-Qwen2-7B-Instruct MS-LongWriter-GLM4-9B-Chat: https://www.modelscope.cn/models/swift/MS-LongWriter-GLM4-9B-Chat
原始开源的 LongWriter-GLM4-9B 模型: https://www.modelscope.cn/models/ZhipuAI/LongWriter-glm4-9b
其他相关数据集 WildChat: https://www.modelscope.cn/datasets/thomas/WildChat Magpie-Qwen2-Pro-200K-Chinese: https://modelscope.cn/datasets/AI-ModelScope/Magpie-Qwen2-Pro-200K-Chinese Magpie-Qwen2-Pro-200K-English: https://modelscope.cn/datasets/AI-ModelScope/Magpie-Qwen2-Pro-200K-English

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online