What is 合成数据?

    使用前沿模型、基于规则的系统或数据增强技术人工生成的训练数据,用于补充或替代真实数据来微调机器学习模型。

    Definition

    合成数据是人工生成的训练数据,而非从真实世界观察中收集。在 LLM 微调的背景下,合成数据最常指的是由较大的前沿模型(如 GPT-4o 或 Claude)生成的输入输出对,然后用于训练较小的任务专用模型。这种方法——有时称为数据蒸馏或 API 蒸馏——已成为创建微调数据集的主流方法,因为它以人工标注成本的一小部分产生高质量、任务相关的示例。

    合成数据有多种形式:模型生成数据(提示前沿模型产生示例)、基于规则的数据(使用模板和编程转换创建结构化示例)以及增强数据(通过改写、噪声注入或格式变体修改真实示例以扩展小型种子数据集)。强大的指令跟随模型的崛起使得模型生成合成数据成为最实用的方法——单个工程师可以在数小时内生成数千个高质量训练示例,而非人工标注所需的数周或数月。结合质量过滤和去重,合成数据管道已成为任何进行生产微调的团队的核心能力。

    Why It Matters

    微调的最大瓶颈几乎从来不是算力——而是数据。大多数组织拥有少量他们期望行为的示例,但远远不够有效 LoRA 训练所需的数千个高质量示例。合成数据生成直接解决了这个稀缺问题:给定 50 个种子示例和一个精心设计的生成提示,你可以在一个下午扩展到 5000 个多样化的训练示例。

    除了数量,合成数据还支持蒸馏工作流,将前沿模型的智能压缩到更小的可部署模型中。不必在生产中为每次 GPT-4o API 调用支付 0.01 美元,你只需一次性生成训练数据(一次性成本),微调一个 7B 参数模型,然后以几乎零边际成本在本地服务。合成数据还提供了真实用户数据的隐私安全替代方案——你可以生成捕获敏感数据统计模式的示例,而不暴露实际客户记录、医疗信息或金融交易。对于受监管行业来说,合成数据与真实数据之间的区别可能决定一个微调项目在法律上是否可行。

    How It Works

    典型的合成数据管道有四个阶段:生成、过滤、去重和格式化。在生成阶段,你定义一个系统提示来描述期望的输出格式和质量标准,然后向前沿模型输入多样化的输入提示。常见的生成技术包括直接提示(要求模型产生完整示例)、种子扩展(提供一些真实示例并要求模型生成相似但不同的示例)以及思维链提取(让模型逐步解决问题,然后将推理过程和最终答案都用作训练数据)。

    生成后,质量过滤会移除幻觉的、不一致的或低质量的输出——可以使用单独的验证提示、基于规则的检查(JSON 有效性、长度约束、必填字段存在性)或对随机样本进行人工抽检。去重会移除近似重复的示例,这些示例会导致微调模型在重复模式上过拟合。最后,经过筛选的示例被格式化为目标训练格式(通常是对话式消息的 JSONL)并分为训练集和验证集。整个管道是迭代的:生成一批,评估微调模型,识别薄弱环节,然后生成针对性示例来填补这些空白。

    python
    import json
    import random
    from openai import OpenAI
    
    client = OpenAI()
    training_data = []
    seed_examples = load_seed_examples("seeds.jsonl")  # 50-200 real examples
    
    SYSTEM_PROMPT = """Generate a realistic customer support message and an ideal
    agent response. The message should be about one of these topics:
    billing, technical issues, account access, feature requests.
    Respond in JSON: {"user": "...", "assistant": "..."}"""
    
    for i in range(5000):
        # Inject a random seed example for style guidance
        seed = random.choice(seed_examples)
        user_prompt = f"Example style reference:\n{seed}\n\nNow generate a new, unique example."
    
        response = client.chat.completions.create(
            model="gpt-4o",
            messages=[
                {"role": "system", "content": SYSTEM_PROMPT},
                {"role": "user", "content": user_prompt}
            ],
            temperature=0.9,  # High temp for diversity
            response_format={"type": "json_object"}
        )
    
        try:
            pair = json.loads(response.choices[0].message.content)
            training_data.append({
                "messages": [
                    {"role": "user", "content": pair["user"]},
                    {"role": "assistant", "content": pair["assistant"]}
                ]
            })
        except (json.JSONDecodeError, KeyError):
            continue  # Skip malformed outputs
    
    # Save for fine-tuning in Ertas Vault
    with open("synthetic_support_data.jsonl", "w") as f:
        for item in training_data:
            f.write(json.dumps(item) + "\n")
    
    print(f"Generated {len(training_data)} training examples")
    使用 GPT-4o 通过种子引导提示生成合成客户支持训练数据,以实现多样性,可直接导入 Ertas Vault。

    Example Use Case

    一位金融科技初创公司的机器学习工程师需要微调一个模型,用于跨 30 个商户类别的交易分类。他们只有 200 条人工标注的真实交易。使用 GPT-4o,他们以 200 个真实示例作为种子,指示模型生成覆盖边缘案例——国际交易、订阅服务、模糊商户和部分描述——的多样化变体,共生成 5000 条合成交易描述和类别标签。过滤掉 300 条低质量示例并去重后,他们获得了 4200 对干净的训练数据。基于 Qwen 2.5 7B 微调的 LoRA 适配器实现了 94% 的分类准确率——仅比 GPT-4o 自身的准确率低 2%,但推理成本仅为其百分之一。合成数据生成总成本:约 15 美元的 API 调用费。

    Key Takeaways

    • 合成数据通过使用前沿模型从小型种子集生成数千个训练示例来解决数据稀缺问题。
    • 模型生成的合成数据支持蒸馏工作流——将前沿模型质量压缩到更小的本地可部署模型中。
    • 质量过滤和去重是生成后的必要步骤;未经过滤的合成数据会降低微调性能。
    • 合成数据为真实用户数据提供隐私安全的替代方案,这对医疗和金融等受监管行业至关重要。
    • 迭代生成——微调、评估、针对薄弱环节生成针对性示例——比一次性批量生成效果更好。

    How Ertas Helps

    Ertas Vault 旨在处理完整的合成数据生命周期。团队可以导入生成的 JSONL 数据集,运行内置验证检查以捕获格式错误和格式不正确的示例,去除近似重复的条目以避免过拟合,并在迭代生成轮次中对数据集进行版本管理。Vault 的数据浏览器允许你检查单个示例、标记质量级别并过滤子集用于针对性微调实验——将混乱的合成数据管道现实转化为结构化、可重复的工作流。

    Related Resources

    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.