【LLM】sft和pretrain数据处理和筛选方法

news2025/1/9 23:52:08

note

  • 痛点:训练垂直领域模型,sft数据和增量pretrain数据质量把控很重要
    • 当数据不够时,通过self-instruct等方法造多样化的数据
    • 当数据很多时,需要清洗/筛选出高质量数据

文章目录

  • note
  • 一、sft数据的筛选策略
    • 1.1 使用self-instruct构造sft数据
    • 1.2 筛选高质量sft数据
    • 1.3 评估sft数据质量和数量
  • 二、pretrain数据的筛选策略
    • 2.1 预训练数据
    • 2.2 清洗pretrain数据流程
    • 2.3 评估pretrain数据质量

一、sft数据的筛选策略

内容概要:

  • 构造sft数据
  • 评估sft数据质量和数量
  • 自动化筛选高质量sft数据

1.1 使用self-instruct构造sft数据

论文:《Self-Instruct: Aligning Language Model with Self Generated Instructions》
self-instruct构造数据:指令生成;实例生成;过滤和后处理(原self-instruct方法在第一步后有分类任务识别,但现在主流方法都是省略这步)。
[图片]

(1)生成指令:

  • 每次从任务种子池(每个任务有一条指令+一条实例)中随机抽取8条数据
  • 划分task粒度可控,如阅文打斗场景,可以分为操场、山顶、平地等打斗场景描写的task。
# seed data
{"id": "seed_task_0", "name": "breakfast_suggestion", "instruction": "Is there anything I can eat for a breakfast that doesn't include eggs, yet includes protein, and has roughly 700-1000 calories?", "instances": [{"input": "", "output": "Yes, you can have 1 oatmeal banana protein shake and 4 strips of bacon. The oatmeal banana protein shake may contain 1/2 cup oatmeal, 60 grams whey protein powder, 1/2 medium banana, 1tbsp flaxseed oil and 1/2 cup watter, totalling about 550 calories. The 4 strips of bacon contains about 200 calories."}], "is_classification": false}

# prompt
Come up with a series of tasks:
Task 1:  {instruction for existing task 1}
Task 2:  {instruction for existing task 2}
Task 3:  {instruction for existing task 3}
Task 4:  {instruction for existing task 4}
Task 5:  {instruction for existing task 5}
Task 6:  {instruction for existing task 6}
Task 7:  {instruction for existing task 7}
Task 8:  {instruction for existing task 8}
Task 9:

(2)生成实例:利用(1)的指令给gpt
(3)过滤和后处理:衡量新数据和池中已有指令数据的相似度,只有当它和池中任何一条指令数据的 ROUGE-L 相似度都低于 0.7 的时候,才能会被加入到指令池中
[图片]

1.2 筛选高质量sft数据

