Neural Logic Programming:把一阶逻辑规则的"结构"也交给梯度下降

  • 关联论文:1702.08367
  • 作者:flyP
  • 更新:2026-10-22

一句话结论

这篇(NIPS 2017)做的是把知识库补全里的"规则归纳"从离散结构搜索改造成端到端可微学习:在 TensorLog 提供的可微逻辑推理之上,用一个 neural controller 递归地学习一阶规则的参数和结构本身,在 WN18 上取得当时的最好成绩、在 WikiMovies 问答上取得最好准确率(Freebase/FB15K 上是接近而非超过最好水平),并且能从训练好的模型里直接读出人类可读的逻辑规则——这是它比嵌入类方法更值钱的地方。

解决什么真问题

先说清楚问题空间。知识库补全(knowledge base completion)的经典设定是:给定一批三元组事实(如 (页面,A,B)),一部分事实缺失;给定查询 (A, ?, B) 或 (A, 关系, ?),要补出缺失实体。两条主流技术路线各有硬伤:

嵌入路线(TransE 及后续):把实体和关系映射成向量,用距离/打分函数拟合三元组。缺点是完全不可解释——你得到一堆向量,却得不到"因为 A 的 X 属性、B 的 Y 属性,所以 A 住在 B"这样的规则。对于知识图谱这种本质上是用规则表达的知识体系,这是个本质缺陷;而且这类方法假设"补全依赖嵌入的参数化相似性",而真实 KG 里的很多模式恰恰是可枚举的逻辑结构。

规则归纳路线(ILP,归纳逻辑编程):直接从数据里学出形如 规则1(X,Y) ∧ 规则2(Y,Z) ⇒ 谓词(X,Z) 的逻辑规则。优点是可解释;缺点是传统 ILP 基于置信度/覆盖度做离散搜索(如 AMIE),在噪声数据和大规模上既慢又容易陷局部最优,更致命的是它无法端到端优化。

Neural LP 要同时吃到两头的红利:像嵌入方法一样用梯度下降优化,像 ILP 一样产出显式规则。

核心方法

方法建立在 TensorLog(论文称为 "a recently-developed differentiable logic",把一阶逻辑推理编译成一串可微的矩阵运算)之上。三层结构:

第一层:TensorLog 的可微推理。 一阶逻辑里的谓词 p(x) 是一个指示函数。把每个实体的 one-hot 表示为对角矩阵 D_x,把谓词 p 表示为矩阵 M_p(第 i 行是实体 i 满足谓词 p 的概率),则原子 p(x) 的矩阵表示就是 D_x · M_p。变量统一表示为一个全 1 矩阵 J(这样 p(X) 就是 J · M_p,与具体实体无关,可以被后续规则引用)。矩阵乘法天然实现了逻辑合取(AND)——p(X) ∧ q(Y) 就是 J M_p ∩ J M_q(逐元素乘,即概率乘积,对应 AND 的独立性假设)。这样,一整条规则的推理就变成了矩阵乘法链,全程可微。

第二层:结构学习的难点是"有几个变量"是离散的。 这正是本文的创新点。Neural LP 不预先指定规则模板里有多少个变量、变量之间是什么关系,而是引入一个神经控制器(neural controller),在推理时动态决定下一步做什么操作——是继续追加一个原子(复制/扩展变量),还是执行一条已知规则来收尾(终止)。这就是为什么论文说它的贡献是"不仅学参数还学结构":结构不再是人手写死的模板,而是控制器在一段有限的"程序"里逐步长出来的。

第三层:伪代码化的训练循环。

训练 Neural LP:
  输入: 知识库三元组 (e1, r, e2), 目标查询
  # 控制器状态: 已构造的原子序列, 若干中间变量槽位
  loop:
    # 控制器策略 π 决定动作
    action ~ π(状态)          # {复制变量 | 追加原子 | 终止并应用规则}
    if action == 终止:
        用当前已学规则的参数 + 控制器分配的规则权重, 组合出新规则 r_new
        对 r_new 做前向推理, 得到预测概率
        break
  损失 = 负对数似然(预测三元组)  # 用训练三元组作为正例
  反向传播: 同时更新 规则参数(M_p) + 控制器策略 + 常量偏置

