多样性采样

更新时间:
复制为 MD 格式

多样性采样模板通过三级去重(精确、近似、语义)和语义聚类分组采样,从海量 Agent 交互日志中提取具有代表性的数据子集,用于构建评测数据集或训练样本。

业务场景

构建 AI Agent 评测数据集或训练样本时,直接随机采样容易被热门问题主导,导致样本分布偏斜。多样性采样模板通过三级去重和语义聚类采样解决这一问题:

  • 消除冗余:三级去重(精确、近似、语义)逐级过滤重复数据,计算代价递增但前置步骤已大幅削减数据量。

  • 保证多样性:语义聚类将数据按含义分组,每组采样确保覆盖不同语义类别。

  • 控制规模:通过聚类簇数和每簇采样量精确控制输出规模。

适用人群:

  • 算法工程师:构建训练数据集、选取微调样本。

  • 评测工程师:构建评测 Benchmark、执行版本对比评测。

  • 产品经理:了解用户问题的语义分布。

功能特性

特性

说明

三级去重

精确、近似、语义三级递进过滤,计算代价递增但数据量递减,整体效率最优。

语义聚类

保证输出样本的语义多样性,避免热门问题主导采样结果。

分层采样

支持按分组维度进行定量或按比例采样,确保样本覆盖各语义类别。

低成本语义处理

使用低成本向量语义生成,无需 LLM 调用,适合大规模语义计算。

Pipeline 流程

多样性采样 Pipeline 包含以下算子,按顺序依次执行:

顺序

算子

阶段

说明

1

project(字段选取)

字段选取

从原始日志中提取所需字段,如用户输入、模型输出、模型名称等。

2

extend(字段扩展)

字段扩展

通过正则表达式从输入字段中提取用户提问原文。

3

dedup-exact(精确去重)

精确去重

移除完全重复的记录,计算成本最低。

4

dedup-fuzzy(近似去重)

近似去重

移除字面相似的记录,阈值越小越严格。

5

dedup-semantic(语义去重)

语义去重

移除语义重复的记录,同时生成 __dedup_emb 向量列供下游复用。

6

semantic-cluster(语义聚类)

语义聚类

复用 __dedup_emb 向量列,将数据聚为指定数量的簇。

7

sample(随机采样)

分组采样

__cluster_id 分组,每簇采样指定数量的记录。

完整配置

多样性采样模板支持 API(JSON)配置方式。更多信息,请参见数据处理(Pipeline)

API 配置(JSON)

以下为完整的 Pipeline JSON 配置示例,需要将 source 中的日志库信息替换为实际值。

{
  "name": "diversity_sampling",
  "description": "多样性采样:三级去重 + 语义聚类 + 分组采样,构建代表性评测数据集",
  "source": {
    "type": "logstore",
    "logstore": {
      "project": "your-project",
      "logstore": "your-agent-logstore",
      "query": "serviceName:your-agent-service and *"
    }
  },
  "pipeline": {
    "nodes": [
      {
        "id": "select_fields",
        "type": "project",
        "parameters": {
          "input": "attributes.input.value",
          "output": "attributes.output.value",
          "model": "attributes.gen_ai.model_name",
          "trace_id": "traceId",
          "span_id": "spanId"
        }
      },
      {
        "id": "extract",
        "type": "extend",
        "parameters": {
          "question": "regexp_extract(input, '(?s)用户提问原文:\\s*(.*?)\\s*,\\s*\"files\"', 1)"
        }
      },
      {
        "id": "exact_dedup",
        "type": "dedup-exact",
        "parameters": { "field": "question" }
      },
      {
        "id": "fuzzy_dedup",
        "type": "dedup-fuzzy",
        "parameters": { "field": "question", "threshold": "3" }
      },
      {
        "id": "semantic_dedup",
        "type": "dedup-semantic",
        "parameters": { "field": "question", "threshold": "0.1" }
      },
      {
        "id": "cluster",
        "type": "semantic-cluster",
        "parameters": { "field": "__dedup_emb", "n": 100 }
      },
      {
        "id": "sample_per_cluster",
        "type": "sample",
        "parameters": { "n": 1, "by": "__cluster_id" }
      }
    ]
  },
  "sink": {
    "type": "dataset",
    "dataset": {
      "workspace": "your-workspace",
      "dataset": "agent_diverse_sample"
    }
  },
  "executePolicy": {
    "mode": "run_once",
    "run_once": {
      "fromTime": 1735689600,
      "toTime": 1735776000
    }
  }
}

