資料集中常存在錯別字、標點差異、空白字元差異等微小變化導致的准重複記錄。dedup-fuzzy 節點通過 SimHash 指紋比較文本的字面相似性,將相似性超過閾值的記錄歸為一簇,每簇僅保留文本最長的一條。
適用情境
dedup-fuzzy 節點對指定欄位進行近似匹配去重,能識別以下類型的准重複資料:
錯別字、標點變化、空白字元差異等微小文字差異。
模板化產生的相似文本(如提示詞微調產生的近似輸出)。
爬蟲或採集管道中因格式差異導致的准重複資料。
節點配置
以下為 dedup-fuzzy 節點的基本配置結構:
{
"id": "node_1",
"type": "dedup-fuzzy",
"parameters": {
"field": "<欄位名>",
"threshold": "<閾值>",
"output": "<輸出資料行列表>",
"global": true,
"workspace": "<工作空間>",
"dataset": "<資料集>"
}
}參數說明
參數 | 類型 | 必填 | 預設值 | 說明 |
| String | 是 | - | 去重依據的欄位名,須為文本類型。 |
| String | 否 |
| 相似性閾值(非負整數字串),數值越小越嚴格。詳見閾值選擇建議。 |
| String | 否 |
| 節點輸出資料行,多列時使用逗號分隔。 |
| Boolean | 否 |
| 是否開啟全域去重。開啟後將與 Dataset 歷史資料做近似比對。 |
| String | 條件必填 | - | Dataset 所在工作空間。當 |
| String | 條件必填 | - | Dataset 名稱。當 |
閾值選擇建議
閾值 | 嚴格程度 | 說明 |
| 精確匹配 | 等同於 dedup-exact。 |
| 非常嚴格 | 僅過濾個別字元差異。 |
| 推薦預設 | 適合大多數文本去重情境。 |
| 較寬鬆 | 可能誤刪有意義差異的文本,慎用。 |
輸入和輸出
輸入要求
上遊節點輸出的任意列資料。
要求包含
field指定的欄位,且為文本類型。
輸出資料行
列名 | 類型 | 來源 | 說明 |
| - | 透傳/新增 |
|
| bigint | 新增 | 文本指紋值。 |
| integer | 新增 | 文本長度。 |
| 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 的行不參與去重且不出現在輸出中。
邊界與異常行為
情境 | 行為 |
| 校正失敗。 |
| 校正失敗。 |
| 所有記錄歸為同一簇,僅保留一條。 |
| 校正失敗。 |
| 該行不參與去重,不出現在輸出中。 |
輸入資料為空白 | 正常返回空結果集。 |