关键点在于规则参数和控制器是同一个网络里联合优化的,中间没有不可微的断点。梯度从最终预测一路回传,穿过"控制器做的每个动作",更新动作分布。

关键实验与数据

原文报告:方法在多个知识库基准上超过此前工作,包括 Freebase 和 WikiMovies。

关于更细的数字(本轮已回查 arXiv:1702.08367v3 正文 HTML,以下为逐表 verbatim):

  • ✅ 知识库补全(Table 4,filtered rankings 口径,MRR / Hits@10):WN18 — Neural LP 0.94 / 94.5(当时最好;DistMult 0.83 / 94.2,TransE 0.38 / 90.9);FB15K — Neural LP 0.76 / 83.7,但 Node+LinkFeat 为 0.82 / 87.0、Implicit ReasoNets 的 Hits@10 为 92.7,均高于本方法;FB15KSelected — Neural LP 0.24 / 36.2,DistMult 0.25 / 40.8、Node+LinkFeat 0.23 / 34.7。
  • ✅ WikiMovies 知识库问答(Table 8,Accuracy):Neural LP 94.6(当时最好),Key-Value Memory Network 93.9,QA system 93.5,Memory Network 78.5。
  • ⚠️ 指标口径更正:论文的评测指标是 MRR 与 Hits@10(filtered rankings),不是 AUC-PR。原文解读"指标通常为 filtered AUC-PR 与 MRR"属误记,本轮已改。
  • ⚠️ 数据集切片更正:知识库补全用的是 WN18 / FB15K / FB15KSelected,不是 FB237;FB15KSelected 是从 FB15K 移除近重复与逆关系构造的(原文引用 [25])。Table 3 统计:WN18 facts 106,088 / train 35,354 / test 5,000 / 18 关系 / 40,943 实体;FB15K 362,538 / 120,604 / 59,071 / 1,345 / 14,951;FB15KSelected 204,087 / 68,028 / 20,466 / 237 / 14,541。训练文件按 facts : train = 3 : 1 拆分,并为每个关系补上逆关系。
  • 【Jay 2026-10-22 新增】原文原话是 "Neural LP gives state-of-the-art results on WN18, and results that are close to the state-of-the-art on FB15K" —— 因此"在 Freebase 上超过此前所有方法"的说法过强,已在一句话结论中改写。
  • ⚠️ 【Jay 2026-10-22 已核,见上】数据集为 WN18 / FB15K / FB15KSelected(非 FB237);WikiMovies 用于部分自然语言查询的 KB 问答,196,453 条训练样例 / 10,000 条测试样例,知识库 43,230 个电影实体、9 个关系;问题长度限制为 6 个词,词表只保留 top 100 高频词。
  • 可核实的工程侧事实(本轮已 fetch 官方 GitHub README 核实):官方实现为 github.com/fanyangxyz/Neural-LP,MIT 许可,要求环境为 Python 2.7 / Numpy / Tensorflow 1.0.1;训练入口 python src/main.py --datadir=datasets/family --exps_dir=exps/ --exp_name=demo,family 数据集约 8 分钟训完,结果目录下的 rules.txt 就是学出来的规则文件(人类可读);评测走 eval/collect_all_facts.sh + get_truths.py + evaluate.py,采用 TransE 文献中的 filtered ranks 口径。

亮点与局限

亮点:

  1. 可解释性是结构性的,不是事后解释。 rules.txt 直接输出逻辑规则文本,这在 KG 领域是刚需(要让领域专家审查、要审计推理链),而嵌入方法给不了。
  2. 联合学参数 + 学结构,避免了传统 ILP 手工设计规则模板的限制。
  3. 端到端可微,能利用 GPU 与梯度优化,比离散搜索在规模上有优势。
  4. 官方开源且 MIT 许可,代码结构清晰(datasets / eval / src 三目录)。

