KG 实体消歧与去重(Entity Resolution & Deduplication)
Skill-Entity-Resolution-KG-Dedup · 08-知识图谱
1. 解决的问题
电商知识图谱中同一商品在不同数据源有多种命名:中文名"吸奶器"、英文名"breast pump"、闽南语"集乳器"、品牌型号"Spectra S1"、Amazon ASIN"B07XYZ123"——若不做统一,KG 会出现大量重复节点,导致关系断裂、推理失效、检索召回率下降。实体消歧(Entity Resolution) 通过三步流水线将多源异构实体识别为同一现实对象并合并。
2. 核心算法逻辑
电商知识图谱中同一商品在不同数据源有多种命名:中文名"吸奶器"、英文名"breast pump"、闽南语"集乳器"、品牌型号"Spectra S1"、Amazon ASIN"B07XYZ123"——若不做统一,KG 会出现大量重复节点,导致关系断裂、推理失效、检索召回率下降。实体消歧(Entity Resolution) 通过三步流水线将多源异构实体识别为同一现实对象并合并。
3. 业务应用场景
业务背景:某母婴出海品牌同时运营亚马逊、独立站、天猫国际三个渠道,SKU 数据由不同团队维护,同一款"Spectra S1 双边电动吸奶器"在三个平台分别叫: - Amazon:`Spectra - S1 Plus Electric Breast Pump` - 独立站:`Spectra S1+ 双边吸奶器` - 天猫:`贝瑞克S1Plus吸奶器双边电动`
KG 中存在 3 个孤立节点,导致"同款商品竞品分析"查询结果不完整。
解决过程: 1. 阻塞:品类="吸奶器" + LSH,候选对从 40万² 降至 3.2 万对(RR=99.6%) 2. 相似度:Jaccard=0.18,余弦(multilingual-e5)=0.91,结构重叠(品牌 Spectra、双边、电动)=0.85 3. 融合分 $s = 0.2×0.18 + 0.6×0.91 + 0.2×0.85 = 0.75$,超过阈值 $\theta=0.65$,判定为同一实体
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- 节省人工:52 人天 × ¥800/天 = ¥41,600/季
- KGQA 准确率提升带来客服效率提升(减少重复咨询):约 ¥15,000/季
- 合计季度 ROI ≈ ¥56,600,实施成本约 ¥20,000(工程投入),回报周期 < 1 个季度
7. 代码模板
代码块数量:3 · 路径:未检测到
"""
KG 实体消歧与去重系统(Entity Resolution & Deduplication)
基于 arXiv:2406.02344, arXiv:2312.00601 等 2024 年最新方法
功能:
1. Token Blocking + LSH 阻塞
2. 词法 + 语义 + 结构三维相似度融合
3. 连通分量聚类 + 规范名合并
Author: paper2skills
Date: 2026-06-06
"""
import math
import hashlib
import ast
from typing import List, Dict, Tuple, Optional, Set, FrozenSet
from dataclasses import dataclass, field
from collections import defaultdict
# ============================================================
# 数据模型
# ============================================================
@dataclass
class Entity:
"""KG 实体节点"""
entity_id: str
name: str
source: str # 数据来源:"amazon" / "shopify" / "tmall"
category: str # 品类:"吸奶器" / "奶瓶"
attributes: Dict[str, str] = field(default_factory=dict) # 属性键值对
aliases: List[str] = field(default_factory=list) # 别名列表
def all_names(self) -> List[str]:
return [self.name] + self.aliases
@dataclass
class EntityPair:
"""候选实体对"""
id1: str
id2: str
lex_score: float = 0.0
sem_score: float = 0.0
struct_score: float = 0.0
final_score: float = 0.0
is_match: Optional[bool] = None # 标注结果(评估用)
@dataclass
class MergedEntity:
"""合并后的规范实体"""
canonical_id: str
canonical_name: str
member_ids: List[str]
merged_attributes: Dict[str, str] = field(default_factory=dict)
source_map: Dict[str, str] = field(default_factory=dict) # entity_id -> source
8. 论文来源
- 2312.00601
- 2406.02344
- 2407.09498