语义工程-04.电商导购案例V3.0-从本体到知识图谱
2026/7/2 9:16:38 网站建设 项目流程

V2.0回顾

V2.0 的核心目标是引入本体,通过本体识别用户查询的关键词

  1. 关键词提取:从用户查询中识别显式关键词,例如"黑色"“透气”“跑步”。
  2. 概念映射:把关键词映射到领域概念,例如"黑色"→颜色、"透气"→特征、"跑步"→场景。
  3. 形式化标识(IRI):查询 OWL/TTL 本体文件,把概念转换为全局唯一的 IRI。例如"透气"→http://example.org/semantic-rag/ec#Breathable,并生成 Neo4j 中存储的短 IRIec#Breathable。这一步让概念从字符串变成可共享、可推理的形式化标识,避免同名不同义、同义不同名的问题。
  4. IRI 精准查询:Cypher 查询从字符串匹配升级为 IRI 匹配。例如颜色过滤从toLower(col.name) = toLower($color)升级为col.iri IN $color_iris,产品特征过滤从feat.name IN $features升级为f.iri IN $feature_iris。查询结果直接携带 IRI,供下游追踪和可视化。
  5. 事实生成回复:基于图谱返回的已验证事实生成自然语言回复,杜绝幻觉。

V2.0存在的不足:

  • 意图识别功能薄弱
  • 不支持多跳查询

为此我们将引入知识图谱相关技术。

知识图谱中的基本概念

1.什么是知识图谱?

知识图谱是一种用图结构组织知识的语义网络,由实体关系属性组成,通常表达为三元组(实体A, 关系, 实体B)。例如:(张三, 就职于, 阿里巴巴)。与关系型数据库不同,知识图谱不仅存储"数据是什么",更通过显式的关系网络让机器理解"数据意味着什么",支持沿关系路径推理和导航。

2. 知识推理

知识推理是指基于已知事实和预定义规则推导出新知识的过程。在本体语义层中,推理通过上下位关系(如 rdfs:subClassOf)自动扩展查询范围,将泛化概念展开为具体实例。它不仅提升召回率,还能发现数据中隐含的关系,让知识图谱具备自动学习和扩展的能力。
例如:合规和监管体系

如果:公司 X → 公司 Y 的子公司; 且:公司 Y → 在 → 国家 Z 运营; 则:公司 X → 受 → 国家 Z 的法规约束。

工作原理:SPARQL + RDFS/OWL 推理可以自动推断这些关系。

真正的优势在于:只需编写一次规则,即可应用于所有新数据。这才是知识图谱的真正价值所在。


3. 多跳查询

多跳查询是指在知识图谱中跨越多个节点和关系进行深度遍历的查询方式。不同于传统数据库的单表查询,多跳查询能沿着对象间的链接逐层导航,发现间接关联。在产品推荐场景中,它支持"类似商品"和"替代方案"等复杂需求,是图数据库的核心优势所在。

例如:学术引文网络

"查找被引用本文作者其他作品的论文所引用的论文"

其原理在于:图数据库针对此类遍历进行了优化。而 SQL 执行同样的查询会遇到大量的 JOIN 操作。


4. 可解释性

可解释性是指系统能够展示其决策依据和推理过程的能力。在知识图谱中,每一次查询结果都附带完整的推理路径,用户可以追溯从原始查询到最终结论的每一步逻辑。这种透明性不仅增强用户信任,还能满足医疗、金融等高风险领域的合规审计要求。
例如:医疗诊断支持、法律推理、财务合规
其原理在于:图结构使推理路径更加清晰明确:

患者 → 有症状 → 发热 患者 → 有症状 → 咳嗽 患者 → 近期旅行至 → X 地区 地区 → 地方性流行区 → Y 疾病 Y 疾病 → 常见症状 → [发热,咳嗽] → 考虑:Y 疾病

实际好处:您可以追溯逻辑,展示证据,满足监管要求。

从本体到知识图谱:给数据装上"导航地图"

在 V2.0 中,我们引入了本体;在 V3.0 中,我们要引入知识图谱。它们是什么关系?

简单来说:本体是"地图",知识图谱是"导航"

  • 本体(Ontology):定义了"这是什么"——就像地图标注了每个地点的名称、类型和属性。
  • 知识图谱(Knowledge Graph):在本体基础上添加了"它们如何关联"——就像导航不仅知道地点,还知道道路、方向、距离,能帮你规划路线。

