paper2skills Playbook

KG 实体消歧与去重(Entity Resolution & Deduplication)

Skill-Entity-Resolution-KG-Dedup · 08-知识图谱

causalexperimentforecastingknowledge_graph推荐与搜索知识图谱与RAG数据采集与治理WF-D 选品扫描WF-E Review监控
业务视角
适用角色选品负责人 / 运营负责人 · 数据分析师 · 供应链负责人
适用平台Amazon 品类体系 · 竞品 ASIN 网络分析
什么情况下用品类很多,不清楚品类间的关联,没法做系统性类目扩张规划;竞品矩阵太复杂,品牌/SKU/渠道理不清
成功是什么样的建立品类知识图谱,清晰看到哪些是入口品/引流品/利润品,指导下一步选品扩张方向
业务痛点
品类太多不知道先做哪个竞品关系理不清楚不知道用户买了奶瓶还会买什么类目扩张没有逻辑

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