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

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任务的子集上对模型进行了微调和评估):
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Arhas 常用命令

watch 函数执行数据观测: location 会有三种值 AtEnter,AtExit,AtExceptionExit。 对应函数入口,函数正常 return,函数抛出异常。 result 表示观察表达式的值: {params,returnObj,throwExp} eg: 查看是某个方法的参…

hadoop权威指南第四版

第一部分 HaDOOP基础知识 1.1 面临的问题 存储越来越大,读写跟不上。 并行读多个磁盘。 问题1 磁盘损坏 – 备份数据HDFS 问题2 读取多个磁盘用于分析,数据容易出错 --MR 编程模型 1.2 衍生品 1 在线访问的组件是hbase 。一种使用hdfs底层存储的模型。…

抓包分析DSCP字段在FTP/RSTP协议中的应用

抓包分析DSCP字段在FTP协议中的应用 简介 本文介绍DSCP字段的作用,以及抓包分析DSCP字段在FTP协议中的应用。最后通过实验证明有可能DSCP字段实际上对普通用户没啥用,原因是运营商可能会将用户设置的DSCP字段重置。 DSCP IP报文中有个TOS字段 &#…

网络协议--TCP的保活定时器

23.1 引言 许多TCP/IP的初学者会很惊奇地发现可以没有任何数据流通过一个空闲的TCP连接。也就是说,如果TCP连接的双方都没有向对方发送数据,则在两个TCP模块之间不交换任何信息。例如,没有可以在其他网络协议中发现的轮询。这意味着我们可以…

gitlab安装

centos7先更新containerd sudo yum install containerd docker pull gitlab/gitlab-ce:16.3.4-ce.0 docker-compose.yml version: 3.6 services:web:image: gitlab/gitlab-ce:16.3.4-ce.0restart: alwayshostname: node2environment:GITLAB_OMNIBUS_CONFIG: |external_url htt…

windows电脑安装系统后固态硬盘和机械硬盘的盘符号顺序显示错乱,解决方法

一、场景 由于电脑磁盘是SSD固态硬盘自己拓展的1T机械硬盘组成,固态硬盘分为C、D两个盘区,机械硬盘分为E、F两个盘区。为了提升运行速度,系统安装在C盘,安装完成后按照习惯盘区顺应该为C、D、E、F,但实际情况却是D、E…

排序算法-堆积树排序法(HeapSort)

目录 排序算法-堆积树排序法(HeapSort) 1、说明 2、算法分析 3、C代码 排序算法-堆积树排序法(HeapSort) 1、说明 堆积树排序法是选择排序法的改进版,可以减少在选择排序法中的比较次数,进而减少排序…

笔记本电脑的摄像头找不到黑屏解决办法

这种问题一般来说就是缺少驱动,就要下载驱动。 问题: 解决办法: 1.进入联想官网下载驱动 网站:https://newsupport.lenovo.com.cn/driveDownloads_index.html?v9d9bc7ad5023ef3c3d5e3cf386e2f187 2.下载主机编号检测工具 3.下…

Latex报错 “Paragraph ended before \Gin@iii was complete“

大家看看自己的模版的前面 加载的包 里面是不是有个 \usepackage{graphics} 问题就在这里,我们需要把它改成\usepackage{graphicx}

使用OBS Browser+访问华为云OBS存储【Windows】

背景 项目中使用华为云 S3 存储,java 代码中通过华为云 OBS 提供的esdk-obs-java 来访问文件。 但是,通过 JAVA SDK 方式不太方便运维,所以我们需要一款可视化的客户端软件。 华为云 OBS 自身也提供了一款客户端软件,名为 OBS Browser+。 OBS Browser+简介 OBS Browse…

【Linux】Centos yum源替换

YUM是基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 CentOS 8操作系统版本结束了生命周期(EOL)&#xff0…

一文详解汽车电子CAN总线

0.什么是CAN总线 CAN总线(控制器区域网络Controller Area Network)是一个中央网络系统,连接不同的电子控制单元(ECU)以及车辆中的其他设备。现在的汽车可以有100个ECU,因此CAN总线通信变得非常重要。 1.CAN总线流行的背景 集中式:CAN总线系统允许对连接…

Android:窗口管理器WindowManager

Android:窗口管理器WindowManager 导言 本篇文章主要是对Android中与窗口(Window)有关的知识的介绍,主要涉及到的有: WindowWindowManagerWindowManagerService 主要是为了更进一步地向下地深入Android屏幕渲染的知识(虽然窗口…

复习Animate和木疙瘩学习笔记-动画制作的回家之路

这个融媒体H5制作平台功能比较完善:包含了Flash(现在叫Animate)传统H5网页制作 720全景视频制作发布网页! 主要功能:素材导入、2D动画制作、常见交互添加、发布生成链接二维码 基本就是一个制作H5为主,但是里面的动画可以依赖4种…

力扣第738题 单调递增的数字 c++ 暴力超时 贪心优化

题目 738. 单调递增的数字 中等 相关标签 贪心 数学 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递增 。 示例 1: 输入: n 1…

【DevChat】智能编程助手 - 使用评测

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

操作系统运行机制

文章目录 操作系统运行机制特权指令VS非特权指令内核态VS用户态中断和异常内中断(异常)外中断中断机制基本原理中断处理过程 系统调用系统调用和库函数的区别为什系统调用时必须的&#xff1f;什么功能需要用到系统调用系统调用的过程小结 操作系统内核 操作系统运行机制 特权…

Java 四种引用类型

文章目录 前言一、整体架构二、强引用&#xff08;Reference&#xff09;三、软引用&#xff08;SoftReference&#xff09;四、弱引用&#xff08;WeakReference&#xff09;五、虚引用&#xff08;PhantomReference&#xff09;六、引用队列&#xff08;ReferenceQueue&#…

React Hooks 实战案例

文章目录 一、React Hooks 简介二、React Hooks 的基本用法1. 使用 useState 创建状态2. 使用 useEffect 添加副作用 三、React Hooks 的常见问题1. 循环引用问题2. 副作用问题 四、React Hooks 实战案例1. 使用 useReducer 和 Redux&#xff1a;2. 使用 useContext&#xff1a…

如何使用drawio画流程图以及导入导出

画一个基本的流程图 你可以在线使用drawio, 或者drawon创建很多不同类型的图表。 如何使用编辑器&#xff0c;让我们以一个最基本的流程图开始。 流程图&#xff0c;就是让你可视化的描述一个过程或者系统。 图形和很少部分的文字表达就可以让读者很快的理解他们需要什么。 创…