下面用一个保险索赔的例子,看看为什么光有数据不够,还需要本体和知识图谱。

例子:保险索赔流程

假设你有一张索赔状态表:

表格记录了每一笔索赔当前的状态:已提交、审核中、已批准、已支付……

但是,这张表对 AI 来说,只是一堆孤立的文字。

比如 AI 看到某一行状态是"已提交",它不知道:

  1. 下一步该去哪?已提交之后是审核,还是直接裁决?
  2. 有没有分支?审核之后一定进入"待处理"吗?还是可以跳过?
  3. 终点在哪?"已支付"是最终状态,还是后面还有步骤?
  4. 整体路径是什么?如果只看一行数据,AI 根本不知道整个索赔要走哪些步骤。

这些业务知识,其实都藏在人脑子里——业务人员看到"已提交",立刻知道这意味着"等待审核";看到"待处理",知道这是审核和裁决之间的一个可选状态。但 AI 看不到这些,因为它只拿到了一张平面的表格,没有拿到"流程地图"。

本体:给数据贴上"业务标签"

本体的作用,就是把这些藏在人脑子里的知识,变成机器能读懂的规则。

同样的索赔流程,加上本体后,变成了这样:

我们也可以用文字表示这个流程:

已提交 → 已收到 → 审核中 → 待处理/已裁决 → 已批准/部分批准 → 已汇款 → 已支付

现在,AI 不仅知道每一笔索赔的当前状态,还知道:

  • 它从哪来(上一个状态是什么)
  • 它该去哪(下一个状态有哪些选项)
  • 整个流程的终点在哪里

关键洞察:这些状态不仅是表格里的文字,更是业务流程里的节点。数据告诉你"现在在哪",本体告诉你"能去哪"。

而且,如果明天业务新增了"复核"这个状态,你只需在本体里加一条规则,所有 AI 系统立刻就能理解这个新状态该出现在流程的哪个位置——不需要重写代码。

这就是本体的力量:它把隐性的业务知识,变成了显式的、可共享的、可推理的结构化规则。

更复杂的例子:数据里根本没有的规则

上面的例子中,业务规则至少还能从数据中"推测"出来(比如通过状态变化的时间顺序)。但很多时候,规则根本不在数据里

比如医疗保险的合同数据:

这张表记录了合同编号、供应商、生效日期、终止日期……但以下规则,数据中完全没有体现

  1. HMO 合同必须有初级保健提供者(PCP)——表格里看不出这条规则
  2. 终止合同需提前 90 天通知——表格只记录了终止日期,没记录"提前通知"这个业务约束
  3. 供应商加入网络需要承担特定义务——义务是什么?表格没写

这些规则只存在于业务人员的经验中,或者写在前端 UI 的代码逻辑里。当数据从业务系统流入数据仓库(OLAP)时,这些规则被丢弃了,只剩下冷冰冰的事实数据。

这就是为什么 AI 很难直接分析企业数据——它拿到了"是什么",却不知道"意味着什么"

本体和知识图谱的价值就在于此:

  • 本体负责定义"业务规则是什么"(比如"HMO → 必须有 PCP")
  • 知识图谱负责把这些规则和数据连接起来,让 AI 在分析数据时,能随时查阅"规则手册",做出符合业务逻辑的判断

从 V2.0 到 V3.0,我们从"给概念起名字"(本体),进化到了"让概念之间会说话"(知识图谱)。下一步,我们来看看知识图谱是如何做到的。

本体和知识图谱的关联

知识建模分为两层:模式层数据层

模式层(Schema)就是"地图"——定义概念、关系和规则。比如"索赔有哪些状态"“审核之后能去哪”。

数据层(Data)就是"导航"——存储具体的事实。比如"索赔 #123 当前处于审核中"。

两者结合才是完整的知识图谱:

  • 模式层告诉系统"业务规则是什么"(本体建模 + 知识推理)
  • 数据层告诉系统"实际发生了什么"(知识提取 + 知识融合)

V3.0 解决方案

功能设计

1. 混合意图识别

  • 双层识别机制:规则匹配优先,语义模型兜底
    • 规则层:基于领域词典快速匹配品牌、颜色、尺码、价格等显式属性
    • 语义层:预训练语言模型计算查询文本与概念标签的语义相似度
  • 确保口语化、模糊化查询均能被准确理解

