跳到主要内容

18 篇博文 含有标签「data-quality」

查看所有标签

你在调试时无意中构建的微调数据集

· 阅读需 10 分钟
Tian Pan
Software Engineer

预发布环境界面(staging UI)里的点踩(thumbs-down)按钮原本只有一个作用:告诉值班工程师哪个回复看起来很糟,以便他们去排查。六个月后,模型团队的某个人把“所有带有修正建议的生产反馈”拉取到一个 Parquet 文件中,并针对它运行了一个微调(SFT)任务。评估集在三个指标上有所提升,却在五个指标上悄悄退步。没人能解释原因,直到有人翻看标签并发现修正列中有一行写着:“这没问题,但我讨厌它的措辞方式。”模型习得了这种观点。然后,它又习得了另外四万个观点。

这种失效模式源于调试界面和标注界面是同一个界面。工程师点击“点踩”可能是因为某个环节坏了,或者看起来很奇怪,或者他们正准备提交一个工单,或者排版让他们不爽,甚至只是为了测试按钮是否好用。从那次点击中流出的信号混合了“这个输出是错误的”、“这个输出是对的但很难看”、“我不喜欢这个”以及“我当时很无聊”。作为单一标签,它什么也证明不了。以此进行训练,它教会模型的是所有这些情绪的并集。

你的 Agent 学会了致敬的那个错别字

· 阅读需 11 分钟
Tian Pan
Software Engineer

某家保险公司用一整年的客服对话记录微调了一个支持模型。上线不到一周,合规审查员就发现了怪事:这个机器人一直把 "deductible"(免赔额)写成 "deductable"。不是偶尔出错——而是每八条出现该词的消息里,大约都会有一条这样写。模型并没有自己发明这个拼写错误。它继承了这个错误。一小撮一线客服两年来一直这么打字,而语料库忠实地反映了他们打的内容,不是字典里的内容。

这就是在运营数据上做监督式微调最令人不安的地方:模型并不是在学习你的领域,它是在学习你的语料库。这两者有重叠,但并不等同,而那道缝隙正是每一个本可预防的行为缺陷藏身的地方。训练数据里的频率并不是正确性的信号,它只是一个信号——告诉你你的团队恰好做某件事做得够多,多到模型愿意模仿。

错别字是最容易识别的情形。难的是那些没人愿意写成规则的部分,因为大家都默认模型会学到工作的"专业"版本,而不是工作被实际执行的样子。

你的合成训练数据正在向均值坍缩

· 阅读需 9 分钟
Tian Pan
Software Engineer

你需要更多的训练数据,于是你生成了它们。模型编写了几千个例子来填补数据集中的空白——边缘案例、代表性不足的意图,以及你真实日志从未涵盖的长尾数据。你抽检了一个样本。每个例子看起来都不错:语法正确、符合主题、标签准确。你将这一批数据加入到微调集中,然后继续工作。

三轮迭代之后,你的模型在那些你特意生成数据来覆盖的案例上表现反而变差了。并不是灾难性的变差——只是悄无声息地、均匀地变得平庸。以前偶尔能奏效的稀有意图现在完全失效了。用户实际输入的措辞被误读。而你的质量检查中没有任何一项发现异常,因为你生成的每一个独立案例确实都很正常。

失败不在于任何单个案例,而在于分布。合成数据在没有现实锚点的情况下被生成和反复生成,会向均值收缩——而长尾部分,即你求助于合成数据的根本原因,是首先消失的部分。

结构化输出并非经过验证的输出

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的团队启用模式约束解码(schema-constrained decoding)的那一天感觉像是一个里程碑。解析错误停止了。JSONDecodeError 警报消失了。从文本中抓取字段的脆弱正则表达式也被删除了。有人在站会上说“模型现在返回有效的 JSON 了”,结构化输出的任务单随之关闭。

那句话正是麻烦的开始。“模型现在返回有效的 JSON 了”是正确性工作的开始,而不是结束。JSON 模式和约束解码保证了响应的形状(shape)——即 quantity 是一个整数,status 是三个枚举值之一,对象包含你要求的键。它们完全无法保证 quantity 是否是正确的数字,status 是否反映了真实发生的情况,或者 sku 字段是否指向了目录中存在的商品。

