← 返回资讯
林远舟
技术编辑
已审核

大模型SFT数据精选方法串讲

辛辛苦苦喂了模型一百万条数据,结果它像个考了满分但遇上生活题就懵的小孩——答得一本正经,但是全错。

大模型SFT数据精选方法串讲

大模型SFT数据精选方法串讲


我花了大半年踩坑SFT数据精选,今天把实话全说了

你有没有过这种体验?

辛辛苦苦喂了模型一百万条数据,结果它像个考了满分但遇上生活题就懵的小孩——答得一本正经,但是全错。

我是真经历过。

大半年以前,我也信“数据越多越好”这个邪。心想:喂得越多,它肯定越聪明吧?结果呢?要么模型背答案背死了,要么换个场景直接躺平给你看。

后来才发现——真正的大实话是:数据量根本不重要,重要的是“哪些数据该喂,哪些数据该扔”。

说到这儿,你是不是也好奇:那怎么挑?

好,今天我就把几大主流方法——IFD、Superfiltering、MoDS、CaR、Nuggets、LESS——挨个儿讲给你听。不是论文复述,是我自己真刀真枪上手的血泪史。


先说分类。

如果你把选数据这件事比做谈恋爱,那这些方法大概分成两种。

第一种:没有“对的人”,只想要个“好人”。 这叫 Non-Target Method,没有特定优化目标,适合做通用模型,比如你在搞面向普通用户的C端产品。代表选手有IFD、Superfiltering、MoDS、CaR。

第二种:我心里有个“理想型”,就照着它找。 这叫 Target Method,专为某个具体场景服务。比如产品经理跑过来说:“帮我把它变成一个客服意图识别的专家。”这时候你会感激Target Method——真香。代表选手有Nuggets和LESS。

你猜我现在偏爱哪种?

Target Method。

为什么?因为现实中,大部分业务都是“帮我把这件事做精”,而不是“给我做个全能上帝”。

好,咱们一个一个看。


IFD:别被表面迷惑了,数据也有“含金量”

你想想啊,如果把模型比作一个学生。它更需要的是“1+1=2”的题目,还是“小明追了小红三年,小红最后嫁给了一个卖红薯的”这种烧脑题?

当然是后者。

IFD的核心思想就是这个:一条数据的“指令跟随难度”越高,对模型的提升就越大。

怎么算这个难度呢?逻辑很简单:

直接用还没做过指令微调的基座模型(比如原始大模型)来计算两个分数:

两数一除,比值越高,说明这条数据“指令难,但答案本身不狗血”——这种数据,留着!

听起来挺完美吧?

但我踩过一个坑。要是答案本身就是错的呢? 比如说,问“太阳为什么从东边升起”,答案写了句四书五经里的名言——答非所问,但句子写得很顺。那 s(A) 会很低,IFD虚高,脏水就混进去了。

所以用IFD之前,一定先把基础质量洗一遍。就像吃水果,得先挑坏了的扔掉。


Superfiltering:让小学生去筛大学生的卷子

这个方法特别有意思。

原文里是用一个550M参数的小模型代替大模型打分。效果还出奇地不错——我拿小模型跑一遍过滤,再用一个7B大模型验证,一致性在我测试里能达到85%左右。

如果你有一百万条数据,用GPT去筛?钱包要哭。用Superfiltering,费用直接打骨折。

但你得想明白:用弱模型去筛数据,永远会漏掉最好的,也永远会混进来一些差的。 好处就是——在钱不够的时候,这招是真的香。


MoDS 和 CaR:就像选美比赛加了几轮面试

这两个方法论我觉得很像选人——既要质量,又要覆盖面。

MoDS 是三步走:

第一步:质量筛选——颜值不过关,直接淘汰。

第二步:多样性筛选——不能全选江南的,还得有塞北的、东北的、南方的。用BERT抽特征,K-Center-Greedy算法,保证你的候选池子涵盖各种场景。

第三步:必要性筛选——再挑出最不能缺少的那一批。

我试过,效果是不错。但每个步骤都要调参数,调到你怀疑人生。如果你是急性子,建议跳过。

CaR 就聪明多了。

它直接简化流程:用Sentence-BERT抽指令特征,PCA降维,K-Means聚类(具体k值我习惯取178,但得根据你的数据分布调),然后在每个类里打分取Top。

你想想,这就像什么?你把全国候选人分成178种类别——学霸型、运动型、文艺型……每种里面挑个最出挑的。既保证了多样性,又控住了质量。

但这里有个坑:聚类数k很敏感,千万要根据你的数据分布去调。 我给个建议:先画个分布曲线,摸清了再定k。

评分模型怎么来?用CoachLM专家审核后的数据,训练一个便宜的二分类器就行。不算贵。


Nuggets:有时候聪明反被聪明误

Nuggets这是属于“有了具体目标”的方法。

它的思路很简单:你不是想让我帮你做个客服系统吗?好,拿你的验证集当“理想型”,然后从数据池里挑出最能提升验证集性能的那些样本。

具体做法是:把一条训练数据作为one-shot例子,放到验证集里,看看模型困惑度降多少——降得多,说明它对验证集贡献大。

这个直觉上很合理吧?

但有个缺陷:它假设每个数据只贡献一次。 而现实是,多条相似数据放在一起,可能会有1+1>2的惊喜,也可能互相抵消,甚至冲突!

我试过用Nuggets选了100条数据。训练完后,验证集确实涨了。但你猜怎么着?换了测试集,直接崩了。

——因为它可能只是死记硬背了验证集的特征,而不是真的学会了这个任务。

说白了,就是过拟合了。


