生成合成数据很少能做到一劳永逸。就像软件开发受益于敏捷方法和持续改进一样,你的合成数据生成流程如果被视为动态过程,持续进行优化,就能产生更好的效果。迭代优化意味着创建反馈循环:你生成数据,评估其质量和作用,找出可以改进的地方,调整生成策略,然后重复这个循环。这种做法能让你逐步提升合成数据集在LLM预训练和微调中的效用。迭代优化循环根本上,迭代优化是从每一批生成的数据中学习,并利用这些经验让下一批数据更好。可以把它看作一个持续循环:digraph G { rankdir=TD; node [shape=box, style="rounded,filled", fillcolor="#e9ecef", fontname="Helvetica", margin="0.15,0.1"]; edge [fontname="Helvetica", fontsize=10]; Generate [label="1. 生成数据批次\n(当前策略)", fillcolor="#a5d8ff"]; Evaluate [label="2. 评估数据\n(自动化指标, 人工审查,\n下游模型表现)", fillcolor="#ffec99"]; Analyze [label="3. 分析反馈\n找出缺点与优点", fillcolor="#b2f2bb"]; Adjust [label="4. 调整生成策略\n(提示, 模型, 过滤器, 种子)", fillcolor="#ffd8a8"]; Generate -> Evaluate [label="合成数据集"]; Evaluate -> Analyze [label="质量报告, 性能数据"]; Analyze -> Adjust [label="可操作的见解"]; Adjust -> Generate [label="改进策略", style=dashed, color="#4263eb", fontcolor="#4263eb"]; }合成数据生成的典型迭代优化循环。每一步都为下一步提供信息,从而逐步获得更高质量的数据。我们来了解这个循环的组成部分。优化的信息来源要优化数据生成,你需要关于哪些有效、哪些无效的明确信号。这些信号来自几个方面:自动化质量指标:正如“合成数据集的自动化质量保证”(以及第6章中进一步讨论的)所述,困惑度、多样性分数、与参考数据的语义相似度或验证集上的任务特定准确度等指标提供定量反馈。多样性的突然下降可能表明你的提示变得过于狭窄,或者不合语法句子的增加可能指向生成模型的问题。下游模型表现:衡量你的合成数据优劣的最终检验是,LLM在经过预训练或微调后,如何更好地完成其预期任务。如果一个基于你的合成指令数据进行微调的LLM未能遵循某些类型的指令,这是一个强烈的信号,表明需要重新审视这些指令-响应对的生成方式。跟踪目标LLM在相关基准测试或特定任务上的重要性能指标(KPI)。人工评估:自动化指标无法发现所有问题。人工审查员对于评估事实正确性、语气、风格一致性、创造力以及细微偏见的存在非常重要。一个系统化的人工审查流程,即使只针对部分数据,也能为优化提供重要的定性见解。例如,审查员可能会指出生成的对话感觉不自然,或者摘要遗漏了重点。错误分析:当下游LLM犯错时,回溯这些错误。它们是否可以归因于合成训练数据中的不足?也许数据缺少覆盖某些边缘情况的例子,或者它无意中强化了不良行为。调整生成策略的着力点分析完反馈后,下一步是对数据生成管道进行有针对性的调整。以下是你通常可以修改的方面:提示工程(针对基于LLM的生成器):这通常是最有影响力的着力点。清晰度和具体性:让你的提示更精确。如果生成的输出过于通用,增加更多限制或上下文。少量示例:修改或扩展提示中提供的示例。确保它们准确反映期望的输出风格和质量。负面约束:指示生成器 不要 做什么。例如,“不要使用行话”或“避免过于随意/口语化的语言。”角色扮演:如果LLM扮演特定角色或人设是你的生成策略一部分,请进行调整。生成器模型选择或调优:如果你正在使用LLM生成数据,考虑切换到不同的模型(例如,更大的模型,为特定领域微调过的模型,或具有更好指令遵循能力的模型)。调整temperature或top_p等超参数,以控制随机性和创造性与连贯性之间的平衡。较低的temperature通常会带来更集中、多样性较少的输出,而较高的temperature则会增加随机性。种子数据管理:对于意译、回译或示例驱动生成等技术,初始种子数据的质量非常重要。改进你的种子示例的质量、多样性或相关性。过滤掉可能传播问题的低质量种子。过滤和后处理逻辑:你开发的(例如本章实践操作中的)数据过滤脚本是迭代优化的主要对象。根据评估结果收紧或放宽过滤阈值。如果过滤掉了太多好的数据,就放宽标准。如果质量不佳,就使其更严格。添加新的过滤规则,以捕获评估过程中识别出的问题(例如,新的幻觉模式,不良内容)。改进去重策略以提升新颖性。数据增强参数:如果使用噪声注入或同义词替换等技术,调整控制增强强度或类型的参数。过多的增强会降低质量,而过少则可能无法提供足够的多样性。组合策略:重新评估你如何混合来自不同合成来源的数据,或合成数据如何与真实数据混合。比例和混合方法可能需要调整。管理迭代过程采用系统化的迭代方法将取得最佳效果:版本控制:将你的数据生成脚本、提示、模型配置和过滤规则视为代码。使用Git等版本控制系统来跟踪变更。这能让你在优化不成功时恢复到以前的版本,并有助于了解你的流程是如何演变的。实验跟踪:记录每次生成迭代的参数和结果。MLflow、Weights & Biases或甚至简单的电子表格等工具可以帮助你比较不同方法,并找出哪些改变带来了改进。例如,你可能跟踪:提示版本生成器模型及其设置生成批次的质量指标下游模型表现(如果适用于该迭代)A/B测试生成策略:在考虑对生成过程进行重大改变时(例如,全新的提示技术或不同的生成器模型),设置A/B测试。使用旧方法和新方法生成数据集,使用相同的标准评估它们,并在完全采用新策略之前比较结果。设定迭代目标:在开始优化循环之前,定义你希望改进的目标。例如:“将生成问答对的事实准确性提高10%”或“将合成对话中的重复率降低15%。”明确的目标有助于集中精力并衡量成功。何时判断迭代“足够好”迭代不意味着无休止地调整。你经常会遇到边际效益递减的情况,即为获得进一步的小改进所付出的努力超过了所带来的效益。重要的是:监控进度:如果连续几次迭代尽管付出了巨大努力,但只带来微不足道的收益,那么可能是时候暂停在该特定方面或数据集上的主动优化了。定义质量阈值:根据你的合成数据的预期用途,设定可接受的质量水平。一旦这些阈值持续达到,你就可以认为当前的生成过程足够稳定,至少暂时如此。与其他优先级保持平衡:用于优化合成数据的资源必须与项目中的其他需求保持平衡,例如模型训练、部署或在可行的情况下收集更多数据。迭代优化将合成数据生成从一项静态任务转变为一个动态响应的体系。通过有序地评估产出并将这些信息反馈到生成过程中,你可以不断提升合成数据集的质量、相关性和实用性,最终促成更强大和可靠的大型语言模型。这种持续改进的循环是应用于数据生成的成熟机器学习运维(MLOps)的一个标志。