当你需要通过SFT/RL改变大模型表现,并且业务场景对输出的多样性有要求,不妨在损失函数上加上“偏离度”试试
论文标题
modifying large language model post training for diverse creative writing
论文地址
https://arxiv.org/pdf/2503.17126
代码地址
https://github.com/mj-storytelling/DiversityTuning
作者背景
Midjourney,纽约大学
动机
大语言模型在创意写作任务中经常面临缺乏多样性的问题,并且当前被广泛应用的指令微调/偏好对齐技术,也常常倾向于让LLM生成风格类似的同质化内容,它们旨在要求模型产出“多数人认为好的”回答,却忽略了那些小众但同样精彩的创作
目前关于提高多样性的方案大致有以下三类:
- 基于采样
在采样过程中引入top-k、top-p、min-p等解码参数可以让输出更具有多样性,但这样的方案一般都会牺牲准确性 - 基于提示词
通过提示词要求模型进行自我批评,要求多次迭代输出避免生成重复内容,应用进化算法等,这些方法大多针对简单的任务,如婴儿名字或随机数字生成,对于复杂任务的效果不佳 - 后训练
使用专门的多样性数据集微调,通过强化学习鼓励创新打压同质化。这类方法的问题主要在于需要消耗大量精力去构造合适的数据集
本文方法
本文提出了一种新的后训练方法,通过在训练目标中加入“偏离度”来使大模型提高输出多样性的同时性能不下降;
偏离度是指一个训练样本与其他具有相同提示的样本之间的差异程度,作者主要考虑了两方面的差异:语义偏离与风格偏离,二者都是靠向量化后的余弦距离来衡量;
具体地,作者使用Jina Embeddings V3获取语义编码,使用AnnaWegmann/Style-Embedding获取风格编码,然后将每个输出与同提示下其他所有输出之间距离的平均值作为“偏离度”;
得到偏离度后,简单地将其作为权重,乘到DPO/ORPO的损失函数中,便能让模型输出重点关注“质量好并且多样性强”的样本
实验结果
- 测试数据: 来自Reddit的/r/writingPrompts数据集,包含多个用户发布的写作提示和对应的创意写作回复,将每个提示下得分最高的回复视为胜出样本,得分较低的视为败北样本,构造成偏好对数据集
- 质量评估: LLM-as-judge、上述数据(提升,回复,打分)训练出来的奖励模型、人工评估
- 多样性评估: 样本之间的平均成对余弦距离、人工评估
- 测试对象: SFT、DPO、ORPO训练的Llama-3.1-8B和Mistra-7B,以及GPT-4o、o1、Claude-3.5-sonnet、DeepSeek-R1等现成的指令模型/接口,还有人类创作的结果
现有最先进的模型/接口(GPT-4o、Claude、DeepSeek等)在写作任务上呈现质量搞但低多样性
GPT-4o-iter使用迭代提示生成多样化输出,但提升的程度很有限
人工创作(“Gold”)的多样性最高,但质量分低于其他经过训练的模型,这大概是因为人类创作者并未针对Reddit受众特性做专门培训,所以在reddit数据训练出来的奖励模型上分数不高
SFT模型(Lora指令微调的结果)质量分最低,但具有较好的多样性;DPO和ORPO提高了模型的质量,但多样性几乎没有改善,甚至略有下降,这再次证明了当前常用的SFT和RL方法难以兼顾这两项指标
引入偏离度后,DDPO和DORPO显著提高了语义和风格的多样性。其中DDPO-sem聚焦语义多样性,DDPO-sty聚焦风格多样性,DDPO-both则同时提升了语义和风格的多样性,达到了左上方理想区域。更重要的是,多数DDPO/DORPO模型的质量得分没有下降,部分甚至有所提升
点个关注吧~