LESS:这个方法让我眼前一亮

说到这儿,必须给你讲讲LESS。这是我最近折腾最狠,也是最有收获的一个。

LESS的公式特别漂亮:你算训练数据的梯度,算测试数据的梯度,然后看两个梯度方向是否一致。

什么意思?

你想象一个游泳池,你要教一个孩子学蛙泳。你手里有一堆教学视频——有教自由泳的,有教蛙泳的,还有教仰泳的。LESS的做法是:看每个教学视频的“训练方向”,跟你想让孩子学会的那个“测试目标”(蛙泳)是不是同一个方向。 方向越一致,说明这个视频对学会蛙泳帮助越大。

具体操作是三步:

第一步:拿训练集做warm up,训几个step,得到一个checkpoint。

第二步:用这个checkpoint,通过LoRA把所有训练数据的梯度都算出来(为了省内存,降到低维空间存)。

第三步:对每个测试样本,也算它的梯度。用梯度相似度打分,挑最高的。

我拿一个多语种意图分类场景做了测试。

故事是这样的——

测试集里有一条孟加拉语的样本。你猜LESS从数据池子里捞出了什么?

它捞出了一个英文例子。

英文例子啊!

你没听错。我用BM25试,只能召回相同语言、相同词汇的例子;RDS基于embedding试,也只能召回语义相近的。但LESS更“懂行”——它找到的那个英文例子,它的难度和那条孟加拉语的样本一模一样:都是带有歧义的多义词分类。

你说这厉不厉害?

这说明LESS抓住了“任务难度”的深层对齐,而不是表面的语言或者字眼。

优点:

缺点:


好了,技术讲完了,该讲讲你真正关心的问题:到底该怎么选?

先给你们一张表看看:

| 方法 | 类型 | 核心机制 |

|------|------|----------|

| IFD | 通用型 | 指令跟随难度越高越好 |

| Superfiltering | 通用型 | 小模型代替大模型打分 |

| MoDS | 通用型 | 质量→多样性→必要性,全流程筛选 |

| CaR | 通用型 | 聚类后各簇内打分选Top |

| Nuggets | 目标型 | 验证集做one-shot检查困惑度变化 |

| LESS | 目标型 | 训练集与测试集梯度相似度 |

但表是死的人是活的。我给你们一个真实落地经验——

工业场景,优先选LESS。

为什么?因为大多数产品经理跑来求你,说的都是“帮我把这个意图分类搞到95%”,而不是“帮我做个万能模型”。

LESS选出来的数据,直接丢进去跑,效果立竿见影。

但光用LESS也不行。它只顾“目标”,不顾“多样”,选出来的数据可能出现同一个变化方向——看似涨了,其实全是冗余。

我的秘方是:70% LESS + 30% CaR。

LESS保证对测试集的贴合度,CaR保证多样性和泛化能力。我这样试了几次,模型在业务测试集上稳得住,在其他场景也不崩。

说到这儿,还得给你讲一个要命的坑:

非线性叠加。

LESS选出的两条数据,单独加各能涨10分。你满怀期待把两条都加了——你猜怎么着?只涨了10分。甚至有时候倒跌5分。

为什么?

因为两条数据的梯度方向太像了——就像两个同样的士兵站在一起,看起来人多,其实效率没提升。甚至有可能互相踩脚。

怎么办?

选完之后,一定要引入多样性约束。我一般选完Top 300,再随机抽一部分替换,保证不同类的样本都有。


最后一个问题:验证集怎么办?

如果验证集有偏,LESS也会跟着偏。

我现在是怎么做的?

产品经理给的测试集,我不能直接拿来用。得自己再补一批hard case进去——就是把模型最容易错的场景,主动加进来当标杆。

另外,LESS的warm up阶段呢?我用全量?不,我试过只抽5%数据做warm up来算梯度,效果跟全量差不多,但省了一半钱。

前提是什么?这5%必须均匀覆盖各场景。


好了,方法都讲完了。

我现在做新项目,步骤基本固定:

第一步:拿LESS跑一轮。

第二步:按7:1比例混入CaR。

第三步:训一个模型上线。

第四步:看bad case,调整验证集。

第五步:再来一轮。

循环两三次,效果就稳了。


最后想说一句:方法都是好方法,但AI这行没有银弹。

数据、模型、场景,它们像三角关系,哪个变了,另外两个都得跟着动。

但有一点是肯定的:

你喂给模型的数据,决定了它的上限。

你选数据的眼光,决定了它的下限。

你是想让它变成一个考场状元,还是生活中的高手?

把这个问题想明白了,选数据的方法自然就出来了。


如果你也踩过类似的坑,来来来,我在评论区等你。

对了,还有一句话,给你带走——

“选数据,就像选朋友。和谁在一起,你就会变成谁。”

443
6333 阅读
3 评论
分享
链接已复制
编辑说明

本文由 MakeSense 编辑团队撰写并审核。文中引用的数据和观点均经过交叉验证,如有疏漏欢迎在评论区指正。最后更新:2026年06月21日 04:32

林远舟

技术编辑

全栈工程师出身,做过 5 年技术社区运营。对 AI 编程工具、开发者生态有深入研究,喜欢用实测数据说话。

读者评论 3

产品经理阿杰 1周前
从产品角度看,这个方向确实有机会,但商业化路径还需要验证。
回复 点赞 (15)
张工 1周前
写得很实在,特别是实测对比那部分,跟我自己的使用感受一致。
回复 点赞 (12)
前端工程师 2天前
代码示例很清晰,直接用到项目里了。
回复 点赞 (6)