局限(明文负面发现):

  1. 代码已实质废弃,工程可用性低。 官方 README 明写依赖 Python 2.7 与 Tensorflow 1.0.1——Python 2 已于 2020 年 EOL,TF 1.0.1 是 2017 年的版本。这不是一个"照着做就能跑"的仓库,任何复现都需要先做依赖迁移。这是本轮核实到的最硬的负面事实。
  2. "结构学习"的表达力有明确上限。 【Jay 2026-10-22 已核,原文此处为无据推断】论文中知识库补全实验的最大规则长度 T = 2(全部数据集);统计关系学习(UMLS / Kinship)用 T = 2 与 T = 3;只有在专门的合成任务 Grid Path Finding 上,论文才报告能准确学到长度 6–8 的规则,且比 ISG 更鲁棒。换言之,多跳长链推理确实覆盖不到——但这是设定出来的上限,不是架构的偶然缺陷,改 T 即可放宽,代价是搜索空间膨胀。
  3. TensorLog 的 AND 语义建立在独立性假设上。 矩阵逐元素乘对应"给定 X 和 Y 下 p(X) 与 q(Y) 独立",当两个原子高度相关时(如"是父亲"且"是男性"),概率会被系统性高估或低估。
  4. 性能相对后续方法是过时的。 这篇发表于 2017 年;此后链接预测被图神经网络、rule+embedding 混合方法(如 ComplEx、RotateE、NBFNet 乃至后来的 rule-augmented GNN)大幅超越。今天读它的价值主要是方法论范式(可微结构学习 + 规则可读),而非刷榜。
  5. 规则往往不如预期的"干净"。 虽然模型能输出可读规则,但实际学到的规则常常是数据集特有模式(含噪),其语义可解释性需人工逐条核验。

对工程落地的启发

  • KG 增强方案的选型分水岭是"要不要能解释"。 若知识图谱要进入风控/医疗/合规等需要审计的场景,Neural LP 这类"规则可导出"路线的价值高于分数更高的纯嵌入方法;推荐场景则相反。
  • "可微 + 结构化搜索"是通用范式。 把离散的结构决策(写不写规则、规则多长、调用哪个工具)交给一个可微的控制器,让梯度流过去——这个思路不止适用于 KG,在程序合成、Agent 的工具调用编排、查询规划里都在复用同一模式。
  • 规则导出是接口设计问题。 真正落地的标志不是精度,而是"训练完能产出一份人类/系统能消费的中间表示"。rules.txt 这种朴素文本导出,比任何可视化都更有用——它能被 diff、能进 code review、能被领域专家改。
  • 复现前先评估依赖迁移成本。 Python 2.7 + TF 1.0.1 的组合意味着复现者要先做一轮框架迁移(建议直接改写为 PyTorch 并把矩阵逻辑改成 batched einsum),迁移量往往大于重写逻辑本身。启动前按"读代码 2 天 + 重写 1 周"估算。
  • AND 的独立性假设要在业务数据上验证。 若你的 KG 谓词强相关(常见于属性高度冗余的企业图谱),矩阵乘法的概率复合需要考虑改用 t-conorm 之类的 n 元逻辑算子,否则置信度不可信。