2. 推理层

  • 轻量级推理引擎:基于上下位关系自动扩展查询范围,
    • 示例:"运动鞋"自动扩展为篮球鞋、跑步鞋等子类
  • 同义词扩展:基于多语言标签建立概念等价映射

3. 多跳查询

  • 构建"相似推荐"和"替代推荐"两类智能关联
  • 检测到"类似""替代品"等关键词时,自动切换多跳查询模式
  • 在知识图谱中沿产品关联路径深度遍历

4. 交互式可视化

  • 查询结果子图:展示匹配产品及其颜色、特征、品牌等属性节点
  • 推理路径可视化:呈现从用户查询到语义扩展再到最终产品的完整推理链
  • 支持缩放、拖拽等交互操作

5. 流水线编排优化

  • 意图识别阶段:增加语义匹配分支,支持复杂自然语言表达
  • 约束校验阶段:增加推理扩展步骤,确保上下位和同义词结果正确参与查询
  • 知识图谱查询阶段:增加多跳推荐分支,支持相似和替代两类智能推荐
  • 所有调整保持向后兼容,原有精确标识查询路径不受影响

系统架构

模型层

数据层

后端层

前端层

HTTP

Streamlit app.py

PyVis graph_viz.py

FastAPI main.py

LangGraph pipeline.py

Ontology ecommerce.py

Semantic Resolver semantic_resolver.py

Reasoner reasoner.py

Neo4j Client neo4j_client.py

Cypher Queries queries.py

Neo4j

OWL/TTL 本体

Ollama / OpenAI-compatible LLM

sentence-transformers

流程设计

规则匹配

最长标签匹配

语义匹配

fallback

常规

场景无结果

类似/替代

用户查询

意图识别

品牌/颜色/价格/尺码

场景识别

同义词扩展

LLM 实体抽取

场景绑定查询

通用属性过滤

查询类型

场景优先查询

特征降级回退

同场景多跳查询

PyVis 子图可视化

Grounded Prompt

LLM 生成回复

方案设计

1. 查询维度重新定义

将V2.0以特征中心改为以场景为中心进行:

维度说明多值处理示例
场景产品使用场景归属ORscene_iris=[RoadRunning]
特征产品能力描述(降级回退用)ORfeature_iris=[Breathable]
属性品牌/颜色/尺码/价格精确/范围brand=安踏,price<300
类别上下位类别体系ORcategory_iris=[SneakerCategory]
维度间组合:不同维度 AND 交集,同一维度内部 OR 并集。

新增了13个常见的运动场景:

场景用途映射特征
跑步(公路跑)长跑、短跑、马拉松、训练轻便/舒适、防滑/抓地力、(适中)缓冲、透气/通风
越野跑山地、沙地、泥地、草原防滑/抓地力、(侧向)支撑/包裹性、耐磨/耐用、(适中)缓冲
篮球运动场、篮球馆、多人集体运动防滑/抓地力、(侧向)支撑/包裹性、耐磨/耐用、高弹性/高支撑
足球/曲棍球足球场、曲棍球场防滑/抓地力、(适中)缓冲、透气/通风、耐磨/耐用
网球/羽毛球网球场、羽毛球场(侧向)支撑/包裹性、轻便/舒适、耐磨/耐用
高尔夫高尔夫球场高弹性/高支撑、防滑/抓地力、耐磨/耐用
训练/体能体能训练、健身房综合支撑(= (侧向)支撑/包裹性)、耐磨/耐用、(适中)缓冲
专业竞技专业运动轻便/舒适、高弹性/高支撑、(适中)缓冲
户外徒步/远足自然环境、徒步耐磨/耐用、防滑/抓地力、高弹性/高支撑、厚实
室内/健身房室内跑步机、力量训练轻便/舒适、(适中)缓冲、耐磨/耐用
运动休闲/日常穿搭轻便休闲、街头轻便/舒适、透气/通风
特殊功能(抗震、跑酷)跑酷、街头战术高弹性/高支撑、防滑/抓地力、耐磨/耐用
儿童/青少年儿童鞋轻便/舒适、(适中)缓冲

2. 混合意图识别

  • 语义识别:采用sentence-transformersall-MiniLM-L6-v2模型计算查询文本与所有概念标签的 cosine 相似度
  • 阈值设为 0.7,超过则匹配;低于阈值则调用现有 LLM 做 fallback

