精確去重和近似去重無法識別"表述不同但含義相同"的文本(例如"今天天氣怎麼樣"與"今日氣候如何")。dedup-semantic 節點通過 Embedding 模型將文本映射為向量,比較向量距離判定語義相似性,去除語義重複的記錄。
工作原理與適用情境
dedup-semantic 對指定欄位計算 Embedding 向量,將向量距離在閾值以內的記錄歸為語義重複簇,每簇保留一條代表性記錄。
適用情境:
節點配置
{
"id": "node_1",
"type": "dedup-semantic",
"parameters": {
"field": "<欄位名>",
"threshold": "<距離閾值>",
"model": "<模型名>",
"output": "<輸出資料行列表>",
"global": true,
"workspace": "<工作空間>",
"dataset": "<資料集>",
"column_name": "<Dataset列名>"
}
}參數說明
參數 | 類型 | 必填 | 預設值 | 說明 |
| String | 是 | 無 | 去重依據的欄位名,須為文本類型。 |
| String | 否 |
| 向量距離閾值,取值範圍 0~1,數值越小越嚴格。 |
| String | 否 |
| Embedding 模型名稱。 |
| String | 否 |
| 節點輸出資料行,多個列名以逗號分隔。 |
| Boolean | 否 |
| 是否開啟全域去重。設定為 |
| String | 條件必填 | 無 | Dataset 所在工作空間。當 |
| String | 條件必填 | 無 | Dataset 名稱。當 |
| String | 否 | 與 | Dataset 中語義去重的列名。僅在全域去重模式下生效,用於指定 Dataset 中與 |
閾值選擇建議
閾值 | 嚴格程度 | 說明 |
| 非常嚴格 | 僅過濾幾乎同義的表述。 |
| 推薦預設 | 適合大多數語義去重情境。 |
| 較寬鬆 | 可能誤刪相關但不同義的文本。 |
| 過於寬鬆 | 不推薦,容易造成大量有效資料被誤刪。 |
輸入和輸出
輸入要求
接收上遊節點輸出的任意列資料。
要求資料中包含
field參數指定的欄位,且該欄位為文本類型。
輸出資料行
列名 | 類型 | 來源 | 說明 |
| 原始類型 | 透傳 |
|
| array(double) | 新增 | 文本 Embedding 向量。可被下遊 |
| 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-exact 和 dedup-fuzzy 之後使用,前置去重可大幅減少輸入資料量。推薦管道順序:dedup-exact -> dedup-fuzzy -> dedup-semantic。
預設閾值
"0.1"適合大多數情境,數值越小越嚴格。__dedup_emb擴充列可供下遊semantic-cluster節點直接複用,避免重複計算 Embedding。全域去重適用於增量入庫情境,需確保 Dataset 已開啟向量索引。
無需在
dedup-semantic前單獨調用 embedding 節點,該運算元內部已包含 Embedding 產生邏輯。
邊界與異常
情境 | 行為 |
| 校正失敗,Pipeline 不會啟動。 |
| 校正失敗,Pipeline 不會啟動。 |
| 校正失敗,Pipeline 不會啟動。 |
Embedding 模型不可用 | 運行時報錯。 |
| 該行不參與去重,不出現在輸出中。 |
輸入資料為空白 | 正常返回空結果集。 |