参数说明

需要替换的参数:

参数

说明

source.logstore.project

日志服务 Project 名称。

source.logstore.logstore

存储 Agent 交互日志的 Logstore 名称。

source.logstore.query

数据过滤查询条件,用于筛选目标 Agent 服务的日志。

sink.dataset.workspace

输出数据集所在的工作空间名称。

sink.dataset.dataset

输出数据集名称,采样结果将写入该数据集。

executePolicy.run_once.fromTime

数据处理的起始时间戳(Unix 秒)。

executePolicy.run_once.toTime

数据处理的结束时间戳(Unix 秒)。

以下为各算子的关键参数。完整参数列表请参见对应算子文档。

算子

参数

说明

本模板取值

dedup-exact

field

去重依据字段。

question

dedup-fuzzy

field

去重依据字段。

question

threshold

编辑距离阈值,值越小越严格。

3

dedup-semantic

field

去重依据字段。

question

threshold

语义相似度阈值。0.05 极严格(仅移除几乎相同的内容),0.3 较宽松(移除相关但不同的内容)。

0.1

semantic-cluster

field

向量列名。复用 dedup-semantic 生成的 __dedup_emb 列,避免重复 Embedding 计算。

__dedup_emb

n

聚类簇数,决定最终输出的最大数据量上限。

100

sample

n

每组采样数量。

1

by

分组字段。按 semantic-cluster 生成的 __cluster_id 分组采样。

__cluster_id

运行结果

以 1000 条原始 Agent 交互日志为例,经过多样性采样 Pipeline 处理后的数据量变化如下:

处理前(1000 条原始日志):

语义类别

原始数量

典型问题

错误日志查询

350

帮我查错误日志、查一下报错、看看有没有error…

性能分析

280

统计延迟、分析慢查询、看下RT分布…

流量统计

200

统计PV、看下访问量、统计UV…

配置查询

100

查看配置、看下参数、获取设置…

安全审计

70

谁在访问、查看登录记录、异常IP…

处理后(100 条多样性采样):

步骤

数据量

说明

原始数据

1000 条

精确去重后

650 条

移除完全重复

近似去重后

400 条

移除字面相似

语义去重后

250 条

移除语义重复

聚类 100 簇

250 条

每条标注 __cluster_id

每簇采样 1 条

100 条

各语义类别均匀覆盖

说明

1000 条原始数据经处理后输出 100 条,保留率 10%,但语义覆盖率接近 100%。最终输出量由 semantic-cluster 的簇数 nsample 的每簇采样量 n 共同决定。

定制建议

可根据实际业务场景调整以下参数:

定制点

说明

语义去重阈值

dedup-semanticthreshold 参数:0.05 极严格(仅移除几乎相同的内容),0.3 较宽松(可能将相关但不同的问题误判为重复)。

聚类簇数

semantic-clustern 参数:按需调整(如 50 簇或 200 簇),簇数越多输出量越大。

每簇采样量

samplen 参数:设为 3 可获取更多样本。

按比例采样

samplen 参数替换为 ratio,例如 "ratio": 0.5 表示每簇取 50%。

跨批次全局去重

dedup-fuzzydedup-semantic 添加 globalworkspacedataset 参数,实现跨批次去重。

追加 AI 处理

sample 后追加 llm-call 算子,对采样结果进行评估或标注。

注意事项

说明

使用多样性采样模板时,注意以下事项:

  • 如果数据量小于聚类簇数 n,部分簇可能为空,实际输出量将小于 n

  • dedup-semanticthreshold 值过大可能将相关但不同的问题误判为重复,建议从较小值开始逐步调整。

  • semantic-cluster 必须在 dedup-semantic 之后执行,否则 __dedup_emb 向量列不存在。如果需要独立聚类(不依赖去重),在 dedup-fuzzy 后添加 embedding 算子生成向量列,再使用 semantic-cluster