(1)sft数据的清洗

  • 背景:针对gpt等大模型构造的指令数据,进行sft数据清洗
  • AlpacaDataCleaned(https://github.com/gururise/AlpacaDataCleaned)项目:提供Alpaca数据集的干净版本
    通过消除错误和不一致,提高微调的alpaca模型性能,并减少幻觉的可能性。
  • 清洗大模型生成的sft数据的方法:https://github.com/gururise/AlpacaDataCleaned/tree/main/tools
    • 检查数据集的input是否存在潜在问题。
    • 询问 GPT-3.5 对于给定的指令和输入是否正确、对应。
    • 检查数据集中是否有合并的指令。
    • 检查output是否有问题,如阅文的角色灵感场景,是否有截断现象、输出是否符合字典要求等

(2)通过IFD指标筛选sft数据
(1)论文:《From Quantity to Quality: Boosting LLM Performance with Self-Guided Data Selection for Instruction Tuning》平安科技:从大量可用数据集中自动识别高质量数据

  • Paper: https://arxiv.org/abs/2308.12032
  • Github: https://github.com/MingLiiii/Cherry_LLM
  • 核心内容:提出一个指令跟随难度(Instruction-Following Difficulty,IFD)指标,通过该指标来筛选具有增强LLM指令调优潜力的数据样例(樱桃数据,cherry data),而模型仅使用原始数据5%-10%的cherry数据就可以达到全量数据微调的效果,甚至可以有所提高。
  • 启发思想:清洗sft数据后可以通过计算IFD,自动化筛选出IFD top-k数据进行微调

在这里插入图片描述

(2)三个步骤:

  • step1:利用少量(文中是1k)进行模型sft初学;
    • base model一般只能续写,没有指令遵循能力,选少量数据先训练v1模型
    • 300样本时模型开始有一定的指令遵循能力
    • 为保证数据多样性,使用Kmeans对所有数据聚类为100个簇,每个簇里选10个样本,base model在这1k条数据中sft一个epoch得到Brief Experience model
  • step2:利用初学模型计算所有原始数据中IFD指标;
    • 条件回答分数CAS:Conditioned Answer Score,模型对指令Q生成答案A的难易程度
      • CAS: L θ ( A ∣ Q ) = 1 N ∑ i = 1 N log ⁡ P ( w i A ∣ Q , w 1 A , w 2 A , … , w i − 1 A ; θ ) L_\theta(A \mid Q)=\frac{1}{N} \sum_{i=1}^N \log P\left(w_i^A \mid Q, w_1^A, w_2^A, \ldots, w_{i-1}^A ; \theta\right) Lθ(AQ)=N1i=1NlogP(wiAQ,w1A,w2A,,wi1A;θ)
        • (Q, A)是一个问答对
    • 直接答案分数DAS:Brief Experience model模型对答案续写,计算DAS:
      • DAS: s θ ( A ) = 1 N ∑ i = 1 N log ⁡ P ( w i A ∣ w 1 A , … , w i − 1 A ; θ ) s_\theta(A)=\frac{1}{N} \sum_{i=1}^N \log P\left(w_i^A \mid w_1^A, \ldots, w_{i-1}^A ; \theta\right) sθ(A)=N1i=1NlogP(wiAw1A,,wi1A;θ)
    • 指令跟随难度IFD:指令跟随难度指标,数值越大表明该条指令数据的难度越高,对模型微调更有利。
      • IFD: r θ ( Q , A ) = s θ ( A ∣ Q ) s θ ( A ) r_\theta(Q, A)=\frac{s_\theta(A \mid Q)}{s_\theta(A)} rθ(Q,A)=sθ(A)sθ(AQ)
  • step3:利用cherry数据进行模型重训练得到最终的sft model。

举例子:

  • 如下的positive example:条件回答分数CAS越高表示给定的指令,越难生成对应的target部分,CAS越大越好;直接答案分数DAS越高表示预训练的LLM越不容易生成该文本。
    • 第一个:CAS和DAS都较高,并且最终的IFD指标也是较高的(是更好的sample);该CAS较高,说明给定instruction生成对应的target是更难的
    • 第二个:CAS和DAS都较低,这里的DAS较低是好事,表示LLM直接写出target是难的
  • 如下的negative example:
    • 第一个:target长度较短,而较短的文本一般困惑度较低,所以该较短的文本DAS数值较高example1更大
  • 注意:在项目代码中,条件答案得分(CA)等同于计算loss,猜测是计算instruction+input+answer部分的loss;直接答案得分(DA),是直接answer部分的loss

在这里插入图片描述
获取中间置信度的数据:
对类中心的数据点排序->如果某个类数据不够,全采->获取这个类别的的置信度,置信度来自于样本的ppl值->获取最低的ppl阈值和最大的阈值->将最低阈值和最大阈值之间的数据作为中间数据上->如果中间阈值过滤数据量不够采样数量,则全部使用->否则切分成n份进行采样

(3)实验结果:在Alpaca和WizardLM两个数据集上利用Llama-7B进行实验,发现在5%的Alpaca樱桃数据上进行训练就超过了全量数据训练结果。
在这里插入图片描述

  • 结果对比:对比随机采样、IFD采样、IFD低分采样、CAS采样四种方法对模型指令微调的影响,发现IFD采样在不同数据比例下,均高于全量数据微调效果,但其他采样方法均低于全量数据微调方法。

1.3 评估sft数据质量和数量

(1)sft数据的数量
1)《LIMA: Less Is More for Alignment》哈佛:sft数据质量的重要性大于数量

  • Superficial Alignment Hypothesis假设:任务大模型在pretrain阶段已经学习完所有知识,sft是学习与用户交互的方式和风格
  • LIMA模型:
    • LIMA是一个65b的llama微调模型,没有使用rlhf强化学习
    • 单轮对话场景:
      • 数据:一共1k条高质量sft数据,有人工手写250条数据,有从社区问答中抽取750个热门问答对,并且在有的prompt中加入let’s think step by step
    • 多轮对话场景:30个高质量多轮对话样本微调后,就能大幅度提高多轮对话能力
  • LIMA模型和其他模型对比结果:
    • LIMA的效果优于Alpaca 65B及DaVinci003(尽管它们训练数据量远大于LIMA,且DaVinci003使用了RLHF进行微调,且Alpaca 65B参数量大很多,是在52000条数据调sft数据进行微调)。
    • 结果支持了文中最初的假设。

