我们来看两个工作,关于大模型数据工程,在大规模数据集上进行监督微调(SFT)时数据选择的方法,发现随机选择几乎总是优于现有的数据选择技术。
一个是关于RAG进展, FunnelRAG:从粗糙到精细的渐进检索范式,会有一些收获。
一、大规模数据下监督微调(SFT)中的数据选择问题
最近的工作《Rethinking Data Selection at Scale: Random Selection is Almost All You Need》(https://arxiv.org/pdf/2410.09335,https://github.com/xiatingyu/SFT-DataSelection-at-scale)这个工作很有趣,探讨了在大规模数据集上进行监督微调(SFT)时,数据选择策略的有效性研究大规模数据下监督微调(SFT)中的数据选择问题。
针对大模型(LLMs),发现随机选择数据是一种有效的策略,并且在处理大规模数据时,大多数现有的数据选择方法都难以显著优于随机选择。
其强调在SFT中,数据选择的多样性比单纯追求高质量更为重要。此外,通过token长度过滤数据是一种稳定且有效的方法,尤其是对于较弱的基准模型。
有几个点可以看看。
1、已有的一些数据选择方法
自我评分方法分为两类:基于数据质量的方法和基于数据多样性的方法。
1)基于数据质量的方法
包括LESS、IFD、SelectIT和交叉熵等方法。这些方法通过评估数据点的复杂性、完整性、评分和影响等因素来选择数据。
LESS方法使用低秩梯度相似性搜索来选择有影响力的数据点。但是,LESS方法的影响评分计算依赖于目标任务的目标集设计,这在实际应用中难以实现,因为需要针对各种任务设计全面且多样的目标数据。
IFD方法引入了一个指令遵循难度(IFD)评分,用于评估每个指令样本的挑战性。但是,IFD方法确定的最终IFD评分依赖于响应的困惑度(ppl),但数据长度显著影响ppl值,导致选择的指令数据通常较短,平均仅42个token。
SelectIT方法基于LLMs的内在不确定性来选择高质量的数据点。但是,SelectIT方法需要在多个LLM上进行评分,随着数据集的增大,计算成本呈指数级增长,限制了其在大规模数据集上的应用。
交叉熵方法通过计算每个数据点的交叉熵来评估其质量,交叉熵值越高,数据质量越好。
2)基于数据多样性的方法
包括DiverseEvol和ZIP等方法。这些方法强调训练数据集的多样性。
DiverseEvol方法通过迭代采样训练子集来提高模型性能。通过迭代采样训练子集来提高性能,每次迭代中选择与现有训练数据点距离最大的新数据点。虽然DiverseEvol能够提高模型性能,但其时间和内存消耗非常大,每次迭代需要1-2天,总计5-7天才能完成数据选择,这在实际应用中是不可行的。
ZIP方法通过通过计算样本的压缩比率来选择数据,选择压缩比率最低的数据点进行训练。ZIP方法不需要GPU资源,但计算过程是贪婪的,逐步添加数据点到最终训练子集中。在大规模数据集上,ZIP的选择效果并不理想,尤其是在OpenHermes数据集上,表现不如随机选择。
2、关于多样性
基于多样性的选择策略优于基于质量的选择策略。通过结合K-means聚类过程,基于质量的方法在大多数情况下表现更好。
例如,在Llama3和Qwen2模型上,使用K-means聚类后的交叉熵方法分别提高了5%和3%的平均得分。
但是,例如,这个工作也存在着一些不足。例如,研究中使用的两个大规模数据集(Openhermes2.5和WildChat-1M)虽然规模较大,但仍然可能无法完全代表实际应用中的所有场景和数据类型。数据集的多样性和质量可能会影响研究结果的普适性。
此外,许多现有的数据选择方法依赖于小规模数据集,因此在处理大规模数据集时表现不佳。这表明这些方法在实际应用中可能需要进一步改进和优化。研究中提到的基于token长度的数据过滤方法虽然在某些情况下表现良好,但并不适用于所有语言模型,特别是那些对长文本训练不敏感的模型。
二、从粗糙到精细的检索粒度的渐进式检索FunnelRAG
现有的检索范式存在两个主要问题,一是平铺检索对单个检索器造成巨大负担;二是恒定粒度限制了检索性能的上限。
这的确是个问题,如下图所示:
**《FunnelRAG: A Coarse-to-Fine Progressive Retrieval Paradigm for RAG》(https://arxiv.org/pdf/2410.10293)**,采用从粗糙到精细的检索粒度,通过协作粗粒度到细粒度、大量到少量、低容量到高容量的检索流程,其实就是先聚类,召回最近的类,从类里拿文档做排序,做完排序后,再排序段落。变成,文档聚类簇->文档->段落三阶段。从大到小思路。
但问题来了,容易出现召回偏置。多样性差了。
我们可以看几个点:
1、FUNNELRAG框架中的渐进式检索的流程
渐进式检索旨在通过逐步减少候选规模、提高检索器容量来平衡检索的有效性和效率。
具体设计包括三个阶段:
1)检索阶段:使用稀疏检索器(如BM25)从大规模文档集中检索粗粒度的文档。例如,从21M的文档集中检索出约4K的粗粒度文档。
2)预排序阶段:使用交叉编码器模型对检索到的文档进行预排序,进一步缩小候选范围。这一阶段将粗粒度文档分割成文档级单元(约1K),并对其进行预排序。
3)后排序阶段:使用复杂的列表级模型对细粒度的文档进行后排序,最终得到高质量的检索结果。这一阶段将文档级单元分割成段落级单元(约100),并输入到低容量、中容量和高容量的检索器中进行处理。
2、FUNNELRAG框架中粗到细粒度分割实现及影响
粗粒度分割:在检索阶段,使用BM25从21M的文档集中检索出约4K的粗粒度文档。这些文档通常是多个相关文档的聚类结果。
其中,这个聚类算法,像singlepass:
细粒度分割:在预排序和后排序阶段,将粗粒度文档分割成更细粒度的单元。具体步骤包括:
预排序阶段:将粗粒度文档分割成文档级单元(约1K)。
后排序阶段:将文档级单元分割成段落级单元(约100),并输入到低容量、中容量和高容量的检索器中进行处理。
这种粗到细粒度的分割方式对检索性能有显著影响:
提高检索精度:细粒度检索能够更准确地定位到包含答案的文档,从而提高答案召回率。
减少计算负担:粗粒度检索减少了初始候选规模,降低了计算复杂度和时间成本。
负载均衡:通过逐步细分粒度,可以将复杂的任务分配给不同容量的检索器,实现负载均衡。
3、一个具体的例子
一个具体的例子如下:
但是,这个工作也存在一些问题,为了实现有效的检索,需要手工调整一些超参数,如最大聚类大小和每个阶段的候选项数量。这增加了系统的复杂性,并且可能需要专业知识来优化这些参数。
此外,尽管通过渐进式检索减少了候选项的数量,但在某些情况下,特别是当排名位置较低时,计算成本仍然较高。论文假设通过局部到全局的蒸馏方法可以有效传递检索信号,但这一假设的有效性尚未经过充分验证,可能需要在更多数据集上进行测试。
随着模型的复杂性增加,尽管候选项数量有限,但计算成本仍然可能成为一个问题。特别是在后排名阶段,需要处理大量的段落级单元。
总结
本文主要讲了两个工作,关于大模型数据工程,在大规模数据集上进行监督微调(SFT)时数据选择的方法,发现随机选择几乎总是优于现有的数据选择技术。
一个是关于RAG进展, FunnelRAG:从粗糙到精细的渐进检索范式,实际上,这个其实有偏置,如果涉及到动态更新,聚类的数量,性能这些都会带来其他影响。
为了实现有效的检索,需要手工调整一些超参数,如最大聚类大小和每个阶段的候选项数量。这增加了系统的复杂性,并且可能需要专业知识来优化这些参数。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。