全部文章

阅读约 6 分钟

如何用 Label 309 锚定 AI 数据集清单

对数据集清单计算哈希,用 Merkle 根做批处理,再借助 Label 309 锚定到 Cardano 上——这样日后无需公开数据集,也能证明某次数据集快照包含了哪些内容。

要在日后证明某次数据集快照包含了什么,就锚定它的清单:对清单文件计算哈希,把这个哈希作为一条 Label 309 记录发布到 Cardano 上,而数据集本身保持私密。从此以后,任何拿到交易引用的人都能确认:该清单在某个公开区块时间或更早,就以那个确切形态存在过——无需信任你的服务器,也看不到你的数据。

数据集清单是某次数据集快照的稳定清册:它记录了在某一时间点纳入了哪些文件、记录、URL、许可、哈希、来源与处理步骤。Label 309 让你对这份清单计算哈希或做 Merkle 锚定,把承诺固定在公开记录里,而数据仍留在原处。

这一点对 AI 公司、研究团队、法务与合规团队,以及任何日后可能需要解释模型的训练或评估数据从何而来的人——尤其是在数据湖早已物是人非之后——都至关重要。

什么是 AI 数据集清单?

AI 数据集清单是一份结构化的清册。

它不必包含完整的训练数据,可以只包含数据的稳定引用与哈希。其目标是让一次数据集快照足够可审计、可复现,使日后的审阅者能够理解当时纳入了哪些内容。

一份清单可以描述:

  • 文件
  • 文档
  • 图像
  • 音频片段
  • 视频
  • 网页
  • 许可
  • 来源系统
  • 采集日期
  • 转换
  • 过滤规则
  • 去重步骤
  • 哈希算法
  • 模型训练的数据集划分归属
  • 内部数据集版本号

没有清单,数据集往往只是一个文件夹、存储桶、数据表或归档包。这在实验阶段或许够用,但日后作为证据就很薄弱。

AI 团队为什么要给清单打时间戳?

因为数据集的历史会变得难以还原。

AI 团队会持续地增删、清洗、过滤、去重、标注、脱敏并重新划分数据。三月用来训练某个模型的数据集快照,到了七月可能已经不再是同一形态。

团队日后可能需要回答:

  • 这个模型是用哪些数据训练的?
  • 用的是哪个评估集?
  • 这份客户数据当时是否存在于数据集中?
  • 我们是什么时候移除受限内容的?
  • 某项政策变更之前纳入了哪些来源?
  • 在某次纠纷发生之前,我们是否已经持有这份数据?
  • 这个模型是否用到了受某项特定许可覆盖的数据?

一份打了时间戳的清单,能为答案提供一个固定的基准点。

Label 309 如何契合其中?

Label 309 把清单承诺到公开时间上。简化版的流程是:

  1. 生成一份确定性的清单;
  2. 对清单文件计算哈希;
  3. 把这个哈希作为一条 Label 309 记录发布到 Cardano 上;
  4. 让清单与源数据保持私密;
  5. 日后通过重新计算清单哈希并与记录比对来验证。

对于大型数据集,应当锚定一个 Merkle 根,而非一个扁平的哈希。一条 Label 309 记录可以承载一份 Merkle 承诺——一组绑定到单一根的有序 32 字节叶子,外加一个叶子数量——这样链上的一个根就能代表一份任意大的链下叶子列表:

  1. 把每个清单条目计算哈希得到一个叶子;
  2. 对叶子做确定性排序;
  3. 构建 Merkle 树;
  4. 把根发布到记录中;
  5. 保留叶子列表与包含证明。

公开记录证明某份数据集承诺曾经存在,私密清单则解释承诺的内容是什么。这与让一条记录代表数千个文件的批处理模式如出一辙。

清单里应该放什么?

清单应当平实、确定且有用。

适合纳入的字段包括:

  • 数据集 id
  • 快照 id
  • 创建时间
  • 创建者或流水线 id
  • 来源系统
  • 来源 URI 或中性的来源引用
  • 文件或记录 id
  • 字节长度
  • 内容哈希
  • 哈希算法
  • 媒体类型
  • 许可或权利状态
  • 同意或政策状态(如适用)
  • 采集日期
  • 转换流水线版本
  • 去重分组
  • 训练 / 验证 / 测试划分
  • 已移除条目的排除原因
  • Merkle 叶子索引

不要把敏感个人数据放进公开清单。如果清单本身敏感,就让它保持私密,或将其封存。

是什么让清单具有确定性?

确定性意味着相同的输入产生相同的清单。

这需要清晰的规则:

  • 规范化路径
  • 选定一种稳定的字符编码
  • 定义排序顺序
  • 定义时间戳格式
  • 尽可能避免使用本机的本地路径
  • 准确记录哈希算法
  • 冻结转换版本
  • 包含 schema 版本
  • 避免那些每次导出都会变化的字段