在这里插入图片描述

2)论文:《Exploring the Impact of Instruction Data Scaling on Large Language Models:An Empirical Study on Real-World Use Cases》贝壳

  • 对于翻译、改写和头脑风暴任务,200万甚至更少的数据量可以使模型表现良好。
  • 对于提取、分类、封闭式QA和总结摘要任务,模型的性能可以随着数据量的增加而继续提高,这表明仍然可以通过简单地增加训练数据量来提高模型的性能,但改进的潜力可能是有限的。
  • 模型在数学、代码和COT上的表现仍然很差,需要在数据质量、模型规模和训练策略上进一步探索。

3)按照比例筛选sft数据
度小满金融大模型:https://github.com/Duxiaoman-DI/XuanYuan

  • 基于bloom-176B模型,训练了一个中文金融大模型,提出【混合微调】缓解catastrophic forgetting(灾难性遗忘)问题
  • 混合数据微调
    • Pretrain data:从网上爬取,清洗过滤。
    • Sft data:使用人工编写的种子指令通过 Self-Instruct (Wang et al., 2022) 收集通用数据,并利用金融领域的非结构化和结构化数据通过 Self-QA 收集特定领域的指令数据 (张和杨,2023)。
    • 通用sft数据和领域sft数据的比例:如下图

在这里插入图片描述

(2)sft数据的质量

  • 论文:《Instruction Mining: High-Quality Instruction Data Selection for Large Language Models》
  • 核心内容:INSTRUCTMINING是一种线性质量规则和指标,用于评估指令跟随数据的质量,并通过在LLAMA-7B模型上进行广泛的微调实验来估计INSTRUCTMINING的参数。该工作的方法只在单轮指令遵循和大部分由人类撰写的数据集上进行了实验,还没有在多轮和更复杂的对话数据集上进行测试。
    (1)当前评估sft数据质量的一些指标:
    Length
    Rewardscore
    Perplexity
    MTLD
    KNN-i
    Unieval-naturalness
    Unieval-coherence
    Unieval-understandability

(2)文中定义sft数据质量公式: Q D ∣ M , S ∝ − L ( M ~ , D eval  ) Q_{D \mid M, S} \propto-L\left(\tilde{M}, D_{\text {eval }}\right) QDM,SL(M~,Deval )

  • D eval  D_{\text {eval }} Deval :高质量、无偏见的评估数据集
  • 设计实验来研究指标与数据集质量之间的多变量和单变量相关性,然后以此挑选微调数据
  • 结论:
    • PPL、MTLD、Nat和Und与预期评估损失呈正相关,表明这些变量数值增加,evaluation loss更高,所以这些变量越低越好。
    • RewardScore、Coh与evaluation loss呈负相关,所以这些变量数值可以适当增大。

在这里插入图片描述

二、pretrain数据的筛选策略

内容概要:

  • 预训练数据
  • 清洗pretrain数据流程
  • 评估pretrain数据质量:困惑度(perplexity)、错误L2范数(ErrorL2-Norm)和记忆化(memorization)

2.1 预训练数据

增量pretrain:可适当加入如下的通用语料(下图为常见的pretrain语料)
[图片]

2.2 清洗pretrain数据流程

  • 论文:《When Less is More: Investigating Data Pruning for Pretraining LLMs at Scale》
  • 方法:
    • step1:进行语言识别,以便适当地将数据分配给相应的语言,剔除非目标任务语言
    • step2:规则方法
      • 丢弃perplexity高的文本数据(过滤一些不自然的文本)
        在这里插入图片描述

      • 删去标点/符号过多、过长过短的句子

      • 删除具有某些特定词汇(如html标签、链接、脏话、敏感词)的句子。

    • step3:通过轻量级模型进行过滤,如通过KenLM语言模型,以避免出现噪声文档。
    • step4:进行数据去重,以去除相似或重复的信息。在文档层面进行模糊重复数据删除,例如通过MinHash来删除相似文档,从而减少记忆并提高LLM的泛化效果。
      • 包含大量重复词汇或短语的句子可以删掉;
      • 重复率(词/n-grams共现)过高的段落可以删掉;
      • 删除训练集中可能与测试集相关度过高的内容,这样可以缓解语言模型生成内容重复的问题,避免测试集泄露带来的过拟合问题。
    • 开源工具:FastText、CC-Net、MinHashLSH等

