paper2skills Playbook

领域 Ontology 与图谱 Schema 设计

Skill-Ontology-Schema-Design · 08-知识图谱

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

1. 解决的问题

知识图谱的 Schema(本体 / Ontology)是整个 KG 的"地图"——它定义了有哪些实体类型、有哪些关系、每个属性的值域和约束。Schema 质量直接决定下游 KGQA 的检索上限和 GraphRAG 的推理深度。母婴电商领域 Ontology 设计需要平衡覆盖率(覆盖所有业务场景)与可管理性(避免过度细化导致维护失控)。

2. 核心算法逻辑

知识图谱的 Schema(本体 / Ontology)是整个 KG 的"地图"——它定义了有哪些实体类型、有哪些关系、每个属性的值域和约束。Schema 质量直接决定下游 KGQA 的检索上限和 GraphRAG 的推理深度。母婴电商领域 Ontology 设计需要平衡覆盖率(覆盖所有业务场景)与可管理性(避免过度细化导致维护失控)。

3. 业务应用场景

业务背景:某跨境母婴品牌 KG 建设初期,不同工程师对"吸奶器配件"的关系建模方式各不相同(有人用 `hasPart`,有人用 `compatibleWith`,有人用 `accessoryOf`)。导致 KGQA 查询"Spectra S1 配什么配件"时返回空结果——因为关系名不一致。

Schema 统一设计过程: 1. LLM 分析 3,000 条产品描述,自动提出 32 个候选类、87 个候选属性 2. 领域专家(2 人)2 天内审核,保留 18 类、54 属性,合并 14 个冗余概念 3. 定义 SHACL 约束:`BreastPumpAccessory` 必须有 `compatibleWith → BreastPump` 4. 运行覆盖率检查:$C = 96.2\%$,$R = 88.7\%$,补充 11 条缺失必填关系

量化 ROI: - KGQA 配件查询召回率:从 31% 提升至 92%(+61pp) - 新工程师 Schema 理解时间:从 3 天降至 4 小时(有 SHACL 文档) - 下游 GraphRAG 推理精度:$+18\%$(统一 Schema 后节点连通性提升)

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • KGQA 召回率 +40pp 带来客服机器人解答率提升,减少人工客服:¥45,000/月
  • 新品类上线加速(2周→2天),季度多上线 2 个新品类,GMV +8%:约 ¥120,000/季
  • 合计年化 ROI ≈ ¥1,020,000

7. 代码模板

代码块数量:5 · 路径:未检测到

"""
领域 Ontology 与图谱 Schema 设计工具
基于 arXiv:2405.08661, arXiv:2312.01044 等 2024/2025 年方法

功能:
1. Ontology 类层次定义(OWL-like)
2. SHACL 约束规则定义与验证
3. LLM 辅助 Schema 扩展(mock 实现)
4. 覆盖率 C 和关系完整性 R 量化计算

Author: paper2skills
Date: 2026-06-06
"""

from typing import List, Dict, Optional, Set, Tuple
from dataclasses import dataclass, field
from collections import defaultdict


# ============================================================
# 数据模型:Ontology
# ============================================================

@dataclass
class OWLClass:
    """OWL 类定义"""
    name: str
    label_cn: str
    parent: Optional[str] = None        # superclass name(单继承简化)
    description: str = ""
    examples: List[str] = field(default_factory=list)

    def is_root(self) -> bool:
        return self.parent is None


@dataclass
class OWLProperty:
    """OWL 属性定义(Object Property 或 Datatype Property)"""
    name: str
    label_cn: str
    domain: str                          # 主语类
    range_type: str                      # 宾语类或 xsd 类型
    is_object_property: bool = False
    description: str = ""
    # 约束
    min_count: int = 0
    max_count: Optional[int] = None      # None = 不限
    inverse_of: Optional[str] = None


@dataclass
class SHACLRule:
    """SHACL 约束规则(简化版)"""
    rule_id: str
    target_class: str
    property_name: str
    min_count: int = 0
    max_count: Optional[int] = None
    value_type: Optional[str] = None     # "xsd:decimal", "xsd:string", 或 class name

8. 论文来源

  • 2312.01044
  • 2405.08661
  • 2407.11340