如果清单因为导出工具在每次运行时都添加一个新的随机 id 或时间戳而发生变化,那它就更难验证。

清单应当为充当证据而设计,而不只是为了方便。

私密数据集如何保持私密?

发布的是承诺,而非数据集。

一条 Label 309 记录包含一个哈希或一个 Merkle 根。两者单凭自身都不会泄露数据——哈希是单向摘要,而根只承诺一种叶子结构,并不暴露叶子本身。公司在内部保留清单、文件与访问控制。

日后,你可以针对那个固定的承诺有选择地披露:

  • 单个文件及其 Merkle 包含证明
  • 清单中的某一行
  • 某个子集或来源类别
  • 某次训练快照
  • 在 NDA 之下披露整份清单
  • 一个面向法律顾问、审计方或监管方的封存材料包

这让团队既能证明此前已作出承诺,又不必把私密数据集变成公开的——其思路与无需公开文件的保密披露相同。封存记录会把载荷加密给特定接收方的密钥,但要清楚它的局限:它只保证明文仅对持有密钥的人可读,并不保证匿名性,而且接收方随时都可能把自己解密出的内容泄露出去。

这对 AI 治理有什么帮助?

治理需要能经受审计的记录。

AI 治理团队越来越需要展示数据集是如何获取、过滤、记录、批准与变更的。清单并不等于整个治理体系,但它能给治理体系提供一些具体可验证的东西。

例如:

  • 模型卡可以引用数据集快照 id;
  • 内部审批工单可以引用清单哈希;
  • 数据保留流程可以证明受限数据是何时被移除的;
  • 红队评估可以锚定其评估集;
  • 合规审查可以把所声称的数据集与已承诺的清单作比对;
  • 客户合同可以引用可审计的数据集快照。

这一证明层让数据集记录更难被悄悄改写。

这与 AI 信息披露规则有何关系?

各项规则正朝着更完善的文档化方向演进。欧盟《AI 法案》(EU AI Act)包含针对通用 AI 的义务;2025 年,欧盟委员会发布了一份说明性通知与模板,用于为这类模型公开训练内容摘要。其他法域与平台也在不断更新各自对透明度与来源溯源的期待。

Label 309 并不替你决定必须披露什么,单凭锚定一份清单也无法满足任何特定法规——那取决于你所处的法域和你承担的义务。它能做的,是为你日后需要披露、概述、抗辩或审计的任何内容,在背后保留一份可识别篡改的证据。

这一区别很重要:证明可以支撑一项透明度主张,但它不是法律裁定,也不能取代法律顾问。

清单应该多久锚定一次?

按决策的节奏来锚定。

常见的做法包括:

  • 每次训练运行
  • 每次评估运行
  • 每次数据集发布
  • 每次政策过滤规则更新
  • 每次面向特定客户的数据集构建
  • 每个每日或每周的摄入批次
  • 每次大规模去重
  • 每次红队数据集快照

高吞吐量的团队应当使用 Merkle 批处理。重要的单次发布,可能还值得配上已签名记录与封存归档。

这不能证明什么?

时间戳证明的是时间与完整性——而非真实性、所有权或权利。对边界要坦诚:

  • 它不能证明数据是合法采集的。
  • 它不能证明版权所有权或授权许可。
  • 它不能证明已获得同意。
  • 它不能证明某个模型确实是在这份数据集上训练的——除非你的流水线与日志把那次模型运行与该清单关联起来。
  • 如果你的团队遗漏了条目,它也不能证明这份清单是完整的。

它确实能证明的东西既狭窄又持久:所承诺的清单或 Merkle 根,在某个公开区块时间之前就以那个确切形态存在过,事后任何人都无法回溯标注日期或悄悄修改它。这很有力,但前提是它真正接入了你的流程。要全面了解这一边界,请参阅证明不能证明什么

简短版

AI 数据集需要稳定的清册。

数据集清单把一个不断变动的数据湖,变成一份你日后可以验证的快照。Label 309 用一个哈希或一个 Merkle 根锚定那份快照,还可以选择用一个 Ed25519 记录签名为其签名,并能向指定接收方封存一份私密材料包。公开的链从不需要数据集——只需要那份承诺。

保留清单。保存叶子列表。记录流水线。这样,当数据集受到质疑时,你拿出的是证据,而不是记忆。

Label 309 是一项开放、厂商中立的标准,目前已提交至 Cardano 的 CIP 流程,正作为一项 Metadata 类别的提案接受 CIP 编辑的审阅。其参考实现——网关、各个 SDK,以及 cardanowall CLI(它的 merkle-buildmerkle-verify 命令负责处理上文提到的叶子列表与包含证明)——以开源形式托管在 github.com/cardanowall

延伸阅读

aidatasetsmerkle