跳到内容
Skynet文档
页面

概念

数据集与划分

Skynet 如何读取你的用例,并将其划分为训练集、验证集和测试集。

数据集是一张用例表。每一行是一个用例。Skynet 在这些用例上运行你的产物,为每个输出打分,并用分数比较各个版本。本页说明 Skynet 如何读取用例、列角色的作用,以及它如何把用例划分为训练集、验证集和测试集。

加载数据

在向导的 输入 步骤中,你有两个选项:

  • 上传 CSV、JSON 或 Excel 文件。Skynet 接受 .csv、.json、.xlsx 和 .xls 文件。
  • 从库中选择。使用你之前保存的数据集。

一次运行最多可以有 200,000 个用例。

关于管理已保存的数据集,请阅读数据集。

列角色

在 如何读取数据 下,为每一列指定一个角色:

角色Skynet 如何处理该列
输入把值放入 input,由你的运行代码接收
输出把值放入 expected,由你的指标接收
跳过不使用该列

每一列还有一个类型:文本 或 图像。

只有一列可以是输出列。如果你把第二列设为输出,第一列会变为跳过。

你的代码会收到什么

对于每一行,Skynet 构建一个用例:

  • input 是一个 dict,每个输入列对应一个键。
  • expected 是一个只有一个键的 dict:键为输出列的名称。

对于下面这张表:

messagelabelid
I was charged twicebilling17

当角色为 message = 输入、label = 输出、id = 跳过时,你的代码会收到:

{"message": "I was charged twice"}

数据模式

角色决定了运行的数据模式:

模式条件结果
成对有一列是输出每一行都是一个带输入和期望值的用例。你至少需要 2 行。
单个没有任何列是输出运行只使用第一行的输入列。它是一个没有期望值的用例。

在单个模式下,Skynet 把这一个用例同时用于训练、选择和报告。没有任何数据被留出。

划分

在成对模式下,Skynet 把用例划分为三个集合:

集合用途
训练引擎在这些用例上提出并测试版本。
验证(Val)Skynet 在这些用例上选出最佳版本。
测试Skynet 在这些用例上报告最终分数。

默认划分

成对数据数量训练验证测试
5 个或更多70%15%15%
少于 5 个85%15%0%

成对数据少于 5 个时,Skynet 不保留测试集。

Skynet 如何计算用例数

Skynet 用最大余数法把比例换算为整数个用例。各集合的数量之和总是等于用例总数。比例大于零的集合至少分得一个用例。比例为零的集合不分得用例。

划分之前,Skynet 会打乱用例顺序。打乱使用运行的随机种子。如果你没有提供种子,Skynet 会根据用例、目标和产物生成一个。因此,如果你再次提交相同的运行,会得到相同的划分。

回退规则

  • 成对数据少于 5 个时,Skynet 会移除测试集,并按比例缩放训练集和验证集,使两者之和为 1。
  • 如果训练集为空,Skynet 把验证用例当作训练用例。
  • 如果没有验证集,Skynet 在训练用例上进行选择。
  • 如果没有测试集,Skynet 在验证集上报告。如果也没有验证集,则在训练集上报告。

更改划分

划分区域显示 推荐划分。它有两种模式:

  1. 使用推荐:Skynet 使用上面的默认划分。
  2. 手动选择:你自己设置 训练、验证 和 测试。

在手动选择中,每个字段接受 0 到 1 之间的比例,步长为 0.05。每个字段会显示它分得的用例数。三个比例之和必须为 1。否则,向导会显示“划分比例之和必须为 1。”

契约样例

指标和运行 步骤中的契约检查会在 3 个样例用例上运行你的代码。Skynet 只从训练用例和验证用例中选取这些样例,从不从测试用例中选取。

相关页面