dedup-fuzzy(近似去重)

更新时间:
复制为 MD 格式

数据集中常存在错别字、标点差异、空白字符差异等微小变化导致的准重复记录。dedup-fuzzy 节点通过 SimHash 指纹比较文本的字面相似度,将相似度超过阈值的记录归为一簇,每簇仅保留文本最长的一条。

适用场景

dedup-fuzzy 节点对指定字段进行近似匹配去重,能识别以下类型的准重复数据:

  • 错别字、标点变化、空白字符差异等微小文字差异。

  • 模板化生成的相似文本(如提示词微调产生的近似输出)。

  • 爬虫或采集管道中因格式差异导致的准重复数据。

节点配置

以下为 dedup-fuzzy 节点的基本配置结构:

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

参数说明

参数

类型

必填

默认值

说明

field

String

-

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

threshold

String

"3"

相似度阈值(非负整数字符串),数值越小越严格。详见阈值选择建议

output

String

*

节点输出列,多列时使用逗号分隔。*(默认)保留全部列含扩展列;指定时仅输出列出的列。

global

Boolean

false

是否开启全局去重。开启后将与 Dataset 历史数据做近似比对。

workspace

String

条件必填

-

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

dataset

String

条件必填

-

Dataset 名称。当 globaltrue 时必填。

阈值选择建议

阈值

严格程度

说明

"0"

精确匹配

等同于 dedup-exact

"1"~"2"

非常严格

仅过滤个别字符差异。

"3"

推荐默认

适合大多数文本去重场景。

"5"~"7"

较宽松

可能误删有意义差异的文本,慎用。

输入和输出

输入要求

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

  • 要求包含 field 指定的字段,且为文本类型。

输出列

列名

类型

来源

说明

output 控制列

-

透传/新增

* 保留全部列(含扩展列);指定时仅输出列出的列。

__dedup_hash

bigint

新增

文本指纹值。

__dedup_weight

integer

新增

文本长度。

__dedup_rnk

integer

新增

簇内排名(去重后恒为 1)。

行数变化

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

效果预览

处理前(5 条):

question

input

output

什么是机器学习?

请解释

机器学习是...

什么是机器学习呢?

请详细说

机器学习(Machine Learning)是...

如何学习Python?

入门

推荐从官方教程...

怎么学习Python?

指南

建议先学基础语法...

什么是深度学习?

简述

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

处理后(3 条)-- field = "question"threshold = "3"

question

input

output

__dedup_hash

__dedup_weight

__dedup_rnk

什么是机器学习呢?

请详细说

机器学习(Machine Learning)是...

8832749102

10

1

如何学习Python?

入门

推荐从官方教程...

5561023847

8

1

什么是深度学习?

简述

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

3347891256

7

1

说明

"什么是机器学习?"与"什么是机器学习呢?"文本高度相似(指纹距离 <= 3),归为一簇保留最长者;"如何/怎么学习Python?"同理。5 条数据最终输出 3 条。

使用示例

批内近似去重(默认阈值)

使用默认阈值 "3"question 字段做近似去重。

{
  "id": "n3",
  "type": "dedup-fuzzy",
  "parameters": {
    "field": "question"
  }
}

调整阈值过滤更多近似文本

放宽阈值到 5,过滤更多近似文本。

{
  "id": "n3",
  "type": "dedup-fuzzy",
  "parameters": {
    "field": "question",
    "threshold": "5"
  }
}

全局近似去重

跨批次全局去重,与 Dataset 历史数据做近似比对。

{
  "id": "n3",
  "type": "dedup-fuzzy",
  "parameters": {
    "field": "question",
    "threshold": "3",
    "global": true,
    "workspace": "my-ws",
    "dataset": "my-ds"
  }
}

管道组合(精确去重 + 近似去重)

建议将 dedup-exact 放在 dedup-fuzzy 之前,先精确去重消除完全重复,再做近似去重消除微小差异,减少 SimHash 计算量。

{
  "nodes": [
    { "id": "n1", "type": "project", "parameters": { "question": "a", "input": "b" } },
    { "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" } }
  ]
}

使用建议与边界行为

说明

使用建议:

  • 建议在 dedup-exact 之后使用,先消除完全重复,再做近似去重,减少 SimHash 计算量。

  • 推荐管道顺序:dedup-exact -> dedup-fuzzy -> dedup-semantic

  • 全局去重适用于跨批次增量入库场景。

  • 字段值为 NULL 的行不参与去重且不出现在输出中。

边界与异常行为

场景

行为

field 缺失

校验失败。

threshold 为负数或非数字

校验失败。

threshold 过大(>= 64)

所有记录归为同一簇,仅保留一条。

globaltrue 但缺少 workspacedataset

校验失败。

field 字段值为 NULL

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

输入数据为空

正常返回空结果集。