AI 知识库中的溯源债务:当 RAG 系统开始检索自身的输出

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的 RAG 系统很可能正在把自己的输出编入索引。只是你还不知道而已。

一切往往从一件看似无害的事开始:有人把一份季度总结文档添加到了知识库。而这份总结,正是由查询该知识库的同一个 LLM 生成的。六个月后,开发者又加入了 AI 生成的版本说明,随后是自动生成的支持 FAQ,再然后是合成的入职指南。这些文档没有任何一份被标注为 AI 生成。对于检索系统而言,它们与人工撰写的一手资料看起来别无二致。于是,当你的模型检索上下文来回答问题时,其中相当一部分上下文是之前某次模型运行所输出的压缩版、甚至可能已经失真的结果——而你的准确率指标依然绿灯常亮。

这就是溯源债务:在检索语料库中,AI 生成的内容在没有来源标记的情况下不断累积,形成一个反馈循环——每一代模型的输出,都成为下一代模型的原始素材。

训练数据自中毒:当你的 AI 功能破坏了其自身的基准真相

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的推荐模型在三个月前上线了。点击率增长了 18%。观看时长在不断攀升。仪表盘上一片飘绿。领导层很满意。

而你的模型正在悄悄地破坏它将用于训练下一个版本的数据。

这就是训练数据自中毒(training data self-poisoning):一种反馈循环,其中已部署的 AI 功能会改变用户行为,其方式破坏了模型最初训练时学习的交互数据。最糟糕的是,你的标准参与度指标会告诉你一切正常 —— 直到它们失效的那一刻。

反馈溯源鸿沟:为什么你的训练信号可能并非你所采集的原始数据

· 阅读需 10 分钟
Tian Pan
Software Engineer

大多数团队在反馈采集端的检测体系都非常完善。点击“踩”的操作会被记录,星级评分会流入仪表板,人工标注任务会将每一组偏好对写入表格。数据摄入过程干净、带有时间戳且可查询。

在采集到反馈与下一次模型更新之间所发生的一切,对大多数团队来说都是一个黑盒。

数据被过滤。某些标注的权重被调高。稀有类别被上采样。近重复项被删除。提示词模板的更改导致上个月的标签与本月的不一致,但合并依然在进行。当信号到达奖励模型或微调任务时,它已经通过了 6 个转换步骤,没有审计追踪,没有版本锚定,也无法将退化的模型权重溯源到流水线中特定的损坏点。

这就是反馈溯源鸿沟(Feedback Provenance Gap):团队知道反馈从何处进入系统,但不知道它在塑造模型行为之前变成了什么。

评估集毒丸:当你的基准测试成为后门

· 阅读需 13 分钟
Tian Pan
Software Engineer

我认识的一个团队花了六个月的时间去追踪一个并不存在的回归 (regression)。每一次发布都通过了评估 (eval)。每一次发布都上线了。但每个季度,AI 服务群组的 NPS 都会下降一个点。最终,一名实习生在对黄金数据集 (gold dataset) 进行例行审计时发现,一名早已离职的合同标注员标注了 11% 的数据项,而这些项在团队一直试图修复的一个特定故障模式上,系统性地表现得更加宽松。评估结果显示模型正在变好。但模型并没有变好。评估结果被一个人的校准漂移悄悄地倾斜了,而没有人监督标注员,因为没有人认为标注员是一个威胁面。

这就是评估集毒丸 (eval-set poison pill)。大多数团队将他们的评估集视为一个值得信赖的产物:标签是由人类评分的,数据来自生产环境,而回归仪表盘是组织在发布时一致同意参考的唯一指标。但标注流水线是一个人类供应链,而人类供应链是可以被操纵的。如果不对评估集的输入应用供应链卫生管理,就将其视为真值 (ground truth),那么你就是在信任一个你无法辩护其来源 (provenance) 的数字。

