概念
数据集与划分
Skynet 如何读取你的用例,并将其划分为训练集、验证集和测试集。
数据集是一张用例表。每一行是一个用例。Skynet 在这些用例上运行你的产物,为每个输出打分,并用分数比较各个版本。本页说明 Skynet 如何读取用例、列角色的作用,以及它如何把用例划分为训练集、验证集和测试集。
加载数据
在向导的 输入 步骤中,你有两个选项:
- 上传 CSV、JSON 或 Excel 文件。Skynet 接受
.csv、.json、.xlsx和.xls文件。 - 从库中选择。使用你之前保存的数据集。
一次运行最多可以有 200,000 个用例。
关于管理已保存的数据集,请阅读数据集。
列角色
在 如何读取数据 下,为每一列指定一个角色:
| 角色 | Skynet 如何处理该列 |
|---|---|
| 输入 | 把值放入 input,由你的运行代码接收 |
| 输出 | 把值放入 expected,由你的指标接收 |
| 跳过 | 不使用该列 |
每一列还有一个类型:文本 或 图像。
只有一列可以是输出列。如果你把第二列设为输出,第一列会变为跳过。
你的代码会收到什么
对于每一行,Skynet 构建一个用例:
input是一个 dict,每个输入列对应一个键。expected是一个只有一个键的 dict:键为输出列的名称。
对于下面这张表:
| message | label | id |
|---|---|---|
| I was charged twice | billing | 17 |
当角色为 message = 输入、label = 输出、id = 跳过时,你的代码会收到:
{"message": "I was charged twice"}{"label": "billing"}数据模式
角色决定了运行的数据模式:
| 模式 | 条件 | 结果 |
|---|---|---|
| 成对 | 有一列是输出 | 每一行都是一个带输入和期望值的用例。你至少需要 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 在验证集上报告。如果也没有验证集,则在训练集上报告。
更改划分
划分区域显示 推荐划分。它有两种模式:
- 使用推荐:Skynet 使用上面的默认划分。
- 手动选择:你自己设置 训练、验证 和 测试。
在手动选择中,每个字段接受 0 到 1 之间的比例,步长为 0.05。每个字段会显示它分得的用例数。三个比例之和必须为 1。否则,向导会显示“划分比例之和必须为 1。”
契约样例
指标和运行 步骤中的契约检查会在 3 个样例用例上运行你的代码。Skynet 只从训练用例和验证用例中选取这些样例,从不从测试用例中选取。