(2)去重算法总结:
在这里插入图片描述

(3)参考数据集:CulturaX数据集经过严格的多阶段清理和重复数据删除,以达到最佳的模型训练质量,包括语言识别、基于URL的过滤、基于度量的清理、文档再细化和重复数据删除。
地址:https://arxiv.org/pdf/2309.09400.pdf
数据地址:https://huggingface.co/datasets/uonlp/CulturaX

2.3 评估pretrain数据质量

  • 论文:《When Less is More: Investigating Data Pruning for Pretraining LLMs at Scale》
  • 核心内容:数据剪枝(过滤),主流的方法是基于规则的手工启发式过滤方法,比如写正则表达式,本文使用三个指标评估pretrain质量:困惑度(perplexity)、错误L2范数(ErrorL2-Norm)和记忆化(memorization),提出数据剪枝方法。
  • 结论:
    • 与使用EL2N和记忆化对50%的数据集进行剪枝的性能最好的模型相比,基于困惑度对50%的数据集进行剪枝的模型分别提高了1.33%和1.77%。
    • 与使用EL2N和记忆因子剪枝到30%数据集的性能最好的模型相比,使用困惑度剪枝到30%数据集的模型分别提高了2.1%和1.6%。

在这里插入图片描述

实验细节:

  • 删除简单实例可提高性能,简单实例比如困惑度低的底层样本、使用EL2N指标低的底层样本、使用memorization指标时记忆最彻底的顶部样本
  • 使用较大参考模型的剪枝优势更大

基于剪枝后的数据微调后的模型评测结果(GLUE任务的子集上对模型进行了微调和评估):
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1147318.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华媒舍:日韩媒体发稿推广中8个关键因素帮助你实现突破

在当今经济全球化的时代背景下,日韩地域媒体影响力日益提高。对于需要在这一地区开展发稿推广的人来讲,掌握适度的思路和流程是十分重要的。下面我们就为大家介绍8个关键因素,以帮助你在日韩地域媒体发稿推广中实现突破。 1.科学研究行业在逐…

MySQL(2):环境搭建

1.软件下载 软装去官网下载(社区版):https://downloads.mysql.com/archives/installer/(历史版本可选) 选择下面的,一步到位 2.软件安装 双击 .msi 文件 选完 Custom 自定义后点 next 按 1&#xff0c…

【LInux】进程概念II -- 描述进程

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我吧!你定不会失望。 本篇导航 0. 进程概念1. 描述进程2. 组织进程 0. 进程概念 在初学阶段,我们对进程这个词仅在书上看见过,大多不太理解这个究竟是什么意思…

数据库管理-第113期 Oracle Exadata 04-硬件选择(20231020)

数据库管理-第113期 Oracle Exadata 04-硬件选择(2023010290) 本周没写文章,主要是因为到上海参加了Oracle CAB/PAB会议,这个放在后面再讲,本期讲一讲Exadata,尤其是存储节点的硬件选择及其对应的一些通用…

文件夹批量改名:如何在文件夹名左边添加递增的自动编号

在文件管理的过程中,我们有时需要对文件夹进行重命名,使其更具区分度和可读性。为了实现这一目标,我们可以采用在文件夹名左边添加递增的自动编号的方法。本文将介绍云炫文件管理器如何进行文件夹批量改名,以在文件夹名左边添加递…

如何将设计模式责任链模式运用到工作当中

文章目录 🌟 如何将设计模式责任链模式运用到工作当中🍊 什么是责任链模式🍊 在工作中如何应用责任链模式🎉 权限验证🎉 日志记录🎉 数据处理 🍊 责任链模式的优点🍊 总结 &#x1f…

【MATLAB源码-第62期】基于蜣螂优化算法(DBO)的无人机三维地图路径规划,输出最短路径和适应度曲线。

操作环境: MATLAB 2022a 1、算法描述 蜣螂优化算法(Dung Beetle Optimization, DBO)是一种模拟蜣螂在寻找食物和进行导航的过程的优化算法。蜣螂是一种能够将粪球滚到合适地点的昆虫,它们利用天空中的光线和自身的感知能力来确…

关于深度学习中Attention的一些简单理解

Attention 机制 Attention应用在了很多最流行的模型中,Transformer、BERT、GPT等等。 Attention就是计算一个加权平均;通过加权平均的权值来自计算每个隐藏层之间的相关度; 示例 Attention 机制 Attention应用在了很多最流行的模型中&am…

