Knowledge Graph Question Answering (KGQA)
Skill-KGQA-Question-Answering · 08-知识图谱
experimentforecastingrecommendationragknowledge_graphpricing客服与VOC推荐与搜索知识图谱与RAG定价与利润WF-C 客服分诊WF-D 选品扫描WF-F 动态定价
实现难度⭐⭐⭐☆☆
业务优先级⭐⭐⭐⭐☆
业务视角
适用角色选品负责人 / 运营负责人 · 数据分析师 · 供应链负责人
适用平台Amazon 品类体系 · 竞品 ASIN 网络分析
什么情况下用品类很多,不清楚品类间的关联,没法做系统性类目扩张规划;竞品矩阵太复杂,品牌/SKU/渠道理不清
成功是什么样的建立品类知识图谱,清晰看到哪些是入口品/引流品/利润品,指导下一步选品扩张方向
业务痛点
1. 解决的问题
构建了产品知识图谱后,如何让非技术人员(运营、客服、业务方)用自然语言查询它?
2. 核心算法逻辑
核心问题:构建了产品知识图谱后,如何让非技术人员(运营、客服、业务方)用自然语言查询它?KGQA把"图谱查询"从SPARQL/Cypher简化为人话。
3. 业务应用场景
业务问题:客服每天回答重复问题:"这款奶粉含DHA吗?"、"3段和2段有什么区别?"、"这款吸奶器适合背奶妈妈吗?"——答案都在知识图谱里,但客服需要手动查。
2. 用户提问:"爱他美3段含有哪些成分?"
3. KGQA处理: - 实体链接:`爱他美3段` - 关系预测:`contains` - 子图检索:`(爱他美3段, contains, ?)` - 答案生成:`"爱他美3段含有DHA、益生菌、GOS/FOS益生元组合"`
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- ROI:客服效率提升3-5倍,知识查询等待从分钟级降到秒级
- 难度:⭐⭐⭐☆☆(3/5)— 简单模式匹配易实现,复杂推理需要LLM
- 优先级:⭐⭐⭐⭐☆(4/5)— 知识图谱的"最后一公里",让业务方真正用上图谱
7. 代码模板
代码块数量:3 · 路径:未检测到
"""
Knowledge Graph Question Answering (KGQA) — 知识图谱问答
支持:实体链接、关系预测、子图检索、答案生成
"""
import re
from typing import List, Dict, Tuple, Optional
from collections import defaultdict
class SimpleKGQA:
"""简化版KGQA系统"""
def __init__(self):
self.kg = {} # {entity: {relation: [target_entities]}}
self.entity_aliases = {} # {alias: canonical_name}
self.relation_patterns = {
'contains': r'含有什么|成分|包含|有什么',
'suitable_for': r'适合谁|适用|几岁|多大',
'brand': r'什么品牌|牌子|哪个品牌',
'price': r'多少钱|价格|售价',
'compare': r'区别|差异|对比|和.*有什么',
}
def add_fact(self, head: str, relation: str, tail: str):
"""添加知识图谱三元组"""
if head not in self.kg:
self.kg[head] = defaultdict(list)
self.kg[head][relation].append(tail)
def add_alias(self, alias: str, canonical: str):
"""添加实体别名"""
self.entity_aliases[alias.lower()] = canonical
def _link_entity(self, question: str) -> Optional[str]:
"""实体链接:从问题中找提到的实体"""
question_lower = question.lower()
# 先匹配别名
for alias, canonical in self.entity_aliases.items():
if alias in question_lower:
return canonical
# 再匹配主实体名
for entity in self.kg.keys():
if entity.lower() in question_lower:
return entity
return None
def _predict_relation(self, question: str) -> Optional[str]:
"""关系预测:判断用户问的是什么关系"""
for relation, pattern in self.relation_patterns.items():
if re.search(pattern, question.lower()):
return relation
# 默认:如果问题含"是""吗",可能是属性查询
if '是' in question or '吗' in question:
return 'contains'
8. 论文来源
未自动抽取;请查看原始 Skill 卡片。