大模型的微调数据选择技巧(二)
作者: AINLP 来源: AINLP
在上一篇文章里,我们回答了几个关于大模型数据方面的问题
1.数据要不要都去标注,标的比较慢咋办?
2.我已经有一批标好的数据了,再去选哪些数据送标注比较好?
3.能不能总结出一套数据构造方面自动化的方法?
传送门大模型微调数据选择和构造技巧。
那么我们再来一个新的问题,如果给定了一批标注数据,如何选出其中“最好的”,“最适合”训练的数据子集呢?
类似于传统机器学习的特征选择,从N个特征里选出n个,提升模型效果,本身这个问题是NP难的,我们有没有什么近似的,高效的,贪心的方法能解决这个问题。大模型选数据也一样,不可能所有的组合都尝试一遍。
这篇文章《One Shot Learning as Instruction Data Prospector for Large Language Models》就提出了一个方法,可以从一堆数据中,把精华选出来,使用精华部分训练就够了,这个方法称为Nuggets。
具体是怎么做的可以参考这个图。
Nuggets看着挺复杂的,其实很简单,首先Nuggets有三个输入,一个输出。
三个输入分别是:第一,一个大模型,用来评估数据好坏;第二,Predefined Task Set 用来辅助评估数据好坏;第三,Instruction Set就是等待筛选的大数据集。
输出目标就是Instruction Set的优秀子集,被称为Golden Set。
一句话说明白它是怎么做的。
它认为,如果一条数据作为one-shot的那个shot,即作为一条例子作为参考,能使得大模型有这个参考后,比zeroshot提升很多,就认为这是一条高质量的数据。
类似机器学习场景,多了一个特征,auc暴涨,那这个特征就是个好特征。
整体的方法论就是这样,至于评估LLM输出的好坏,其实可以选取的角度很多,比如最简单的PPL。
TASK就是Predefined Task Set中的测试数据,文中设定包含1000条左右的指令测试数据。需要对这1000条数据 有了one-hot参考后的PPL变化情况统计,数一下有百分之多少变好了,就作为这条数据A的Golder Score。
然后把Instruction Set的每一条数据都算出来他的Golder Score,从高到低排序,选top N作为最优子集即可。
结果比较惊人,在Alpaca数据中,选出top 1%的数据,就能取得和使用全部Alpaca类似的效果!
思路简单明了,但是有可以改进的地方。
首先是Predefined Task Set辅助数据集,这个随便选1000个就是最好的吗?
作者实验发现,使用Kmeans聚类100个类后,每个类别中心选1个,最后100个有代表性的效果是最好的。
整体看来,这个方法还是非常直观的,大家可以把思路拓宽一点,延伸到特征选择中的那些方法,看能否迁移过来,其核心就是如何低成本的度量一条数据有用。期待你的讨论。
进技术交流群请添加AINLP小助手微信(id: ainlp2)
请备注具体方向+所用到的相关技术点
![](https://api.allorigins.win/raw?url=https://mmbiz.qpic.cn/mmbiz_jpg/nW2ZPfuYqSJADkmZ2IX6Z23znAibuEevotDMq9iaMxiapK7jfMibiauGFkycicAJEs6x5U9SGyDJZ0S1tRed9TPNUUDQ/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1)
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括LLM、预训练模型、自动生成、文本摘要、智能问答、聊天机器人、机器翻译、知识图谱、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。
![](https://api.allorigins.win/raw?url=https://mmbiz.qpic.cn/mmbiz_jpg/nW2ZPfuYqSKABHCqVVQkVYPrM4XY1vsd0iaeuXzyJnoFc8cibd5mYb4wdA3WMQtiaPVmr0XLZHMuVibqWncibpnTSnQ/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1)****
更多AI工具,参考Github-AiBard123,国内AiBard123