与同方向工作的关系

  • TensorLog:直接上游,本文的推理层完全依赖它的"一阶逻辑 → 矩阵运算"编译。TensorLog 本身是概率图模型视角下的可微逻辑,属于 tensorized graphical models 谱系。
  • Neural Theorem Prover(NTP, Rocktäschel et al. 2016):同期最接近的对照。NTP 把 Prolog 的 backward chaining 做成可微的,在预先给定结构的规则模板里学参数;Neural LP 的增量正是"用控制器把结构本身也学出来"。二者共同确立了"神经符号 KB 推理"这条线。
  • AMIE(Galarón et al.):规则挖掘路线的重要对手。AMIE 用关系代数扩展(如 friends(X,Y) ∧ student(Y) ⇒ ...)做规则挖掘,规则可读性强但搜索离散;Neural LP 用梯度替代搜索,在同一条赛道上更可扩展但规则表达范围受架构约束。
  • 后续神经符号推理:DeepProbLog(Manhaeve et al.)、Lambda Calculus / Neural Theorem Provers 谱系把概率逻辑编程整体可微化;以及后来的 rule-augmented GNN,把规则与 message passing 结合。今天要读的最贴近"端到端"的后继者是 NBFNet 级别的规则+GNN 混合模型,但它们牺牲了本文最核心的规则可读性。
  • 与嵌入路线的关系:TransE/DistMult/ComplEx/RotatE 是纯嵌入;Neural LP 代表"规则派"。本文官方评测脚本复用了 TransE 的 filtered ranks 口径,说明两条路线在同一评测协议下可比——这也是本文实验说服力的来源。

适合谁读

  • 做知识图谱补全、且明确需要可解释规则(而非只要分数)的算法工程师;
  • 对"可微逻辑 / 神经符号"这条技术线感兴趣,想看 TensorLog 如何落成可训练系统的人;
  • 需要在"规则可读"和"embedding 高分"之间做架构选型决策的技术负责人;
  • 关注程序合成、Agent 工具编排等"把离散结构交给可微控制器"这类范式迁移的读者。

待核查项(本轮未完成核验,集中列出)

  • ⚠️ 全部量化结果未核验:Freebase / WikiMovies 上的 AUC-PR、MRR、Hits@10 具体数值,本轮受"不下载 PDF"边界限制未从正文表格取得。这是本篇解读最大的证据缺口,读者若需引用数字请直接回查 NeurIPS proceedings 第 2319–2328 页。
  • ⚠️ 数据集切片(FB15k/FB237、WikiMovies 10k/100k)的确切选择未从原文核实。
  • ⚠️ 控制器可生成规则的表达能力边界(最大规则长度、是否支持常量、是否支持否定)未从原文核实;本文此处描述基于方法层面的合理推断。
  • ⚠️ TensorLog 的"独立性假设导致概率复合偏差"是本解读基于矩阵语义的分析,原文未以此措辞表述。
  • ✅ 已核实:官方仓库地址、MIT 许可、依赖版本(Python 2.7 / TF 1.0.1)、训练与评测命令、rules.txt 规则导出、filtered ranks 评测口径、NIPS 2017 录用。

工程落地与核查(Jay)

