知识图谱是什么:实体、关系与三元组
知识图谱是一种用「图」来组织知识的方式:把现实世界中的事物抽象成节点(实体),把事物之间的联系抽象成边(关系),形成一张可以沿着关系跳转的网。最基本的单元是三元组——「主实体、关系、客实体」,比如(阿里云,旗下产品,通义千问)。一张知识图谱就是海量三元组的集合,而它的价值在于「连接」:两个实体之间可能隔着好几跳关系,用图查询就能把它们串起来。
为什么不用关系数据库存这些?关系表适合「字段固定、行数多」的数据,而图谱天然是「实体可变、关系稀疏」的——每个实体拥有的关系类型和数量都不一样,用表存要么大量空列,要么拆得支离破碎。图数据库按「节点 + 关系」存储,查询沿边遍历,多跳关联查询的表达和性能都远好于 SQL 的多次 JOIN。知识图谱的应用从搜索引擎的知识面板,到企业里的智能问答、风控反欺诈、供应链分析,本质都是「沿着关系找答案」。
知识图谱的核心不是「存了很多实体」,而是「实体之间的连接可以被查询、被推理、被补全」。
- 三元组(实体、关系、实体)是图谱最小的知识单元。
- 抽取从非结构化文本中用 LLM 抽取实体与关系,是构建主路径。
- 建模本体设计、实体消歧与合并决定图谱的质量上限。
- 存储查询Neo4j + Cypher 是多跳关联查询的工程基座。
实体识别与关系抽取:从标注数据到 LLM 抽取
图谱构建的第一步是把非结构化文本变成三元组。传统做法是 NER(命名实体识别)+ 关系分类:先用模型把「阿里云」「通义千问」这样的实体标出来,再判断实体之间是什么关系。这条路需要大量标注数据、且每个领域都要重新训练,成本高、迭代慢。现在的主流做法是用 LLM 做「端到端抽取」:把文本和抽取规则一起给模型,让它直接输出结构化的三元组。
LLM 抽取的关键是定义好「抽取 schema」:要抽哪些类型的实体(公司、产品、人物、技术…)、哪些关系(旗下产品、成立于、位于…)、每个三元组的属性(时间、置信度、来源文本)。schema 定得越清楚,输出越规整。抽取时建议让模型先输出 JSON 再校验,而不是自由文本;一次处理一段文本而不是全文,避免漏抽和上下文混乱。抽取完成后要记录「来源」——每个三元组来自哪句话,这对后面的溯源和质量控制非常重要。
# LLM 三元组抽取(伪代码)
# 1. 定义 schema:实体类型与关系类型白名单
# 2. 对每段文本调用 LLM,要求输出 JSON 三元组列表
# 3. 校验:实体/关系必须在 schema 内,缺失字段补默认值
# 4. 给每个三元组附加来源文本与抽取置信度
# 5. 失败重试:JSON 解析失败时让模型按示例重新输出
{"triples": [
{"head": "阿里云", "type": "公司", "rel": "旗下产品", "tail": "通义千问", "source": "第 3 段"},
{"head": "通义千问", "type": "产品", "rel": "基于", "tail": "大模型", "source": "第 5 段"}
]}
图谱建模:本体设计与消歧合并
抽取出来的三元组是一堆散件,直接入库会乱。建图之前先做「本体设计」:定好实体类型层级(比如「公司」是「组织」的子类)、关系类型及方向、属性的类型约束(时间是日期、金额是数字)。本体设计决定图谱能回答什么问题——设计得细,查询就灵活;设计得过粗,后面想查细分维度就得返工。新手常见的错误是「把属性当实体」:比如把「成立年份」当成一个节点,应该做成年份属性挂在公司节点上。
然后是消歧与合并,这是图谱工程里最容易被低估的一环。同一个实体可能有多种写法:「阿里云」「阿里云计算有限公司」「Aliyun」,指的都是同一个实体;不同来源还可能给同一实体不同的属性值。做法是给实体建「规范名 + 别名」映射,按名称相似度、属性相似度、上下文共现做聚类合并,合并时保留高置信度来源的属性、记录合并证据。消歧做不好,图谱里全是重复节点,多跳查询会漏路径——这是图谱「看起来建好了,一查就废」的头号原因。
# 实体消歧合并(伪代码)
# 1. 候选生成:名称归一化 + 模糊匹配 + 别名表召回候选
# 2. 判定:名称相似度 / 属性相似度 / 共现上下文加权打分
# 3. 超过阈值则合并:保留规范名,别名并入,属性取高置信度来源
# 4. 冲突属性(如两个不同成立年份)标记为待人工确认
# 5. 记录合并证据,支持审计与回滚
存储与查询:Neo4j 与 Cypher 入门
图谱建好之后要落到图数据库里。Neo4j 是最常用的选择:节点和关系都支持属性,Cypher 查询语言直观好上手。建库的基本操作是 CREATE 节点、MERGE 关系(存在则复用,避免重复)。查询的核心是 MATCH 模式匹配:描述「沿着哪类关系从哪类节点走到哪类节点」,引擎自动沿边遍历。多跳查询是图谱相对关系数据库最大的优势场景:比如「找出与通义千问同属阿里云旗下、且成立于 2015 年后的所有产品」,一条 Cypher 就写出来。
实际项目里还要注意几个工程细节:批量导入用 LOAD CSV 或驱动批量 API,别一条条 CREATE;给高频查询的标签和关系建索引;实体和关系的属性里存规范名、来源、时间戳,方便审计;图谱规模大时考虑分片或迁移到分布式图数据库。下面是一段建图与查询的 Cypher 示例。
// 建图(节选)
MERGE (a:Company {name: "阿里云"})
MERGE (p:Product {name: "通义千问"})
MERGE (a)-[:HAS_PRODUCT {since: 2023}]->(p)
// 多跳查询:阿里云旗下产品中,与技术“大模型”相关且成立晚于 2020 的
MATCH (c:Company {name: "阿里云"})-[:HAS_PRODUCT]->(prod:Product)
WHERE prod.founded_year > 2020
AND (prod)-[:RELATED_TO]->(:Tech {name: "大模型"})
RETURN prod.name
图谱更新与质量校验
图谱不是一次建完就完事的资产,它需要持续更新。更新有两类:增量更新——新文档进来,抽取出的新三元组与已有图谱合并;批量重建——数据源大规模变化时,局部子图重建后替换。增量合并时要复用消歧逻辑:新实体会不会和已有节点重复?新关系会不会和已有关系冲突?属性更新要保留版本信息,避免「改坏了回不去」。
质量校验贯穿构建全程,常见指标有四类。一是完整性:覆盖了多少源文档、抽取覆盖率。二是准确性:抽样人工核对三元组正确率。三是一致性:同一个实体的属性是否互相矛盾(比如两个不同的成立年份),关系方向是否统一。四是连通性:孤立节点占比、图谱平均路径长度——孤立节点太多说明抽取或消歧有问题。校验要形成自动化流水线 + 抽样人工复核的组合,而不是上线前一次性检查。
知识图谱的质量问题大多是「构建时欠的债」:本体没设计好、消歧没做透,上线后越用越乱。
图谱与 LLM 结合:从 GraphRAG 到智能问答
图谱最大的落地场景之一是和 LLM 结合做智能问答。RAG 的常规做法是从文档里做向量检索,回答「散落在文本里的知识」;但很多问题需要「跨文档把线索串起来」——比如「A 公司收购的 B 公司在 C 行业有哪些大客户」,答案分散在多篇文档里,向量检索很难一次性命中。图谱把这种多跳关联显式存下来,LLM 可以先在图谱里做结构化查询拿到线索,再结合原文生成答案,这就是 GraphRAG 的核心思路。
工程上有两种结合方式。轻量做法:LLM 把用户问题改写成 Cypher 查询,在图谱里取结果,再让 LLM 基于结果组织答案——这和 Text2SQL 那篇的思路一致,只是查询语言换成 Cypher。稳健做法:先做「图谱摘要」——把子图结构用自然语言描述出来,作为上下文注入 RAG 管线,和向量检索结果一起给 LLM。前者适合问题模式可控的场景,后者更适合开放式问答。无论哪种,都要注意给 LLM 提供图谱的 schema 说明,否则它写出的查询经常对不上图。
| 结合方式 | 适用场景 | 优点 | 注意点 |
|---|---|---|---|
| LLM 写 Cypher 查询 | 问题模式可控 | 回答精确、可解释 | 需 schema 上下文与容错 |
| 子图摘要注入 | 开放式问答 | 灵活、实现简单 | 摘要质量影响回答 |
| 混合检索(图+向量) | 综合知识问答 | 兼顾关联与语义 | 两路结果需要融合排序 |
适用边界与工程落地
什么时候值得建知识图谱?判断标准很简单:你的核心问题是不是「沿着关系找答案」——反欺诈(账户与交易的关系链)、供应链(上下游依赖)、医疗(药物与疾病的关联)、知识库问答(跨文档多跳关联)。如果问题主要靠关键词和相似度就能回答,向量检索就够用,建图谱是过度设计——图谱构建和维护的成本不低,不要为了「显得先进」而上。
落地节奏建议从「最小可用图谱」开始:挑一个明确的业务问题,圈定实体和关系类型,用小批量数据跑通「抽取→建模→入库→查询→问答」全链路,验证价值后再扩范围。配套要建好三件事:来源追踪(每个三元组可溯源)、版本管理(图谱可回滚)、持续校验(质量指标流水线)。把这三件事做扎实,图谱才会从「一个数据库」变成「一个可持续运营的知识资产」。
知识图谱项目的成败,取决于你是否真的需要「多跳关联」,以及有没有把消歧和质量校验当核心工程来做。