dedup-semantic(语义去重)

更新时间:
复制为 MD 格式

精确去重和近似去重无法识别"表述不同但含义相同"的文本(例如"今天天气怎么样"与"今日气候如何")。dedup-semantic 节点通过 Embedding 模型将文本映射为向量,比较向量距离判定语义相似度,去除语义重复的记录。

工作原理与适用场景

dedup-semantic 对指定字段计算 Embedding 向量,将向量距离在阈值以内的记录归为语义重复簇,每簇保留一条代表性记录。

适用场景

  • 表述不同但语义相同的文本去重。

  • 多语言场景下的跨语言语义去重。

  • 高质量 AI 训练数据集的精细化去重。

  • 通常作为 精确去重近似去重 之后的最后一道去重工序。

节点配置

{
  "id": "node_1",
  "type": "dedup-semantic",
  "parameters": {
    "field": "<字段名>",
    "threshold": "<距离阈值>",
    "model": "<模型名>",
    "output": "<输出列列表>",
    "global": true,
    "workspace": "<工作空间>",
    "dataset": "<数据集>",
    "column_name": "<Dataset列名>"
  }
}

参数说明

参数

类型

必填

默认值

说明

field

String

去重依据的字段名,须为文本类型。

threshold

String

"0.1"

向量距离阈值,取值范围 0~1,数值越小越严格。

model

String

"sls-multilang-600m-i32k-o1024"

Embedding 模型名称。

output

String

*

节点输出列,多个列名以逗号分隔。*(默认)表示保留全部列(含扩展列)。指定列名时仅输出列出的列。

global

Boolean

false

是否开启全局去重。设置为 true 时,节点与 Dataset 中的历史数据进行跨批次去重。

workspace

String

条件必填

Dataset 所在工作空间。当 globaltrue 时必填。

dataset

String

条件必填

Dataset 名称。当 globaltrue 时必填。

column_name

String

field 相同

Dataset 中语义去重的列名。仅在全局去重模式下生效,用于指定 Dataset 中与 field 对应的列。

阈值选择建议

阈值

严格程度

说明

"0.05"

非常严格

仅过滤几乎同义的表述。

"0.1"

推荐默认

适合大多数语义去重场景。

"0.15" ~ "0.2"

较宽松

可能误删相关但不同义的文本。

"0.3" 及以上

过于宽松

不推荐,容易造成大量有效数据被误删。

输入和输出

输入要求

  • 接收上游节点输出的任意列数据。

  • 要求数据中包含 field 参数指定的字段,且该字段为文本类型。

输出列

列名

类型

来源

说明

output 指定列

原始类型

透传

* 表示保留全部原始输入列。

__dedup_emb

array(double)

新增

文本 Embedding 向量。可被下游 semantic-cluster 节点直接复用,避免重复计算。

__dedup_rid

bigint

新增

批内行标识,供内部使用。

行数变化

M -> N(M >= N)。语义相似的记录归为一簇,每簇保留一条,输出行数小于或等于输入行数。

效果预览

以下示例展示 field = "question"threshold = "0.1" 时的去重效果。

处理前(5 条)

question

input

output

什么是机器学习?

请解释

机器学习是...

机器学习的定义是什么?

概述

ML是一种通过数据训练...

如何入门Python编程?

指南

推荐从官方教程开始...

Python零基础怎么学?

入门

建议先学基础语法...

什么是深度学习?

简述

深度学习是机器学习的子集...

处理后(3 条)

question

input

output

__dedup_emb

__dedup_rid

什么是机器学习?

请解释

机器学习是...

[0.12, -0.34, ...]

1

如何入门Python编程?

指南

推荐从官方教程开始...

[0.56, 0.78, ...]

3

什么是深度学习?

简述

深度学习是机器学习的子集...

[-0.11, 0.45, ...]

5

"什么是机器学习?"与"机器学习的定义是什么?"语义等价(向量距离小于 0.1),归为一簇保留一条;"如何入门Python编程?"与"Python零基础怎么学?"同理。5 条数据去重后保留 3 条。__dedup_emb 列可供下游 semantic-cluster 节点直接复用。

使用示例

示例一:批内语义去重

对当前批次内的 question 字段进行语义去重,使用默认阈值 "0.1"

{
  "id": "n4",
  "type": "dedup-semantic",
  "parameters": {
    "field": "question",
    "threshold": "0.1"
  }
}

示例二:全局语义去重

开启全局去重,与 Dataset 中的历史向量进行跨批次语义比对。

{
  "id": "n4",
  "type": "dedup-semantic",
  "parameters": {
    "field": "question",
    "threshold": "0.1",
    "global": true,
    "workspace": "my-ws",
    "dataset": "my-ds"
  }
}

示例三:三级去重完整管道

按照 精确去重 -> 近似去重 -> 语义去重的顺序逐级去重。前置精确和近似去重可大幅减少语义去重的输入数据量,降低 Embedding 计算成本。

{
  "nodes": [
    {
      "id": "n1",
      "type": "project",
      "parameters": {
        "question": "a",
        "input": "b",
        "output": "c"
      }
    },
    {
      "id": "n2",
      "type": "dedup-exact",
      "parameters": {
        "field": "question"
      }
    },
    {
      "id": "n3",
      "type": "dedup-fuzzy",
      "parameters": {
        "field": "question",
        "threshold": "3",
        "global": true,
        "workspace": "my-ws",
        "dataset": "my-ds"
      }
    },
    {
      "id": "n4",
      "type": "dedup-semantic",
      "parameters": {
        "field": "question",
        "threshold": "0.1",
        "global": true,
        "workspace": "my-ws",
        "dataset": "my-ds"
      }
    }
  ]
}

示例四:自定义 Embedding 模型

指定 text-embedding-v3 模型,设置更严格的阈值 "0.05",通过 column_name 显式指定 Dataset 中的列名。

{
  "id": "n4",
  "type": "dedup-semantic",
  "parameters": {
    "field": "question",
    "threshold": "0.05",
    "model": "text-embedding-v3",
    "global": true,
    "workspace": "my-ws",
    "dataset": "my-ds",
    "column_name": "question"
  }
}

使用建议与边界行为

使用建议

重要

语义去重需要 GPU 推理计算 Embedding,计算成本较高。建议在 dedup-exactdedup-fuzzy 之后使用,前置去重可大幅减少输入数据量。推荐管道顺序:dedup-exact -> dedup-fuzzy -> dedup-semantic

  • 默认阈值 "0.1" 适合大多数场景,数值越小越严格。

  • __dedup_emb 扩展列可供下游 semantic-cluster 节点直接复用,避免重复计算 Embedding。

  • 全局去重适用于增量入库场景,需确保 Dataset 已开启向量索引。

  • 无需在 dedup-semantic 前单独调用 embedding 节点,该算子内部已包含 Embedding 生成逻辑。

边界与异常

场景

行为

field 缺失

校验失败,Pipeline 不会启动。

threshold 超出 [0, 1] 范围

校验失败,Pipeline 不会启动。

globaltrue 但缺少 workspacedataset

校验失败,Pipeline 不会启动。

Embedding 模型不可用

运行时报错。

field 字段值为 NULL

该行不参与去重,不出现在输出中。

输入数据为空

正常返回空结果集。