你的黄金标签是从你的模型中学到的:通过生产环境泄漏导致的评估集污染

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的评估套件通过了。质量仪表板显示为绿色。一周后,用户正在悄悄流失,没人能解释原因。评估集并没有通过犯错来撒谎——它的谎言在于它是一面镜子。你用来评分的标签,可以追溯到正是由你试图评估的那个模型家族生成或过滤的。通过这项评估并不是质量的证明。它证明了你的模型与其过去的输出是一致的。

这是成熟 LLM 流水线中一种隐蔽的失败模式:通过生产泄漏导致的评估集污染。这不同于著名的基准测试污染(即在 GSM8K 上训练的模型又在 GSM8K 上进行评分)——那个故事已经被讲烂了。更微妙的一种发生在下游。你的黄金标签来自用户反馈、来自先看到模型草稿的人类标注员、来自 RLHF 奖励追踪、来自 LLM-as-judge(模型即评委)的偏好数据。这些流水线中的每一个都将当前模型习语的指纹带回到了你的“基准真值”中。几个季度下来,测试集悄悄地记住了你模型的偏好,评估变成了一个自我表扬的循环。

数据飞轮陷阱:为什么你的反馈循环可能在原地空转

· 阅读需 12 分钟
Tian Pan
Software Engineer

每位产品负责人都听过这个论调:更多用户产生更多数据,更好的数据训练更好的模型,更好的模型吸引更多用户。数据飞轮是复利护城河,这正是AI巨头们能够赢得市场的原因。

这个论调并没有错。但实施几乎总是出了问题。在实践中,大多数数据飞轮都有多个泄漏点——反馈循环看似在运转,实际上却在放大偏差、强化陈旧模式,或者优化一个与真实目标背道而驰的代理指标。构建这些系统的工程师很少知道自己遇到的是哪种泄漏,因为所有泄漏从外部看起来都一样:参与度上升,模型在可测量的指标上持续改进,而系统却在难以归因的方式下变得越来越没用。

这就是数据飞轮陷阱。理解其失败模式,是构建真正有效飞轮的前提。

Prompt 工程无法突破的数据质量天花板

· 阅读需 12 分钟
Tian Pan
Software Engineer

一家电信公司花了数月时间调优其客服聊天机器人的 Prompt。他们反复迭代系统指令、Few-shot 示例和思维链格式,但幻觉率始终顽固地维持在 50% 以上。后来他们审计了知识库,发现其中充斥着已下线的服务套餐、过时的账单信息,以及相互矛盾的重复政策文件。修复数据之后——而不是修改 Prompt——幻觉率骤降至接近零。Prompt 工程无法解决的问题,三周的数据清理就做到了。

这就是数据质量天花板:当 LLM 系统的输入数据存在噪声、过时或前后矛盾时,会出现一道性能硬墙,任何 Prompt 迭代都无法突破。这是生产环境 AI 最常见的失效模式之一,也是最被系统性低估的一种。撞上这堵墙的团队,往往还在不停拨弄 Prompt 旋钮,而问题的根源其实在上游。

上游数据质量是你 AI Agent 的真实瓶颈

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个团队花了三个月时间为他们的知识智能体(knowledge agent)调优提示词。他们尝试了 GPT-4,接着是 Claude,然后是一个微调模型。他们重写了六次系统提示词,还聘请了一名提示词工程师。智能体却一直在产生幻觉——语气自信、表达流利,但内容是错的。真正的问题最后被发现是向量库中存放了一份 2023 年的 Confluence 导出文件,以及一份充满矛盾、随意的 Slack 归档讨论,两者都在讨论同一话题。模型只是在履行它的职责:综合处理给定的信息。而这些信息本身就是垃圾。

超过 60% 的生产环境 AI 项目失败可以追溯到数据质量、上下文问题或治理失败,而非模型限制。然而,当智能体表现异常时,人们的第一反应几乎总是修改提示词。第二反应是切换模型。第三可能是增加一个重排序器(reranker)。而喂给整个流水线的上游数据库,在浪费了数月工作时间之前,很少会出现在排错清单上。