本节为二读者审校记录,与上方原文主体分隔。核查基准:arXiv:1702.08367v3(v3 提交 2017-11-27)、arXiv HTML 全文(https://arxiv.org/html/1702.08367v3)、官方仓库 https://github.com/fanyangxyz/Neural-LP(MIT,226 star,最后一次 push 2019-02-12)。

〇、四维评分

维度 分 依据
机制 4/5 "参数 + 结构联合可微"确实是范式级贡献;TensorLog 的矩阵语义与控制器动作空间讲得清楚
工程 3/5 落地建议有方向,但把仓库的依赖废弃程度说轻了(本轮补:2019-02 后无提交);规则导出的"可用性"缺清洗方案
可复现 3/5 代码在、MIT 在,但 Python 2.7 + TF 1.0.1 需整轮迁移;评测依赖 TransE 的 filtered ranks 口径脚本
可验证 4/5 原文数字全部空缺;本轮已回填 Table 4 / Table 8 / Table 1-2 / Table 3 / Table 5 的 verbatim 数值,并纠正了指标与数据集两处硬信息

综合:4/5(原解读事实缺口较多,事实层面已全部回填;口径更正 5 处)。

一、事实核查:本轮已核实的 verbatim 数据

内容 数值 / 事实 出处
录用与作者 NIPS 2017;Fan Yang、Zhilin Yang、William W. Cohen(Carnegie Mellon University) abs 页 / 论文页 affiliation
知识库补全 WN18 Neural LP MRR 0.94 / Hits@10 94.5(当时最好);DistMult 0.83 / 94.2;TransE 0.38 / 90.9 Table 4
知识库补全 FB15K Neural LP 0.76 / 83.7;Node+LinkFeat 0.82 / 87.0、Implicit ReasoNets Hits@10 92.7(均更高) Table 4
知识库补全 FB15KSelected Neural LP 0.24 / 36.2;DistMult 0.25 / 40.8;Node+LinkFeat 0.23 / 34.7 Table 4
WikiMovies KB 问答 Neural LP 94.6;Key-Value Memory Network 93.9;QA system 93.5;Memory Network 78.5 Table 8
数据集统计 WN18 106,088 / 35,354 / 5,000,18 关系,40,943 实体;FB15K 362,538 / 120,604 / 59,071,1,345 关系,14,951 实体;FB15KSelected 204,087 / 68,028 / 20,466,237 关系,14,541 实体(facts/train/test) Table 3
统计关系学习 UMLS 5,960 数据 / 46 关系 / 135 实体,Kinship 9,587 / 25 / 104;facts:train:test = 6:2:1;Hits@10:ISG 43.5 vs Neural LP(T=2) 92.0(UMLS)、ISG 59.2 vs 90.2(Kinship) Table 1 / Table 2
长规则合成任务 16×16 网格方向推理,Neural LP 可准确学到长度 6–8 的规则,比 ISG 更鲁棒 §4.2 / Fig 3
归纳式设定(train/test 实体不相交)Hits@10 Neural LP 94.49 / 73.28 / 27.97(WN18/FB15K/FB15KSelected)vs TransE 0.01 / 0.48 / 0.53 Table 6
实现细节 最大规则长度 T = 2;query embedding 维度 128、随机初始化的单位范数向量;FB15K 上只用与 query 共享实体的 top 128 关系子集;facts:train = 3:1 并补逆关系 §4.3
官方仓库 MIT;README 依赖 Python 2.7 / Numpy / Tensorflow 1.0.1;family 数据集约 8 分钟训完;exps/demo/rules.txt 即学到的规则文件;评测脚本 eval/collect_all_facts.sh → eval/get_truths.py → eval/evaluate.py,采用 TransE 文献的 filtered ranks 口径 GitHub README(已 fetch)
仓库状态 最后一次 push 2019-02-12(即代码已约 7 年未更新),stars 226,未归档 GitHub API

学到的规则样例(Table 5,FB15KSelected,数字为按该关系最高置信度归一化后的置信度)

1.00  partially_contains(C,A) ← contains(B,A) ∧ contains(B,C)
0.45  partially_contains(C,A) ← contains(A,B) ∧ contains(B,C)
0.35  partially_contains(C,A) ← contains(C,B) ∧ contains(B,A)
1.00  marriage_location(C,A) ← nationality(C,B) ∧ contains(B,A)
0.35  marriage_location(B,A) ← nationality(B,A)
0.24  marriage_location(C,A) ← place_lived(C,B) ∧ contains(B,A)
1.00  film_edited_by(B,A)   ← nominated_for(A,B)
0.20  film_edited_by(C,A)   ← award_nominee(B,A) ∧ nominated_for(B,C)

二、需更正的 5 处(已就地标注)

  • C1(硬信息)指标写错:原文"指标通常为 filtered AUC-PR 与 MRR"→ 论文实际用 MRR 与 Hits@10(filtered rankings)。
  • C2(硬信息)数据集写错:原文"Freebase 通常取 FB15k/FB237"→ 论文用 WN18 / FB15K / FB15KSelected,未使用 FB237。
  • C3(结论过强):一句话结论"在 Freebase 与 WikiMovies 上超过此前所有方法"→ 论文原话是 WN18 上 SOTA、FB15K 上"接近"最好水平(Node+LinkFeat 与 Implicit ReasoNets 均更高);WikiMovies 上 94.6 确为最好。
  • C4(无据推断):原文"规则长度、变量数受架构约束"属推断 → 已替换为论文实测设定(T=2 / T=2-3 / 6-8 三档)。
  • C5(缺信息):补齐作者机构(CMU)、仓库最后更新时间(2019-02-12)、数据集统计与实现细节。

三、工程落地的 6 个坑(现象 / 影响 / 修复)

坑 1 · 依赖已 EOL,仓库是"考古对象"而非起点 - 现象:README 要求 Python 2.7 + Tensorflow 1.0.1,仓库最后 push 停在 2019-02;TensorFlow 1.0.1 与现代 CUDA/驱动基本不可用。 - 影响:按 README 直接 pip install 会失败;更隐蔽的是 TF 1.x 的 tf.contrib/会话式 API 与现在的 2.x 写法差异巨大,容易在"能跑"之后才发现逻辑也要重写。 - 修复:先做 family 数据集冒烟(README 自称约 8 分钟训完,是最好的最小闭环验证单元):把它作为"迁移是否成功"的唯一判据;迁移路线建议 TF1 → PyTorch,矩阵逻辑改成 batched einsum,而不是把 TF1 强行升到 2.x(后者会引入 estimator/keras 迁移链的额外债务)。

坑 2 · 评测口径与数字对不上,会误判复现失败 - 现象:官方评测脚本复用 TransE 的 filtered ranks 口径(collect_all_facts.sh → get_truths.py → evaluate.py);而论文正文同时报 MRR 与 Hits@10 与 Table 4 的其他方法对照。 - 影响:若自行换成 AUC-PR 或不构造过滤集,得到的数字与论文 Table 4 不可比,容易得出"复现不出来"的错误结论并开始乱调超参。 - 修复:把评测脚本当冻结资产(连同 facts/ truths 生成逻辑一起版本化);先在 family 数据集上确认脚本自洽,再上 FB15K。

坑 3 · 数据构造细节决定指标,漏一步就漂 - 现象:训练文件要按 facts : train = 3 : 1 拆开、并为每个关系补逆关系;FB15K 上还要求测试实体在 facts 中至少出现一次、FB15KSelected 上要求 train 实体不被 facts 直接连接。 - 影响:这些约束是论文指标可比性的前提,自己重建数据时通常不会做,结果会系统性偏低且难以定位原因。 - 修复:数据准备脚本与论文规则一一对应并写进 README;每次换切片都要重跑全套基线(TransE / DistMult)作为标尺。

坑 4 · 规则长度 T=2 是硬设定,多跳推理覆盖不到 - 现象:知识库补全实验 T = 2,统计关系学习 T = 2/3;只有在 16×16 网格的合成任务上才验证到 6–8 长度规则。 - 影响:指望它学出"多跳路径拼接"的长规则会直接落空;更糟的是它可能用一条看似合理但实际是噪声的短规则去拟合长链查询。 - 修复:业务侧的链式需求先量化"需要的跳数",再决定 T;评测时单独构造跳数分层测试集,观察性能随跳数的衰减曲线。

坑 5 · 导出的规则里混着噪声规则,必须做置信度闸门 - 现象:Table 5 的样例里,置信度 0.24、0.20 的规则(marriage_location(B,A) ← nationality(B,A)、film_edited_by(C,A) ← award_nominee(B,A) ∧ nominated_for(B,C))在语义上基本是垃圾。 - 影响:直接把 rules.txt 灌进线上推理,会引入一批"看起来有解释、实则随机"的规则,且因为它们可读,审核者很难一眼看出问题。 - 修复:导出即分档——置信度 ≥ 阈值(建议按训练集里规则的分布定,如 top 10% 或 0.5 以上)才进生产候选;其余归档为"探索产物",并保留原始规则文本供 diff 与 code review。

坑 6 · "规则派 vs 嵌入派"的选择不能只看这一个榜单 - 现象:FB15K 上 Node+LinkFeat(MRR 0.82 / Hits@10 87.0)与 Implicit ReasoNets(Hits@10 92.7)都高于 Neural LP(0.76 / 83.7);论文的价值在于规则可读与归纳能力,而非刷榜。 - 影响:只按 SOTA 选型会在 KG 补全上选回嵌入方法,然后发现根本拿不出可审计的推理链——但如果当初按"能不能解释"选型,结论就完全不同。 - 修复:把选型标准显式化:需要审计/合规/解释 → 规则派;只需要打分/召回 → 嵌入派;并把归纳设定(Table 6:TransE 在 train/test 实体不相交时 Hits@10 掉到 0.01/0.48/0.53,Neural LP 保持 94.49/73.28/27.97)作为"新实体冷启动"场景的单独论据。

四、实际系统怎么用(可直接抄的做法)

  1. 规则导出当作一等接口来设计:rules.txt 这种朴素文本比任何可视化都有用——可 diff、可进 code review、可被领域专家手改。落地时把它规范成结构化格式(关系、头尾变量、置信度、来源训练集版本),并内置置信度闸门(坑 5)。
  2. 上线前的三道闸:① 规则条数与覆盖率(多少查询能被某条规则覆盖);② 置信度分档(≥阈值进生产);③ 领域专家抽检(按置信度分层抽样,而不是随机抽)。论文样例里 0.20/0.24 的规则足以说明"随机抽检会漏掉噪声集中在低分段"这一风险。
  3. 迁移路线(按周排期):读代码 2 天(TensorLog 的矩阵语义 + 控制器动作空间)→ family 数据集冒烟 1 天(README 自称 8 分钟)→ PyTorch 改写 1 周(einsum 化矩阵逻辑 + 数据构造规则对齐)→ 复现一个公开数字(WN18 上 MRR 0.94 或 family 上的规则集)→ 再谈业务数据。
  4. 新实体冷启动是规则派的杀手场景:归纳设定下嵌入模型几乎归零而逻辑规则仍能工作,业务上等价于"新实体没有足够邻域样本"的问题,值得单独立项。

五、证据边界(本轮仍未核实,请勿当作已验证)

  • ⚠️ 论文正文未给出 AUC-PR 类指标(该指标出现在其他 KG 论文里);引用时不要把 AUC-PR 归给本文。
  • ⚠️ 论文是否在某个实验里用过 FB237 或 WikiMovies 的其他切片,未从原文确认;本节只列 WN18 / FB15K / FB15KSelected。
  • ⚠️ 控制器的表达能力边界(最大规则长度、是否支持常量与否定)论文未成文说明;本文关于"贪心自底向上生长可能漏解"的判断仍属分析性推断,已在正文中标为修正后的表述。
  • ⚠️ 论文采用 arXiv perpetual non-exclusive license(论文本体),代码仓库为 MIT;引用与二次分发前请分别确认两者条款。
  • ⚠️ 仓库最后 push 2019-02,未归档但也未维护;若依赖其 README 中的路径与脚本结构,需自行核对与当前 fork 的差异。

六、引用建议

  • 可直接引用:第一节表格与规则样例(附 Table 编号)。
  • 必须带限定语:0.94 / 94.5 注明"WN18、filtered rankings、MRR/Hits@10";94.6 注明"WikiMovies 部分自然语言查询的 KB 问答 Accuracy";94.49 / 73.28 / 27.97 注明"归纳设定(train/test 实体不相交)"。
  • 不得再写:本文指标是 AUC-PR;本文使用 FB237;本文在 Freebase 上全面超过此前方法。