7.3 知识图谱:把散落的事实连成可问答的网


文档摘要

7.3 知识图谱:把散落的事实连成可问答的网 本节摘要:知识图谱把文档、表格、日志里的实体与关系收进一张图,让"问一句、答一片"成为可能。本节走完整链路:schema 先行的建模纪律、实体抽取与对齐的工程手段、实例数据的批量入库,最后搭建"自然语言问句翻译成 Cypher"的问答层。读完你将能评估自己业务的知识图谱化路径。 推荐和欺诈都从业务数据出发,知识图谱多一步"从非结构化文本里来"。它的难点不在存储——Neo4j 存图谱毫无压力——而在抽取、对齐、维护三件工程活。 一、Schema 先行:本体设计三步 与 2.

7.3 知识图谱:把散落的事实连成可问答的网

本节摘要:知识图谱把文档、表格、日志里的实体与关系收进一张图,让"问一句、答一片"成为可能。本节走完整链路:schema 先行的建模纪律、实体抽取与对齐的工程手段、实例数据的批量入库,最后搭建"自然语言问句翻译成 Cypher"的问答层。读完你将能评估自己业务的知识图谱化路径。

推荐和欺诈都从业务数据出发,知识图谱多一步"从非结构化文本里来"。它的难点不在存储——Neo4j 存图谱毫无压力——而在抽取、对齐、维护三件工程活。

一、Schema 先行:本体设计三步

与 2.1 的建模三步法同源,但知识图谱更强调"本体先行"——先定义类型系统,再灌数据:

// 本体约束:类型、唯一键、必填(约束先行的落地) CREATE CONSTRAINT org_name_unique IF NOT EXISTS FOR (o:Organization) REQUIRE o.name IS UNIQUE CREATE CONSTRAINT person_name_unique IF NOT EXISTS FOR (p:Person) REQUIRE p.name IS UNIQUE
本体设计三步: 1. 列类型:Person、Organization、Location、Concept、Event 2. 定关系:WORKS_AT、LOCATED_IN、FOUNDED、SUBCONCEPT_OF 3. 规定层级:Concept 用 SUBCONCEPT_OF 自环构成分类树

知识图谱与业务图的差别在于层级敏感:"图数据库 IS_A 数据库"这类分类关系要能支撑"把所有数据库相关的概念带出来"的泛化查询——自环关系 + 变长路径的组合(2.3 的技能)正是为此准备的。

二、实体抽取与对齐:图谱质量的生死线

同一实体在不同文本里的写法不同("中科院"与"中国科学院"),不对齐就会长出双头节点。工程上分两步:

// 第一步:抽取结果批量入库(MERGE 保幂等,alias 数组做别名) UNWIND $entities AS e MERGE (n:Organization {name: e.canonical}) ON CREATE SET n.aliases = e.aliases, n.type = e.type WITH n, e UNWIND e.aliases AS alias MERGE (al:Alias {name: alias}) MERGE (al)-[:REFERS_TO]->(n)
第二步:查询时先过别名层——"中科院" → Alias 节点 → REFERS_TO → 官方节点 别名层的好处:归一逻辑可迭代, 新别名随时补挂,不必改历史节点

图:别名层的归一结构

图:别名层的归一结构

⚠️ 别在节点上存别名数组然后每次 CONTAINS 查——别名层(独立节点 + REFERS_TO 边)让归一化变成可增量维护的图结构,这是知识图谱建模的成熟惯例。

三、实例演练:一个小型领域图谱

以"人工智能领域知识图谱"为例灌入种子数据并跑一个泛化查询:

// 种子数据:概念树 + 人物关系 CREATE (ai:Concept {name: '人工智能'}) CREATE (ml:Concept {name: '机器学习'}) CREATE (dl:Concept {name: '深度学习'}) CREATE (kg:Concept {name: '知识图谱'}) CREATE (ml)-[:SUBCONCEPT_OF]->(ai) CREATE (dl)-[:SUBCONCEPT_OF]->(ml) CREATE (kg)-[:SUBCONCEPT_OF]->(ai) CREATE (t:Person {name: '陈墨'})-[:EXPERT_IN {since: 2020}]->(kg) CREATE (t)-[:WORKS_AT]->(:Organization {name: '启元实验室'})
// 泛化查询:AI 大领域下所有子概念的专家都有谁 MATCH (root:Concept {name: '人工智能'})<-[:SUBCONCEPT_OF*1..3]-(c:Concept) <-[:EXPERT_IN]-(p:Person) RETURN c.name AS 子概念, collect(DISTINCT p.name) AS 专家
子概念 | 专家 -----------|------ "机器学习" | ["王一舟"] "深度学习" | ["王一舟", "李微"] "知识图谱" | ["陈墨"]

SUBCONCEPT_OF*1..3 一行,就是关系库要写三次递归 CTE 的活——1.1 的判据在知识图谱场景的再次应验。

四、问答层:自然语言到 Cypher 的翻译

业务人员不会写 Cypher,问答层的职责是把问句翻译过去。成熟做法是意图模板 + 实体链接两级:

问句:"陈墨在哪个机构工作?" ↓ 意图识别 → 命中模板:{人} 的任职机构 ↓ 实体链接 → "陈墨" 经别名层定位 Person 节点 ↓ 模板实例化 → 下方 Cypher
// 模板实例化结果(参数 $person = '陈墨') MATCH (p:Person {name: $person})-[:WORKS_AT]->(o:Organization) RETURN o.name AS 机构
机构 ---- "启元实验室"

模板覆盖不了的问句,退化为"实体 + 相邻两跳"的通用查询(MATCH (n {name: $e})-[r]-(m) RETURN ...),答不出来时明确说"图谱暂未覆盖"——诚实降级比瞎答更可信,这是问答系统的产品纪律。

本节要点回顾

  • 知识图谱 = 本体(类型系统)+ 实例(抽取对齐后的图)+ 问答层
  • Schema 先行:约束、类型、层级关系在灌数据前定义;
  • 别名层(Alias 节点 + REFERS_TO)是实体归一的可维护形态;
  • 分类树的泛化查询 = 自环关系 + 变长路径,图的本职优势;
  • 问答走"意图模板 + 实体链接",覆盖不到就诚实降级。

图谱回答"是什么、有什么关系"。下一节换成"怎么走最快"——路径查找与导航。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U