挖掘业务场景的存储更优解

文章目录 第1章 如何用更优的数据存储方案,打造更稳定的架构?1.1 选用适合自己的数据存储方案1.1.1 关系型数据库1.1.2 非关系型数据库1.1.3 内存数据库 1.2 打造更稳定的架构1.2.1 分布式架构1.2.2 容灾备份1.2.3 监控报警1.2.4 自动化运维 1.3 案例分析…

redis中的io多线程(线程池)

文章目录 redis多线程模型redis为什么引入I/O多线程I/O多线程模型 源码解析测试设置连接建立数据传输线程调度开启io线程startThreadedIO关闭io线程stopThreadedIO redis多线程模型 redis为什么引入I/O多线程 Redis 的性能瓶颈在网络 IO 的处理上。Redis 是网络 IO 密集型&am…

Connectify Hotspot 23.0.1.40175 MAX Crack

您是学生吗?你在宿舍打游戏吗?你是在集体宿舍吗?如果是:你需要功能上网吧 Connectify Hotspot 专业 WiFi 热点共享管理工具 Connectify 是一款强大的无线热点工具,可以让带有无线网卡 / 3G 上网卡的电脑变成无线路由器…

百度网盘使用指南

文章目录 备份篇手机文件备份电脑文件备份 查找篇移动端PC端 文件操作文件解压文件扫描PDF工具图片工具音频操作 备份篇 手机文件备份 在百度网盘APP种点击 我的–设置–自动备份设置 里边有相册备份, 文档备份, 微信文件备份, 手机通讯录, 短信, 通话备份等功能 电脑文件备…

什么是OSPF?

开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。 目前针对IPv4协议使用的是OSPF Version 2 目录 为什么需要OSPFOSPF基础Router ID链路状态COST报…

蓝桥杯学长经验笔记

平台:立扣,牛客网,蓝桥云课 ,codeforce刷题时间:刷题时间: 每天:有课一个多小时 周末 3-4 小时:学一部分做一点题书:《算法竞赛从入门到进阶》、《算法笔记》、《算法竞赛…

0X01

打开题目 点了几下跳出一个新的页面 点击secret 在上一个页面查看源代码,出现action.php然后点击之后就会在地址栏里面出现end.php 抓包看看,出现secr3t.php huidao开始的页面,访问看看 这是一个PHP脚本,以HTML标签开头。该脚本包…

SSE(SeverSideEvent)服务端推送技术

SSE应用场景1: ChatGPT的打字效果: 可以看到ChatGPT的输出是逐字输出的打字效果,这里应用到了SSE(SeverSideEvent)服务端推送的技术。一个SSE服务的Chrome开发工具化network截图 : SSE原理 HTTP 服务器…

HTML5+CSS3+Vue小实例:路飞出海的动画特效

实例:路飞出海的动画特效 技术栈:HTML+CSS+Vue 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&…

私有云:【10】VCenter安装win10

私有云&#xff1a;【10】VCenter安装win10 1、ESXI挂载win10镜像2、VCenter安装win102.1、创建虚拟机2.2、启动虚拟机 此WIN10用来作为以后的远程桌面 1、ESXI挂载win10镜像 2、VCenter安装win10 2.1、创建虚拟机 创建虚拟机 设置名称下一步 选择计算机资源 选择NFS存储 设置…

CommunityToolkit.Mvvm 加速 MVVM 开发

CommunityToolkit.Mvvm 加速 MVVM 开发 CommunityToolkit.Mvvm 简介CommunityToolkit.Mvvm 包含的实现源生成器不使用源生成器使用源生成器ObservableProperty 属性使用方式通知依赖属性通知依赖命令请求属性验证发送通知消息 RelayCommand 属性使用方式命令参数异步命令启用和…

Vue实现首页导航和左侧菜单,介绍mock.js并实现登录注册间的跳转,实现左侧栏折叠效果,优化Main.vue组件,使用mock.js生成随机响应数据

目录 1. mockjs 1.1 mockjs介绍 1.2 mockjs使用步骤 1.2.1 安装mockjs依赖 1.2.2 在项目中引入mockjs 1.2.3 创建目录和文件 1.2.4 为每个组件准备模拟数据 1.2.5 测试 1.2.6 前端调试 1.2.7 mockjs生成随机响应数据 1.2.8 根据不同响应&#xff0c;给出不同提示 2…