规则能"训"出来吗?CMU 那篇把逻辑推理接上梯度的论文

  • 关联论文:1702.08367

想象你在维护一张关系网:知道"张三和李四是同事""李四是研究生",现在要回答"张三是干什么的"。人类会顺手补出一条规则——"同事且其中一人是研究生 ⇒ 同组"。传统做法要么靠人工写规则,要么用向量硬算。前者要专家天天维护,后者算得准却给不出理由。

这篇 2017 年 CMU 的论文(Fan Yang、Zhilin Yang、William W. Cohen,NIPS 2017)想做的是:让机器用梯度下降,把"该写几条规则、每条规则有几个条件"这件事也一起学出来。

为什么重要

知识图谱补全有两条老路。嵌入派(TransE、DistMult)把实体和关系压成向量,打分很准,但答案是黑箱——你拿到一堆数字,推不出"A 因为 X 属性所以住在 B"。规则派(AMIE 那类归纳逻辑编程)能给出人话规则,但搜索是离散的:靠置信度和覆盖度一轮轮试,在大数据和噪声上又慢又容易陷坑。

Neural LP 的分量在于同时吃到两头的红利——梯度优化的效率,加上显式规则的解释力。而且它产出的 rules.txt 是可以直接阅读的文本文件,不是事后编的故事。放到风控、医疗、合规这类必须能审计的场景,这个差别是选型的分水岭。

核心机制

底层是 TensorLog:一阶逻辑里 p(x) 本来是个指示函数,把实体写成对角矩阵、谓词写成概率矩阵,一个原子就变成一次矩阵乘;矩阵乘天然就是逻辑合取(概率相乘)。于是一整条规则的推理变成一串矩阵乘法,全程可微。

难点在结构。"规则该有几个变量"是个离散选择,人手写模板就只能穷举几种。本文让一个神经控制器在推理时动态决策:继续追加一个原子,还是收尾执行规则。梯度从最终预测一路回传,穿过控制器做的每一步动作,同时更新规则参数和动作分布。结构不是设计死的,是长出来的。

证据边界

得分要看清楚口径。评测指标是 MRR 和 Hits@10(filtered rankings),不是常被误记的 AUC-PR;数据集是 WN18 / FB15K / FB15KSelected,不含 FB237。WN18 上 0.94 / 94.5 确为当时最好;FB15K 上是 0.76 / 83.7,低于 Node+LinkFeat 的 0.82 / 87.0,Implicit ReasoNets 的 Hits@10 更高达 92.7——论文自己的措辞就是"接近最好水平",不是全面超越。WikiMovies 知识库问答 94.6,为最好。

还有一个被低估的强项:在训练/测试实体不相交的归纳设定下,它 Hits@10 保持 94.49 / 73.28 / 27.97,而 TransE 掉到 0.01 / 0.48 / 0.53——新实体冷启动场景,规则派几乎独活。

工程局限

仓库是考古对象。 官方开源、MIT 许可,但 README 要求 Python 2.7 + TensorFlow 1.0.1,最后一次提交停在 2019 年。别指望照着 README 就能跑,先用 family 数据集冒烟(官方称约 8 分钟训完)当迁移判据,建议直接改写 PyTorch 并把矩阵逻辑换成 batched einsum。

规则长度 T=2 是硬设定。 知识库补全实验全部取 T=2,只有在 16×16 网格这类合成任务上才验证到长度 6–8 的规则。想学多跳长链会直接落空,更糟的是它可能用一条"看着合理、实则噪声"的短规则去拟合长链查询。

导出的规则要设置信度闸门。 论文样例里 marriage_location(B,A) ← nationality(B,A) 置信度只有 0.35、film_edited_by 那条 0.20,语义上基本是垃圾。直接灌进线上推理会引入一批"有解释、实则随机"的规则。做法是:阈值以上进生产候选,其余归档为探索产物,原始文本留档供 diff 和 code review。

AND 建立在独立性假设上。 矩阵逐元素乘等于假设两个原子条件独立,遇到"是父亲"且"是男性"这类强相关谓词,概率会被系统性带偏。

最后一句实话:这是 2017 年的工作,性能早被图神经网络和 rule-augmented 模型甩开。今天读它的价值在方法论范式——把离散结构决策交给可微控制器,这个思路如今在程序合成、Agent 工具编排、查询规划里都被复用。


三个标题变体

  1. 逻辑规则也能用梯度下降"训"出来?这篇 CMU 论文把可解释性接上了 GPU
  2. 让神经网络学出人能读懂的推理链:Neural LP 与它的真实边界
  3. 知识图谱补全的黑箱困局:一条可读规则 vs 一个高分向量

小红书卡片文案

知识图谱为什么"算得出、说不清"?

Embedding 类方法(TransE、DistMult)把实体压成向量,补全准确率很高,但你永远拿不到一句"A 因为 X 属性所以住在 B"这样的理由。

Neural LP(CMU,NIPS 2017)换了个思路:用 TensorLog 把一阶逻辑推理编译成可微的矩阵运算,再让一个神经控制器在推理过程中动态决定"这条规则该有几个条件"——结构不是人写死的模板,是模型自己长出来的。训练完直接吐出一个 rules.txt,里面全是人能读、能 diff、能进 code review 的逻辑规则。

几个必须知道的诚实数字: ✅ WN18 上 MRR 0.94 / Hits@10 94.5,当年最好 ⚠️ FB15K 上 0.76 / 83.7,其实低于 Node+LinkFeat(0.82/87.0)和 Implicit ReasoNets(Hits@10 92.7) ✅ 指标是 MRR + Hits@10,不是常被写错的 AUC-PR ✅ 真正亮眼的是冷启动:训练/测试实体不相交时,TransE 掉到 0.01,规则派还有 94.49

工程上要泼点冷水:官方仓库依赖 Python 2.7 + TF 1.0.1,最后提交停在 2019 年,复现前先做框架迁移;知识库补全实验规则长度上限 T=2,多跳长链学不出来;导出的规则里混着置信度 0.20 的噪声,上线必须设阈值闸门。

选型一句话:需要审计、解释、合规 → 规则派;只需要打分、召回 → 嵌入派。别只按榜单挑。

AI #知识图谱 #神经符号 #可解释AI #机器学习 #NeurIPS