3. 推理层

  • 上下位推理:遍历 TTL 中rdfs:subClassOf关系,构建子类索引。用户查询"运动鞋"时,扩展为 “跑步鞋”和“篮球鞋”;
  • 同义词扩展:基于rdfs:label的多标签 + 语义匹配相似度,构建"跑鞋→跑步鞋"映射
  • 推理结果注入知识图谱搜索输入匹配字段

4. 多跳查询

  • 在创建产品后,在本体层基于规则生成SIMILAR_TOREPLACEMENT_FOR关系
    • SIMILAR_TO:同品牌 + 同类别 + 价格差 < 20%
    • REPLACEMENT_FOR:同品牌 + 价格更低 + 特征重叠 > 50%
  • 流水线Pipeline 增加分支:检测到"类似""替代品"关键词时,走多跳查询路径

5. 可视化增强

  • 查询结果子图:提取匹配产品及其关联的颜色、特征、品牌节点,用 PyVis 生成网络图
  • 推理路径:展示"用户查询 → 语义扩展 → IRI → 产品实例"的推理链,例如
用户输入 "我想去爬山" ↓ 场景识别 OutdoorHiking (户外) ↓ 映射特征 ├── Durable (耐磨) ├── AntiSlip (防滑) ├── ElasticSupport (弹性支撑) └── Thick (厚实)
  • 在 Streamlit 中用st.components.v1.html嵌入

6.Langchain编排层调整

  • Node 1resolve_intent增加语义匹配分支
  • Node 2validate_constraints增加推理扩展步骤
  • Node 3query_knowledge_graph增加多跳查询分支
  • 保持向后兼容:V2 的 IRI 查询路径不变

技术栈

  • Python 3.11+
  • FastAPI:后端 API
  • LangGraph:工作流编排
  • Neo4j:知识图谱数据库
  • rdflib:OWL/TTL 本体加载与推理
  • sentence-transformers:本地语义匹配
  • pyvis:交互式图谱可视化
  • Ollama / OpenAI-compatible:LLM 推理
  • Streamlit:交互式前端
  • python-dotenv:环境变量管理

测试用例和预期结果

查询验证点预期结果
运动鞋上下位推理:展开为篮球鞋 + 跑步鞋返回 8 个产品(含 p001-p009 除 p004 缺货)
跑鞋同义词扩展:映射到 RoadRunning 场景精确返回 4 个跑步鞋(p002, p005, p007, p008)
篮球鞋场景绑定:映射到 Basketball 场景精确返回 4 个篮球鞋(p001, p003, p006, p009),不含 p007
安踏黑色透气运动鞋 300元以下 42码字面属性多条件过滤返回 0 个(数据集中无同时满足所有条件的产品)
适合户外徒步的鞋场景绑定:映射到 OutdoorHiking 场景返回 1 个产品(p007,唯一双场景绑定产品)
和安踏马赫4代类似的鞋SIMILAR_TO多跳相似推荐(同场景 + 同品牌 + 价格差 < 20%)返回 3 个产品(p002, p008, p009)
比安踏KT9便宜的替代品REPLACEMENT_FOR多跳替代推荐(同场景 + 同品牌 + 低价)返回 2 个产品(p002, p007)

V3.0项目总结

解决了电商导购场景中"用户表达多样"与"推荐结果精准"之间的矛盾。
核心能力

  1. 混合意图识别:支持"跑鞋"→"跑步鞋"、"我想去爬山"→"户外徒步"等同义词和口语化表达识别。规则引擎 + 语义模型 + 大模型三层兜底。
  2. 上下位推理:查询"运动鞋"自动扩展为篮球鞋、跑步鞋等所有子类,避免仅按字面匹配导致的漏召回。
  3. 多跳智能推荐:支持"和安踏马赫4代类似的鞋""比安踏KT9便宜的替代品"等复杂表达,基于同场景、同品牌、价格差、特征重叠度等业务规则生成推荐。
  4. 可解释可视化:Streamlit 界面展示完整推理路径——“我的查询 → 识别到的场景 → 映射的特征 → 匹配的产品”,让用户理解为什么推荐这些结果。

后续可继续完善的地方:

  • 用户对话记忆的问题
  • 源数据和本体映射的问题
  • 查询性能的问题

End

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询