@ArizePhoenix: 机器学习中最古老的教训之一,对于使用 LLM 应用仍然非常有用:不要用相同的数据进行评估……

X AI KOLs Following 工具

摘要

本文讨论了使用 Arize Phoenix 开发 LLM 应用的最佳实践,特别强调了使用训练集/验证集/测试集拆分来进行诚实评估和追踪回归的重要性。

机器学习中最古老的教训之一,对于使用 LLM 应用仍然非常有用:不要用相同的数据进行评估。训练集/开发集/验证集/测试集的划分存在是有原因的。它们有助于区分“这是因为它针对其进行了调优”和“这实际上具有泛化能力”。同样的做法自然适用于代理、提示词和评估。一个好的数据集可能包括: * 一个用于快速迭代的开发集 * 一个用于提示词/模型选择的验证集 * 一个用于最终信心的测试集 * 一个用于系统反复失败案例的困难样本集 对整个数据集的一个单一聚合分数通常会隐藏最重要的事情:系统在哪里改进,在哪里退步?划分使得实验更有针对性、更诚实,并且更容易随时间进行比较。古老的机器学习纪律,非常实用的 LLM 工程模式。https://arize.com/docs/phoenix/datasets-and-experiments/how-to-experiments/splits#splits…
查看原文 导出为 Word 导出为 PDF
查看缓存全文

缓存时间: 2026/05/08 10:49

机器学习中最古老的教训之一,对于处理大语言模型应用仍然最为实用:不要在用于构建模型的数据上进行评估。训练集/开发集/验证集/测试集的划分是有原因的。它们有助于区分“这是因为针对它调优而生效”和“这实际上是泛化的”。同样的实践自然适用于智能体、提示词和评估。一个好的数据集可能包含:

  • 用于快速迭代的开发集
  • 用于提示词/模型选择的验证集
  • 用于最终信心的测试集
  • 系统一直失败的困难示例集

在整个数据集上的单一聚合分数通常会掩盖最关键的方面:系统在哪里改进,在哪里退化?划分使得实验更有针对性、更诚实,并且更容易在时间维度上进行比较。这是经典的ML原则,也是非常实用的LLM工程模式。 https://arize.com/docs/phoenix/datasets-and-experiments/how-to-experiments/splits#splits…


分割 - Phoenix

来源:https://arize.com/docs/phoenix/datasets-and-experiments/how-to-experiments/splits

文档索引

在此处获取完整文档索引:https://arizeai-433a7140.mintlify.app/llms.txt 在进一步探索之前,请使用此文件发现所有可用页面。

通常,我们希望只对整个数据集的一个子集运行实验。这些数据集的示例子集被称为“分割”。常见的分割包括:

  • 经常产生糟糕输出的困难示例,
  • 用于少样本提示的示例分割,以及用于评估的、不相交且不重叠的示例分割,
  • 用于微调大语言模型的训练集、验证集和测试集分割。

在分割上运行实验,而不是在整个数据集上运行,可以生成更能捕捉到您所关心的特定类型数据上,智能体、工作流程或提示词性能的评估指标。

配置分割

实验可以通过Python或JavaScript客户端,或者在Phoenix Playground中,对先前配置好的分割运行。

创建分割

目前,分割可以在数据集页面的UI中创建。检查数据集时,您会看到一个新的分割列以及一个分割过滤器。

在分割过滤器上,我们可以分配分割和创建分割

一个分割可以被赋予名称、描述和颜色

  • 创建分割
  • 分割已创建

分配分割

目前,分割只能从数据集的UI界面进行分配。要将数据集示例分配给分割,选择一组示例,然后使用分割过滤器我们可以选择分割,它会自动将这些选中的示例分配给所选的分割集合。

  • 分配分割
  • 分割已分配

使用分割

在本例的剩余部分,我们将使用以下数据集,该数据集有3个示例分配给测试集,7个示例分配给训练集。

  • UI

可以从Playground UI中对数据集分割运行实验。使用数据集分割时,数据集选择器UI现在会显示数据集,并具有选择全部示例或从一组分割中选择的功能。

要对“训练集”分割运行实验,我们可以通过训练集分割选择数据集,它会显示7个选中的示例,然后点击“运行”

  • 选中的分割
  • 在分割上运行实验

当使用get_dataset客户端方法从Phoenix服务器拉取数据集时,分割会被隐式配置。随后调用run_experiment只会在属于该分割的示例上运行。

# pip install "arize-phoenix-client>1.22.0"
from phoenix.client import Client
client = Client()

# 只拉取选定分割中的示例
dataset = client.datasets.get_dataset(
    dataset="my-dataset",
    splits=["test", "hard_examples"],  # 先前创建的分割名称
)

def my_task(input):
    return f"Hello {input['name']}"

experiment = client.experiments.run_experiment(
    dataset=dataset,  # 只会在选定分割上运行
    task=my_task,
    experiment_name="greeting-experiment"
)

分割可以在获取数据集时的DatasetSelector中进行配置。选定分割中包含的数据集示例将用于实验运行或评估。

// npm install @arizeai/phoenix-client@latest
import { runExperiment } from "@arizeai/phoenix-client/experiments"
import type { ExperimentTask } from "@arizeai/phoenix-client/types/experiments";
import type { DatasetSelector } from "@arizeai/phoenix-client/types/datasets";

const myTask: ExperimentTask = (example) => {
  return `Hello, ${(example.input as any).name ?? "stranger"}!`
}

// 创建一个可用于获取数据集的数据集选择器
const datasetSelector: DatasetSelector = {
  datasetName: "my-dataset",
  splits: ["test", "hard_examples"] // 先前创建的分割名称
}

runExperiment({
  // runExperiment 将执行即时获取数据集 "my-dataset"
  // 其示例会根据提供的分割进行过滤
  dataset: datasetSelector,
  task: myTask,
  experimentName: "greeting-experiment"
})

在分割上比较实验

分割作为一个属性是可变的,这意味着您可以随时向分割添加或移除示例。然而,为了保持实验比较的一致性,实验运行在执行的时刻会进行快照。实验运行与其所针对的分割之间的关联是不可变的,这确保即使后续分割分配发生变化,比较结果仍然准确。实验之间的比较始终会参考基础实验的快照。这意味着当比较实验时,系统会使用基础实验执行时所包含的精确示例集,无论随后对分割分配做了任何更改。例如,如果您对包含7个示例(具有特定示例ID)的“训练集”分割运行一个实验,那么这7个相同的示例ID将用于任何未来的实验比较。即使后来您向“训练集”添加了更多示例或移除了一些示例,比较仍然只会包含基础实验快照中的原始7个示例。当比较在分割上运行的实验时,我们现在会看到这种新的重叠状态,即实验比较不包含这些示例ID的情况:

或者存在重叠时的预期状态:

相似文章