Back to blog
    你到底需要多少训练示例?100样本的迷思
    fine-tuningtraining-dataloraqloradataseton-device-aisegment:mobile-builder

    你到底需要多少训练示例?100样本的迷思

    AI模型微调的真实数据需求。研究表明50-500个示例对许多任务已经足够。以下是论文的结论以及如何构建你的数据集。

    EErtas Team·

    "我很想微调一个模型,但我没有足够的数据。"

    这是开发者从未开始的最常见原因。而对于大多数用例来说,这是错的。

    微调需要数百万标注示例的假设来自机器学习的早期时代,那时大语言模型还不存在。预训练的LLM已经懂得语言、语法、推理模式和大量领域知识。你不是从零开始教模型理解文本,而是将它引导向特定的风格、词汇或任务模式。这是一项小得多的工作,所需的数据也远低于人们的预期。

    以下是研究的实际结论。

    研究怎么说

    关于数据高效微调的最重要论文都指向同一个方向:质量胜过数量,"足够"的门槛比直觉所想的更低。

    OpenAI自己的建议:从50-100个示例开始

    OpenAI的微调文档建议在微调GPT-3.5和GPT-4o时从50到100个示例开始。不是作为勉强过关的最低限度,而是作为能产生可衡量改进的真正起点。文档明确指出,更多示例可以有所帮助,但最初几十个示例通常带来最大的收益。

    如果一家按推理token收费的公司建议从50个示例开始,这对于数据门槛实际在哪里是一个有意义的信号。

    斯坦福Alpaca:52K合成示例,500美元

    斯坦福Alpaca项目(arXiv:2303.16199)在2023年初证明,一个微调的7B参数模型可以在许多任务上匹配GPT-3.5的表现。总数据集为52,000个使用GPT-3.5合成生成的指令遵循示例,成本大约500美元。关键发现不是52K这个数字本身,而是概念验证:由强大模型合成生成的数据可以训练一个较小的模型在指令遵循上达到接近同等的表现。

    这个基准此后已经被大幅超越。

    QLoRA:9,000个示例,达到ChatGPT的97.8%

    QLoRA论文(arXiv:2305.14314, NeurIPS 2023)引入了4-bit量化LoRA微调,使大模型微调在消费级硬件上变得可行。作为演示,作者使用OASST1数据集中的仅9,000个示例训练了一个叫Guanaco的模型,OASST1是一个真实人类助手对话的集合。

    结果:Guanaco在Vicuna基准上达到了ChatGPT表现的97.8%,由人类评估者评定。在单个消费级GPU上。用9,000个训练示例。

    这不是精心挑选的边缘案例。OASST1数据集涵盖了广泛的对话任务,而9K个示例以任何标准衡量都是适度的。QLoRA架构是其成功的关键:基于适配器的微调保留了基础模型的通用知识,同时从有限的示例中学习新行为。

    LIMA:1,000个示例用于对话AI

    Meta AI的LIMA论文(arXiv:2305.11206)可能是该领域最引人注目的结果。研究人员在精确的1,000个精心挑选的训练示例上微调了一个650亿参数模型。没有RLHF,没有奖励建模,没有偏好数据。仅仅是1,000个精选对话。

    结果产生了一个模型,人类评估者在19%的比较中更偏好它的回复而非GPT-4,在许多其他比较中认为两者等同。该论文的核心论点现在被称为"浅层对齐假设":模型所需的几乎所有知识已经存在于预训练权重中。微调主要教会模型期望输出的格式和风格。

    LIMA结果中的关键词是"精心"。研究人员花费了大量精力来策划那1,000个示例,以确保多样性、覆盖范围和质量。1,000个随机示例不会产生相同的结果。

    微软Phi-3:教科书质量胜过数量

    Phi-3系列模型(arXiv:2404.14219, Microsoft Research)进一步推进了这一发现。Phi-3模型中有些小到38亿参数,其表现与大三到五倍的模型相竞争。训练策略刻意优先考虑研究人员所说的"教科书质量"数据:清晰的、结构良好的、教育密度高的内容,而非原始数量。

    对微调实践者的启示:你数据中的信号比数据集的大小更重要。一个清晰展示目标行为的示例,比十个模糊的示例更有价值。

    按任务类型的数据需求

    并非所有微调任务都是相同的。学习以一致的JSON结构重新格式化输出的模型,所需示例远少于学习多步骤金融分析推理的模型。以下是基于社区发现、论文基准和OpenAI发布的指南的实际细分:

    任务类型最少最佳范围
    格式和风格适配50-100200-500
    分类100-500500-2K
    领域问答200-1K1K-5K
    复杂推理1K-5K5K-20K

    关于这个表格的几点说明:

    格式和风格适配涵盖以下情况:"始终以这种JSON结构回复"、"使用这种特定词汇"、"匹配这种语气"。基础模型已经知道如何产生结构化输出。你是在教它一种偏好,而非一种技能。50个精选示例就能可靠地实现这一点。

    分类因类别数量及其相似度而差异显著。100个示例的二元情感分析是可行的。50个类别的产品分类需要更多数据,特别是对于稀有类别。

    领域问答受益于多样性而非数量。来自十个不同子主题的100个示例通常优于全部来自同一狭窄子主题的100个示例。

    复杂推理是数据需求真正增加的地方。教模型进行多步法律分析或临床决策推理涉及真正的新推理模式,而不仅仅是风格适配。在这里要规划更多数据。

    质量胜过数量:什么是好的训练示例

    LIMA的发现和Phi-3的方法有一个共同的线索:研究人员是有选择性的。他们没有把数据倾倒进训练中,而是精心策划。

    高质量的训练示例有四个属性:

    清晰展示目标行为。 对于什么是正确的回复应该没有歧义。如果你在训练一个客服机器人,示例回复应该是你希望用户收到的确切质量的回答,而不是草稿。

    代表真实的输入分布。 示例应该反映你用户实际发送的输入类型。在精心构造但不匹配真实用户行为的示例上训练,会产生在训练集上表现良好但在真实流量上表现差的模型。

    覆盖边缘情况。 这是大多数数据收集出错的地方。团队收集了200个简单、常见情况的示例,却没有任何占生产流量20%的异常输入的示例。你的数据应该有意地包含棘手的案例。

    与其他示例保持一致。 矛盾的训练示例,即模型看到相似输入但期望不同输出,会混淆微调并降低性能。训练前,检查你的数据内部一致性。

    从你已有的数据构建数据集

    开始的障碍通常不是数据不存在,而是数据没有被格式化。以下是应用开发中最常见的数据来源以及如何将它们转化为训练示例。

    应用日志和对话历史

    如果你的应用已经有一个由基础模型API支持的AI功能,你就有训练数据。你的生产对话直接记录了用户问什么以及好的回复是什么样的。

    工作流程:

    1. 导出过去30-90天的对话。
    2. 筛选高质量的交互。如果你有点赞/点踩反馈就用它。如果没有,抽样并手动审查。
    3. 移除任何个人身份信息。应用你的隐私政策所要求的脱敏处理。
    4. 转换为你的训练格式(通常是带messages数组的JSONL)。

    即使来自生产流量的200-300条高质量对话,也会比1,000条不匹配真实使用模式的手工制作示例产生更好的微调模型。

    客服工单和帮助台数据

    客服工单对于客服自动化用例来说是极有价值的训练数据。它们包含:

    • 真实的用户语言,包括拼写错误和不寻常的表达方式
    • 正确解决方案的记录
    • 随用户基数扩展的数据量

    转换过程:提取初始工单加上关闭工单的最终客服回复。排除需要人工判断且不应自动化的解决方案的工单。清理客服回复以移除内部备注或案例编号。现在你有了直接代表你任务的指令遵循配对。

    用户反馈和纠正

    如果你的应用有任何让用户标记错误输出或请求纠正的机制,这些反馈是训练的金矿。一个说"这个回复是错的,正确答案是X"的用户给了你一个标注的示例,准确地标出了你的模型在哪里失败以及正确的行为是什么。

    即使少量的纠正数据也是高信号的。50个带正确标签的模型失败示例会可衡量地改善微调模型。

    内部文档和知识库

    对于领域问答用例,你的产品文档、内部知识库和FAQ内容可以转化为训练示例。过程如下:

    1. 取一段文档内容。
    2. 生成关于该内容的合理用户问题(手动或使用另一个LLM)。
    3. 编写基于文档的模型质量的回答。
    4. 审查准确性和一致性。

    这个过程较慢,但能产生经过验证的正确答案的可靠示例。

    合成数据:斯坦福Alpaca方法

    如果你没有足够的现有数据,可以生成它。斯坦福Alpaca方法证明了这在规模上是有效的,而且自2023年以来经济性已大幅改善。

    基本方法:

    1. 编写20-30个展示目标任务的种子示例。这些应该是你能产生的最佳示例。
    2. 用你的种子示例提示一个强大的模型(GPT-4o、Claude Opus等),让它生成多样化的变体。
    3. 审查生成示例的质量。预计会丢弃10-20%。
    4. 将审核通过的合成示例用作训练数据。

    使用当前前沿模型定价,生成500-1,000个合成示例的成本通常为50-200美元,取决于输出长度和质量审查轮次。对于大多数任务,这低于几个小时手动数据收集的成本。

    一个重要的注意事项:从闭源模型(如GPT-4o或Claude)生成的合成数据不能用于训练竞争性通用模型,这在大多数提供商的服务条款下是受限的。对于你自己应用的窄范围任务特定微调,这一限制通常不适用,但在进行之前请审查适用条款。

    迭代方法:从小处开始

    微调数据收集中最大的错误是等到拥有"足够"的数据才开始。正确的方法是从你拥有的开始,训练,评估,学习。

    以下是推荐的进阶路径:

    从100个示例开始。 在你的基础模型上训练一个LoRA适配器。在20-30个保留测试示例上评估。记录模型失败的地方。

    识别失败模式。 模型是格式不对吗?是在某些主题领域失败吗?是拒绝了它应该回答的输入吗?每种失败模式都精确地告诉你需要收集什么类型的额外训练数据。

    添加针对性示例。 收集50-100个专门针对你识别出的失败模式的示例。重新训练。

    重复。 在大多数情况下,三到四次迭代就能让你获得生产质量的模型。在大多数情况下,最终数据集不到1,000个示例。

    这种迭代方法有效是因为它将数据收集工作针对模型行为中的实际差距,而不是在输入空间中均匀收集数据。你不是在构建一个覆盖所有可能输入的数据集,而是在构建一个覆盖用户实际发送的输入并修复模型当前出错案例的数据集。

    结论

    你几乎肯定有足够的数据开始。你可能在电子表格中有200条客服工单解决记录,你有产品知识库,你有几周的生产对话日志。你可以用不到100美元生成500个合成示例。

    研究结论是明确的:50个示例可以改善风格一致性。100个示例可以有意义地改变模型的行为。1,000个精心策划的示例可以产生一个在特定任务上与前沿模型匹敌的对话模型。

    那些因为等待更大数据集而从未开始的开发者,正在等待一个对他们的用例可能根本不必要的门槛。那些从100个示例开始、诚实评估并迭代的开发者,才是最终发布产品的人。

    你的数据集比你想的更小。你的模型比你想的更近。从你拥有的开始。

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.

    Keep reading