知识图谱建好了,实体对上号了,关系也拉成一张大网了,看起来一切井井有条。但只要真的上手做过业务,你就会发现一个尴尬的事实:这张网永远是不完整的。用户问一个稍微拐两个弯的问题,比如“某作者的导师的合作者的学生,现在在哪个机构”,图谱里几乎必然缺某一条边。缺了边,查询就返回空,系统就“哑”了。这时候知识推理就该上场了。
知识推理,简单说就是让图谱从“存了什么”往前走一步,变成“能推出什么”。它不是靠人把每一条边都补进去,而是靠规则、结构、统计规律,把隐含的关系显式地推导出来。这个领域非常大,大到一个人很难一口吃成胖子,所以我计划用系列文章来梳理。这篇是综述的第一篇,重点解决三个问题:推理到底解决什么痛点、这个领域分哪几条路线、每条路线目前的边界在哪里。适合刚接触知识图谱、准备把推理引入项目的人,也适合已经跑通基础查询、想进一步挖掘图谱价值的开发者。
1. 从头讲起:知识图谱“建完”之后为什么还要知识推理
1.1 一个真实存在的尴尬:图谱建好了,问题答不上来
我见过不少团队,花了大半年把知识图谱搭起来,实体对齐、关系抽取、属性补全都做了,Ontology也设计得规规矩矩。一到验收演示就出问题:业务方问了一个非常“正常”的问题,系统答不上来。
举个例子,某公司的内部知识图谱里存了“张三的父亲是张建国”和“张建国的父亲是张守义”这两条事实,但没存“张三的爷爷是张守义”。业务方问“张三的爷爷是谁”,系统只能两手一摊。你说它错了吗?数据没错,图谱没错,但答案就是出不来。这种“存了A和B,但推不出C”的情况,知识图谱里处处都是。
造成这种现象的根本原因,是知识图谱的构建过程天然具备不完备性。抽取管道的召回率做不到100%,人工审核的成本又高得吓人,再加上真实世界里的事实本来就在不断变化,图谱永远追不上现实。根据我在几个实际项目里的经验,一个刚上线的关系抽取管道,对长尾关系的召回率往往只有三到五成,这意味着大量的真实关系在源头就丢失了。靠堆人力去补,成本完全不可控。知识推理存在的意义,就是在这张“充满洞”的网上,用已知的线索把洞补上一部分。
1.2 知识推理在知识图谱技术栈里的准确位置
想要理解知识推理,先得给它定位。知识图谱的技术链条大致是:知识获取(抽取、融合)→知识表示(本体、schema)→知识存储(图数据库)→知识应用(问答、推荐、决策)。推理不是独立在链条之外的一个模块,它更像是横插在存储和应用之间的一个转换层——把存储层里“沉默”的事实,转换成应用层能直接使用的“活跃”知识。
打个比方,知识图谱是一张只画了部分道路的地图,知识推理是根据限速牌、道路类型和已知的连通关系,推测出某条没画出来的小路大概率也走得通。和普通查询相比,推理最大的区别是:查询只能返回存储的事实,推理能产出新的事实。
在具体实现上,推理的产出通常有两种去向。一种是离线批处理:每天晚上跑一遍推理任务,把推导出的新事实写回图数据库,让查询直接命中,这种方式响应快、对线上系统改造小,是目前工业界最常用的做法。另一种是在线推理:查询到达时实时进行推导,适合规则少、响应要求高的场景,但对推理引擎的性能要求很高。到底用哪种,取决于你的查询延迟预算和数据更新频率,没有绝对的好坏。
1.3 综述(一)会覆盖什么,不会覆盖什么
既然挂了“综述(一)”的名字,我先把这篇的边界说清楚。这一篇覆盖的内容是:推理的需求来源、两大推理路线的思想框架(符号推理与统计推理)、若干经典方法的原理和适用场景、推理在业务中的典型落点,以及目前公认的瓶颈。简单概括,这篇给出的是整个知识推理领域的地图,让你知道哪个方向有什么、大致该怎么选。
我不会在这篇里展开的东西也有不少:具体框架的API使用、每个算法的数学推导、图数据库内的推理配置、以及大规模推理引擎的性能调优。这些内容每一块都够写一整篇,放进综述里只会让主线变得混乱。我会在后续系列文章里逐个深入,比如专门讲规则推理的工程落地,专门讲知识图谱嵌入的数学模型,专门讲推理引擎的选型对比,等等。
2. 两种世界假设决定了两大推理路线:先想清楚你活在哪种世界里
2.1 闭世界假设与开世界假设:一个哲学问题直接决定了技术选型
知识推理领域有个很有意思的起点,它不是一个算法问题,而是一个“世界观”问题:你怎么看待那些图谱里没存的事实?
如果你采用闭世界假设(Closed World Assumption),那么你的逻辑是:凡是图谱里没有明确记录的,就是假的。关系数据库就是这个思路,库里查不到某条记录,那就等于这条记录不存在。很多基于规则的专家系统也是这个思路,规则没匹配上就返回否定。
如果你采用开世界假设(Open World Assumption),那么你的逻辑是:图谱里没记录的,只能说“不知道”,不能说“不存在”。语义网和本体推理界的标准立场是开世界假设,因为Web上的知识天然就是不完整的,一条关系没被发现,不代表它在现实里不成立。
这个区别听起来像哲学争论,实际上直接决定了你的技术路线。闭世界下,你可以用“穷举所有可能,排除不存在的”这种方式来做推理,逻辑严格、结论确定;开世界下,你没办法穷举,只能依靠统计规律和概率来估计“某条关系成立的可能性”。所以你去看文献,符号推理那一派的逻辑学基础偏闭世界,知识图谱嵌入那一派本质上全是开世界假设的产物,因为它们做的不是“判定真假”,而是“估计概率”。
2.2 符号推理与统计推理:一张表看清两派的主要差异
刚接触这个领域的人,最容易犯的毛病就是“听说哪派好就一头扎进去”。实际上这两派关注的维度完全不同。我整理了一张直接对比的表:
| 对比维度 | 符号推理 | 统计推理 |
|---|---|---|
| 推理依据 | 人类显式书写的规则、本体公理 | 从数据中学习到的向量表示和统计规律 |
| 可解释性 | 很高,每一步推导都能回溯 | 较差,结果是向量计算的产物,很难解释原因 |
| 数据需求 | 少,几条规则就能工作 | 多,需要足够多的三元组训练 |
| 对噪声的容忍度 | 低,噪声会导致规则误用 | 高,统计方法天然平滑了噪声影响 |
| 推理结果的确定性 | 确定性结论 | 概率性结论 |
| 擅长场景 | 诊断、合规校验、知识校验 | 链接预测、推荐、信息检索 |
| 短板 | 规则工程成本高,难以覆盖所有情况 | 缺乏严格逻辑保证,可解释性弱 |
这两条路线不是最近才分家的。符号推理的前身可以追溯到上世纪六七十年代的专家系统,统计推理则随着知识图谱嵌入方法在2013年前后的兴起而爆发。不过我知道这些历史大概谁都会背,这里不展开学术史,重点是让你在选型时有个清晰的判断框架。
2.3 为什么“哪种更好”是个伪命题
我不建议你抱着站队的心态看这两派。真实业务里的答案比“哪个好”复杂得多。
举个我在项目里遇到过的例子,某知识图谱项目需要做两件事:一是校验已有数据里有没有逻辑矛盾,二是给图谱补全缺失的关联。校验这件事,我们用符号推理就够,几条不一致规则加上一个规则引擎,跑起来又快又稳,出问题还能直接打印推理链。补全这件事,符号规则根本写不全——业务方根本列不全所有可能的关联模式,我们最后用的是嵌入模型做链接预测,给候选关系排个序,人工抽检确认后再入库。
这两种技术在同一套系统里共存,一点毛病没有。所以我的建议是:选择路线之前,先分清你的需求是哪一类。如果需求是“判断对错”,符号推理是主力;如果需求是“找候选”,统计推理是主力。如果有条件,两者串成流水线效果最好,这个混合架构的思路我会在后面具体展开。
3. 符号推理:规则与本体驱动的“老派”路线,但依然能打
3.1 本体推理:从类层级里推出隐含类型
符号推理里最基础的一档,是本体推理,也常常叫基于描述逻辑的推理。它的核心思路是利用本体里定义的类层级和属性约束,推导出实例的隐含类型。
举个例子,你的本体里定义了“人类”是“哺乳动物”的子类,“哺乳动物”是“动物”的子类,同时定义了“张三”是“人类”的一个实例。那么本体推理引擎能推出“张三”也是“哺乳动物”的实例,也是“动物”的实例。听起来好像很平凡,但在大规模图谱里,这种推导的价值在于它可以自动把实体归类到更泛化的概念下,支撑上层的概念检索与分析。
做得更复杂一点,你可以定义属性链和属性约束。比如“张三的父亲是张建国”,本体里定义了“父亲”是“父母”的子属性;再比如定义了属性“hasParent”具有传递性,那么知识图谱里存储的两级父亲关系,就能推出祖孙关系。描述逻辑为这类推导提供了严格的形式化基础,像常见的OWL DL,它的推理复杂度是经过理论证明的,这保证了在一定约束下推理是可判定的,不会出现“跑着跑着停不下来”的情况。
3.2 规则推理:IF-THEN是最朴素的推理引擎配置
比本体推理更柔性一点的是规则推理。它不要求你构造严密的本体,只需要写一批形如“如果A那么B”的规则,推理引擎把规则和图谱里的事实反复匹配,直到没有新的结论产生。规则推理里最常见的代表是对规则语言的支持,不过我更常直接用规则语言配合规则引擎来跑。
给个实际例子,假设我们要给一个社交关系图谱补全“祖孙”关系,规则可以写成这样:
hasParent(?a, ?b) ∧ hasParent(?b, ?c) → hasGrandparent(?a, ?c)把这条规则加载进引擎,图谱里的“张三→张建国”和“张建国→张守义”两条边一匹配,引擎就会自动产出新边“张三→张守义”。如果规则数量少,逻辑简单,这种方式跑了几年都不需要维护,稳得很。
但规则推理有个工程上的大坑你必须知道:规则匹配是典型的计算密集型任务,规则数量一旦多起来,笛卡尔积式的匹配开销就非常恐怖。尤其当图谱规模达到数千万三元组、规则达到数百条时,一个不考虑优化策略的规则引擎能把CPU跑满几个小时。实际项目里,你得学会控制规则的复杂度,并优先使用支持RETE算法或类似优化机制的规则引擎,能省下大量时间和机器。
3.3 归纳逻辑编程:反着来,从数据里“长”出规则
前面说的规则推理,是“人写好规则,机器执行”。归纳逻辑编程(ILP)反过来了:人工给定背景知识和一批正负样本,算法自动去归纳出一组能解释样本的规则。它相当于让机器自己“长出”规则来,而不是靠领域专家手工写。
我在一个小规模的患者诊断图谱上用ILP做过实验,标注了一组“被诊断为某疾病”的正样本和负样本,ILP自动生成了一条类似“有症状A且有既往病史B则该疾病风险升高”的规则。这条规则和医生手工给出的临床指南高度吻合,但推导过程只花了不到一分钟。这个体验让我意识到:ILP非常适合那些规律不明显、人工总结成本高的小规模领域,尤其适合数据字典清晰、噪声可控的场景。
不过ILP的扩展性是硬伤,面对大规模知识图谱它基本跑不动,因为搜索空间增长得太快。所以现在的实际定位,是给规则工程当“半自动助手”——先用ILP在小样本上归纳出候选规则,再交给领域专家去审核修正,最后把确认过的规则喂给规则推理引擎。
3.4 符号推理的边界:规则写不全,就是最大的边界
把符号推理吹了一通,也得说说它的边界。我遇到最多的问题是两类。
第一类,规则写不全。业务方最初的规则可能覆盖了80%的情况,剩下20%的复杂情况他们自己都没想清楚,规则根本没地方写。更麻烦的是规则之间还会冲突:两条规则各自能推出结论,但结论互相矛盾。这种矛盾在规则量小的时候好查,规则一多就非常难追踪。
第二类,容错能力差。规则是精确匹配的,如果图谱数据里有错误,比如某条边的关系类型标错了,规则很可能基于错误的边推出一大堆错误的结论,而且错误还会沿着推理链传播。这一点和统计推理形成了鲜明对比,统计方法对噪声天然有平滑能力,符号推理对噪声是零容忍的。所以现实中,纯符号推理的系统必须搭配严格的数据质量管控,规则越多,数据质量门禁就要越严。
4. 统计推理:知识图谱嵌入和图模型,用数据把洞“估”出来
4.1 知识图谱嵌入的核心思想:把三元组变成向量运算
与符号推理的“严格逻辑”不同,知识图谱嵌入走的是另一条路:把每个实体和每种关系都用一个低维向量表示,让三元组的成立与否转化为向量之间的运算关系。这就是2013年前后出现的知名思路,它的精髓用一个公式就能概括:对于三元组(头实体h, 关系r, 尾实体t),我们希望头实体的向量加上关系向量,尽量等于尾实体的向量,也就是h + r ≈ t。
用个简单的类比:把每个实体想象成漂浮在高维空间里的一个点,把每种关系想象成一种固定的“位移”。如果“北京”这个点加上“首都”这个位移,能落到“中国”这个点附近,那么模型就认为(北京, 首都, 中国)是成立的。训练的过程,就是不断调整所有实体和关系的向量,让图谱里已有的三元组尽量满足这个等式,同时让随机抽样的负样本尽量不满足。最终,那些图谱里缺失的关系,就可以通过计算h + r与哪个实体向量最接近来做预测。
实际训练里,负采样的策略对效果影响很大。我踩过的坑是:如果负样本抽得太随机,模型学到的区分度就很差;但如果负样本构造得太难,训练又会不稳定。现在常用的做法是均匀负采样加一定的纠偏,这个细节在具体实现时值得反复调。
4.2 从TransE到RotatE:关系建模的演进主线
嵌入模型这十年来的演进主线,本质上是在回答一个问题:一种关系用“一次平移”来建模够不够?不够的话怎么改进?
最初的思路只用一种平移建模所有关系,简单高效,但处理对称关系、传递关系时就显得吃力。后来陆续出现了很多改进思路:有的把实体投影到关系特定的空间里再做平移(比如TransR);有的把实体和关系建模成复数向量,用旋转来表示关系(比如RotatE);有的直接用双线性函数建模实体对的关联强度(比如DistMult及其变体)。我整理了常见几种的建模方式与适用场景:
| 模型 | 基本思路 | 擅长的关系类型 | 主要局限 |
|---|---|---|---|
| TransE | h + r ≈ t | 一对一、传递关系 | 对称关系建模差 |
| TransR | 先投影再平移,h与t在关系特定空间对齐 | 多样化关系 | 参数多,训练开销大 |
| DistMult | 双线性打分 | 对称关系 | 反对称关系建模差 |
| ComplEx | 复数向量上的双线性打分 | 对称与反对称 | 可解释性弱 |
| RotatE | 复数空间旋转变换 | 多种关系模式 | 对复合关系仍吃力 |
这个演进过程的启发是:没有免费的午餐。关系建模能力越强的模型,参数和训练难度也越高。实际项目中,我会建议先用最简单的做一轮baseline,再根据关系类型的分布决定要不要换更强的模型,一上来就上复杂模型,往往只是增加机器负担,效果提升却很有限。
4.3 路径排序与图神经网络:利用多跳结构做推理
嵌入模型解决的是“单跳三元组”的建模问题,但知识图谱里很多推理是依赖多跳结构的。两个实体虽然没有直接关系,但它们之间有一条由多个关系组成的路径,这条路径本身就携带强信号。利用这个信号的早期代表,是路径排序算法(PRA):它枚举两个实体之间的多条路径,把这些路径当作特征,训练一个分类器判断“这两个实体之间是否有某种关系”。它的好处是特征有可解释性,坏处是路径枚举在大图上开销极高。
近几年的主流则是图神经网络。GNN的思路是让节点沿着图的边反复聚合邻居信息,经过多层传播后,每个节点的向量就包含了局部图结构的信息,再用来预测两个节点之间是否存在缺失的边。GNN在端到端学习和结构信息利用上的优势很明显,但它对图的规模、邻居的采样策略都很敏感,工程实现比嵌入模型复杂不少。
我个人的体会是:如果数据规模可控、路径模式相对固定,PRA的性价比很高;如果数据规模大、结构复杂,GNN的上限更高,但调试成本也更高。这不是一个“必须二选一”的问题,实际项目里完全可以把嵌入模型的向量当作图神经网络的初始特征来用,两边并不冲突。
4.4 一个需要反复强调的误区:统计推理不是逻辑推理
最后必须把话说清楚:统计推理得到的“结论”,本质上是概率估计,不是逻辑必然。当年我在一个项目里用嵌入模型做链接预测,模型给出了一个高置信度的结果,我差点直接信了,直到对比数据发现那两个实体之间的关系在现实中根本不存在。模型只是从相似结构里“猜”出来的,没有经过任何逻辑校验。
所以在使用统计推理时,请务必建立一道“概率结果必须经过校验”的流程。你可以设置置信度阈值,也可以结合符号规则校验,甚至让领域专家抽检。统计推理擅长的是压缩候选空间,而不是替代人类做决策。谁要是把它的输出直接当事实用,迟早会在某个想不到的地方付出代价。
5. 知识推理能落地在哪:我见过的四个典型场景
5.1 链接预测与知识图谱补全:推理最直接的主场
链接预测是知识推理最基础也最直接的应用,任务就是给定头实体和关系,预测最可能的尾实体;或者给定尾实体和关系,反推最可能的头实体。它直接服务于知识图谱补全:把预测出的、置信度足够高的三元组经人工确认后写回图谱。
一个典型流程是:先训练嵌入模型,然后对图谱里的每一个实体对计算它们之间缺失关系的得分,按分值从高到低排序,抽取出Top-K的候选,交给业务人员在一个小工具里快速确认。这个流程我跑过不止一次,实际效率比纯人工去发现缺失关系高了不下一两个数量级。但要提醒的是:Top-K里大部分候选仍然是错的,特别是对于低频实体,预测质量会明显下降,所以在业务侧设置合理的人机协作界面是补全流程落地的前提。
5.2 问答系统里的推理:用户问一个拐弯的问题
问答系统是知识推理的另一个核心应用场。用户的问题很少直接对应图谱里的现成三元组,更多时候是绕了一两个弯的复杂问题。比如“A公司在B市的合作方有哪些?”要回答这个问题,系统得先定位A公司,再找到B市这个限定条件,再找到“合作方”这条关系,这些步骤天然就是多跳推理。
我见过的简化做法是两步走:第一步,用实体链接把问题里的实体和关系映射到图谱节点;第二步,用符号规则或嵌入模型共同推理出候选答案。符号规则负责严格约束逻辑链路,嵌入模型负责在链路断裂时提供候选跳跃,两套机制配合,答案的召回路比只用其中一种宽不少。在QA场景里,我尤其推荐优先把规则打磨好,因为用户对问答的确定性要求很高,纯粹的概率答案会明显降低信任度。
5.3 推荐系统里的隐式关联挖掘:从图谱多跳到用户兴趣
知识图谱辅助推荐这几年已经不新鲜,核心价值在于它能把用户和物品之间的稀疏交互,通过图谱中的多跳路径“打通”。举个例子,用户A买过某品牌相机,推荐系统如果能从图谱上推出“该品牌相机的配件也适合这位用户的机型”,就能在不增加历史交互数据的情况下拓宽推荐范围。
落地时通常的做法是:把知识图谱向量化,和用户行为序列一起输入模型,让图谱信息作为用户兴趣的扩展特征。这里和纯推荐模型的核心区别,就在于推理能力体现在“多跳关联”上——传统的协同过滤只能看用户与物品的直接交互,基于知识推理的推荐则能看到交互之间的间接连接。
5.4 异常检测与知识校验:推理和事实对不上,就是信号
大多数人聊推理都在想着“补全”,但推理也能反过来用——用于“找茬”。如果一条推理链推出的结论与客观事实明显矛盾,那说明原始数据里大概率存在错误。这在工业数据治理里叫一致性校验,也是符号推理最成熟的应用方向之一。
我在一个医疗数据知识图谱项目里实践过:定义了几十条基于专业规则的约束,规则一旦被违反,就说明数据录入出现了问题。这套规则跑在几百万条三元组上,能定位出数百条异常记录,准确率相当高。这种场景下符号推理简直是最优解,每条异常都能给出完整的推理链,审核人员不需要猜错在哪里,拿着推理链直接去看对应数据就行。
6. 当前公认的四个瓶颈,以及接下来值得关注的方向
6.1 稀疏长尾与可解释性:两个绕不开的老问题
统计推理尽管效果好,老问题却不少。稀疏长尾问题尤其头疼——嵌入模型的训练依赖足够多的正样本,低频的实体和关系得不到充分学习,预测质量堪忧,而这些长尾恰恰是知识图谱里数据最多的地方。可解释性则是另一个硬骨头,向量运算得出的结果很难说清楚“为什么是它”。在金融、医疗这类强监管领域,不能解释的推理结论几乎没法用,这个问题目前还没有特别好的解法。
符号推理虽然没有可解释性问题,却卡在规则工程的高成本和稀疏规则的覆盖力上。两派各有半瓶水,这也是混合推理这几年越来越受关注的原因。
6.2 动态图谱里的推理:世界在变,推理也得能变
还有一个常被忽视的挑战是动态性。真实世界的知识是实时变化的,新的新闻事件、新的合作关系不断出现,老的关系也会过时。静态图谱上的推理结果,很可能在新数据到来后就变得不再成立。动态知识图谱推理的难点在于:既要利用历史结构推断未来趋势,又要对突发变化保持敏感,这个平衡到今天也没有被完美解决。
我见过一个折中方案:把时间戳加入三元组,把推理任务变成时序预测问题,用图时序网络做建模。这种方式对周期性变化的数据效果不错,但面对真正的“突发变化”依然有点束手无策。对大多数人来说,现阶段更务实的做法是定期重训模型,并设计增量更新管道。
6.3 与大模型的结合:一条值得追踪的新主线
最近一批大模型展示了强大的语言理解和生成能力,但它们在严格知识推理上仍然经常翻车,常常一本正经地给出错误结论。反过来看,知识图谱能提供精确的事实和可验证的推理链,正好补上大模型的短板。两者结合的方向,我认为是当下最值得追踪的主线之一。
常见做法有这么几种:一是把图谱结构转成文本提示,让大模型回答结构化的推理问题,这种方法快速但结果不稳定;二是用检索增强的方式,先从图谱里检索出相关子图,再交给大模型加工,可控性更强;三是把大模型当作规划器,让它生成推理步骤,再由图谱执行和校验。这些方向都还处于快速演进中,但我建议在日常项目中主动引入,并建立自己的评估集,别等它完全成熟才动手。
6.4 综述(一)停在哪儿,系列后续往哪儿走
按综述的定位,这篇只做“地图级”的梳理:从世界假设出发,把符号推理和统计推理两条主线的思想、方法、适用场景和局限讲清楚,再用四个应用场景说明知识推理到底能干什么,最后点出几个公认的瓶颈。没有涉及到的大量细节,比如具体框架怎么选、嵌入算法每一步怎么调、规则引擎在大图上的性能怎么优化、混合推理系统的整体架构,都属于“地图上该有的路,但还没修到那里”的部分。
我自己做知识图谱项目这么长时间,最大的体会是:知识推理不是一个“装上就能用”的功能,它更像一套需要根据数据状况、业务诉求和团队能力持续迭代的能力体系。很多团队刚接触时满怀期待,测试两轮发现效果没想象中好就搁置了,这很可惜。更合理的路径是先梳理出业务里最典型的推理需求,选择一两个小场景快速落地,用最小闭环建立数据和推理之间的信任,再逐步扩大推理覆盖范围。
我也计划按这个逻辑往下写系列文章:下一篇会重点讲符号推理的工程落地,包括规则语言的语法细节、推理引擎的选型对比、规则调优的实战案例;后面再依次展开嵌入模型的数学原理与调参经验、混合推理系统的架构设计,以及与大模型结合的最新实践。如果你在某个方向上有自己的实际问题,欢迎带着场景来交流,毕竟推理这种东西,聊十个抽象概念不如讨论一个真实数据问题来得透彻。