# 认知图：以谓词作为概念

把自然语言压成机械可操作的图。

* **输入**：自然语言。

* **输出**：unit——把世界里持久成立的事实和逻辑骨架结构化下来。

* **思考** 包括四种操作：**比较**、**推理**、**整合**、**自洽**——分别对应下面四条抽取原则。

覆盖范围：自然语言可表达的认知。图像、肌肉记忆、现象意识不在内。

***

## 一、核心思路

文本里的内容分两层：

* **事实层** — 关于世界状态、关系、能力、需求、意图的持久知识。这是要存的东西。

* **叙述外壳** — "谁说的 / 谁提出的 / 哪篇论文 / 哪个博客介绍 / 谁阐释了 / 谁测试发现"。这是关于人类怎么讨论事实的元信息，绝大多数情况降级为出处或丢弃。

抽取的工作是**剥掉叙述外壳，保留事实内核**。"DeepMind 提出 X 架构" 里值得入图的不是"提出"这个动作，是 X 架构本身的属性。"DeepMind"作为出处挂在 X 架构事实的 `[证据]` 行上即可。

接受语言层信息损失：焦点 / 主题前置、口吻、句末语气词、被动主动这类表层语序不输出；原文是刺激和材料，本身没有义务对应到存储形式。

***

## 二、数据模型

图里只有一种东西：unit。

### 1. unit 的标准形态

```
(主体)[谓词](论元, 论元, ...)
```

* **主体** — 1 个 node。unit 的入口，反向索引由它登记。

* **谓词** — 1 个 node。承载关系类型。

* **论元** — 0 到 N 个 node，逗号分隔。其他参与方。

例：

```
(深蓝)[击败](卡斯帕罗夫)
(想象增强智能体架构)[结合](无模型方法, 基于模型方法)
(算法)[具有]()                              # 0 论元也合法
```

主体单一是约定（不是 \[深蓝, 卡斯帕罗夫]）。"深蓝击败卡斯帕罗夫" 中卡斯帕罗夫的反向索引由 §四 `context_mentions` 登记，不靠多入口。

### 2. 修饰行：`()[修饰谓词](值)`

紧跟主 unit 的若干行，第一个括号空：

```
(想象增强智能体架构)[结合](无模型方法, 基于模型方法)
()[证据](论文-IAA)
()[发生时间](2017)
```

**`()`** **的展开规则**：

* `()` = **同一段（被空行或下一条非空主 unit 终止之前）内最近一条非** **`()`** **开头的主 unit**。

* 上例第二、三行展开为 `(<主 unit ID>)[证据](论文-IAA)` 和 `(<主 unit ID>)[发生时间](2017)`。

* 段终止后 `()` 不再有指代，必须重起一条主 unit。

* 一条主 unit 可以带任意条修饰行，顺序不重要。

修饰行是 unit，跟主 unit 同等地位——也进 `subject_mentions` / `context_mentions`。把它放成 `()[…](…)` 行只是写作上避免重复主 unit ID。

### 3. 局部 ID 与嵌套

意图、因果、条件、命题态度需要把"另一些 unit"作为论元装进来。给被嵌套的 unit 起一个段内局部 ID（u_a / u_b / ……），在外层 unit 的论元位上引用：

```
(真实世界)[具有](复杂性, 不完美性)               # u_a
(深度强化学习)[需要提升](性能, 鲁棒性)            # u_b
(想象增强智能体)[目的是](u_a, u_b)
()[证据](DeepMind, 论文-IAA)
```

局部 ID 仅在本段（一句的抽取块）内有效。跨段引用必须用持久的 unit ID（图里给每条 unit 分配的全局 ID，写法可自行约定，例如 `s2.u3`）。

### 4. 派生 node

unit 用到比已有 node 更窄的概念时，写一条 `(修饰)[的](基础)` 主 unit 引入派生 node：

```
(复杂不完美)[的](环境)
(想象增强)[的](智能体)
(基于模型)[的](智能体)
```

读法："修饰" 修饰 "基础"，整体是一个比 "基础" 更窄的派生 node。每条这样的 unit 同时引入一个**渲染名**（`修饰的基础`，或在中文里自然省略 `的` 时的 `修饰基础`），后续在其他 unit 里引用派生 node 时直接用渲染名：

```
(想象增强智能体)[需要提升](学习效率)
()[范围](复杂不完美环境)
```

派生关系沿 `的` 主 unit 反查（§六 `narrowed_by` 索引）。每条声明只写一次基础 node——不再写 `(复杂不完美环境)[派生自](环境)` 这种把 "环境" 重复两遍的形式。

### 5. 同义命名

跟普通 unit 同形态，谓词用 `同义`：

```
(论文-IAA)[同义](《深度强化学习的想象增强智能体》)
(想象增强智能体)[同义](具备想象和计划能力的智能体)
```

两边在查询时可互换。

### 6. 不输出

抽取是输入文本到 unit 的转换。**没有实际表达意义的"空话"不输出为 unit**：填充词（"其实"、"嘛"、"啊"用于语气而非内容）、纯重复 / 同义反复、纯粹起表层标记作用的虚词。

注意：焦点、被动主动、句末语气词不是天然丢弃——它们承载的认知内容（强调点、施事 / 受事、句类、信息来源）通过修饰行表达；只有当这些标记**纯粹起语言学表层功能、不携带认知内容**时才丢弃。

***

## 三、谓词分类

谓词本身是 node，跟其他 node 一样可以被细化、同义、否定。分两大类：

### 1. 结构 predicate

不描述世界事实，而是描述 unit / node 之间的关系。每条都有特定的查询语义。

| predicate | 含义 | 查询语义 |
| - | - | - |
| `同义` | A 与 B 等价 / 可互换 | 自动派生 ≡ 索引 |
| `属于` | X 是 Y 的真子类（显式分类） | 沿继承闭包传递；Y 的全集断言适用于 X |
| `的` | `(M)[的](B)` 引入派生 node `M的B` / `MB`——M 是修饰，B 是基础 node | 不传递；派生 node 上的特殊断言不被推到 B 上去 |
| `相关于` | A、B 共现且语义相关，但说不清逻辑关系 | 自动派生 ↔ 索引；通常由共现 + LLM 确认入库 |
| `negates` | 两个 predicate 互为否定 | 原则 IV 矛盾判定 |
| `被取代` | 旧 unit 被新 unit 取代 | 自动派生 ⇒ 索引；常态查询沿 ⇒ 链取末端 |

### 2. 内容 predicate

描述世界事实。按语义角色分 **family**——同 family 的成员在认知层等价（"应对" ≡ "处理" ≡ "解决"），下游遍历沿 `同义` + `的` 闭包就能找到所有变体。不同 family 不互通（"应对" ≠ "导致"）。

**a. 静态描述与关系**

| family | 典型成员 | 用途 |
| - | - | - |
| 状态 / 属性 | 具有, 是, 处于 | 实体的属性、静态状态 |
| 拥有 / 归属 | 拥有, 占有, 持有 | 主体与所有物之间的归属关系 |
| 需求 | 需要, 缺乏, 渴求 | 原则 II 改写动作的目标 |
| 部分-整体 | 是...的一部分, 包括, 组成, 含有 | 部分-整体 / 集合-成员（区别于 `属于` 子类分类） |
| 位置 / 空间 | 位于, 邻近, 接触, 包围 | 实体间的空间关系 |
| 比较 / 程度 | 大于, 等于, 类似, 不同, 优于 | 两个 node 在某维度上的比较 |

**b. 动作与事件**

| family | 典型成员 | 用途 |
| - | - | - |
| 动作 / 事件 | 提出, 发明, 击败, 塑造, 变成 | 一次性事件 / 状态变化；典型情况下用原则 II 改写为状态 / 需求 |
| 解决 | 应对, 处理, 面对, 解决 | 主体解决某问题 |
| 通过 | 借助, 通过, 利用 | 主体借助某手段 |
| 时序 | 之前, 之后, 同时, 期间, 持续 | 命题 / 事件之间的时间关系（与修饰谓词 `发生时间` 不同——后者给 unit 加时间标签） |

**c. 逻辑修饰**

| family | 典型成员 | 用途 |
| - | - | - |
| 因果 | 导致, 造成, 引起, 诱发 | 已发生的因果链；论元为嵌套 unit 局部 ID |
| 意图 / 目的 | 目的是, 旨在, 为了, 借以 | 未发生的意图（in order to thereby） |
| 模态 | 应该, 必须, 可能, 可以 | 命题的模态修饰；论元为嵌套 unit 局部 ID 或常规 node |

**d. 命题态度**

| family | 典型成员 | 用途 |
| - | - | - |
| 言语行为 / 命题态度 | 主张, 相信, 知道, 认为, 怀疑 | 主体对命题的态度；论元为嵌套 unit 局部 ID |
| 桥接（目的-手段-回应） | 回应, 实现, 解决, 服务于, 满足 | 原则 II 中把 S 连到状态 / 需求 node 的 bridge unit |

### 3. 修饰谓词

出现在 `()[修饰谓词](值)` 行里，给主 unit 附加上下文。这些谓词的"主语"统一是上一条主 unit。常见成员：

| 修饰谓词 | 含义 |
| - | - |
| `证据` / `出处` | 这条事实出自谁 / 哪篇论文 / 哪个博客（叙述外壳的标准着陆点） |
| `发生时间` / `地点` | unit 成立的时间 / 地点 |
| `动作阶段` | 体：完成 / 进行 / 经验 / 起始 / 持续；缺省 = 完成 |
| `方式` / `程度` / `范围` | 谓词的修饰；优先拆到这里，再考虑细化谓词 node |
| `工具` / `源` / `目标` / `接受者` / `候选` / `依据` | 论元角色——"用什么 / 从哪 / 到哪 / 给谁 / 在哪些里挑 / 按什么" |
| `量化` | 全称 / 存在 / 数量(n)；用于消除"每个学生都读过至少一本书"这类辖域歧义 |
| `否定辖域` | 否定作用在哪一项上（与谓词自身的否定区分；后者用 `negates`） |
| `模态` | 能 / 必须 / 可能 / 应该（语句级模态） |
| `置信度` | 直接 / 推断 / 传闻；high / low |

修饰谓词不封闭，按需新增。

### 4. 谓词的修饰与细化

修饰过的谓词也是 node，可以同样用 `(修饰)[的](基础谓词)` 形式声明派生：

```
(以独特方式深刻)[的](塑造)
(于1997年)[的](击败)
```

**优先**：副词 / 程度 / 范围 / 时间拆到修饰行（`()[方式](独特)`、`()[程度](深刻)`、`()[发生时间](1997)`），让谓词留在 family 基础成员；只有当修饰已经融入核心动词的语义、无法拆分时才另立新谓词 node。

***

## 四、抽取四原则

每条 unit 写出来时必须**同时**满足下面四条。这不是按顺序的步骤，是约束的合取。

### I. 事实优先（对应思考操作：整合）

**规则**：动词落在**元话语动词族**时，跳过它进它的宾语找事实；元话语主语降级为修饰行 `()[证据](S)`。

元话语动词族（这些动词描述"人类怎么讨论事实"，本身不描述世界）：

```
言说族：提出 / 介绍 / 阐释 / 主张 / 报道 / 发表 / 题为 / 写道 / 论证 / 总结
观察族：测试 / 验证 / 观察 / 发现 / 记录
```

**操作模板**：

```
原文：S [元话语动词] X，X 的内容是 ...
抽取：(X)[内容动词](...)
      ()[证据](S)
```

例：

```
原文：DeepMind 提出 X 架构，X 结合无模型与基于模型方法
抽取：(X 架构)[结合](无模型方法, 基于模型方法)
      ()[证据](DeepMind)
```

**何时不能降级**——三种情况叙述事件本身就是世界事实：

1. 归属 / 优先权是关注点（"X 首次提出 Y" 在学术语境）。
2. 命题态度在场（"X 怀疑 Y"——态度本身是事实，归 §三 命题态度 family）。
3. 历史事件（"深蓝击败卡斯帕罗夫"——不是元话语，是真发生的世界事件）。

判别启发：去掉这个动词，宾语作为独立事实是否仍然成立且更纯净？是 → 降级；否 → 保留。

### II. 最具体的标识符（对应思考操作：整合）

**规则**：主体 / 谓词 / 论元 / 修饰行的值——每个位置都用最具体的稳定标识符。概念比已有标识符更窄 / 更特殊时，写一条 `(修饰)[的](基础)` 主 unit 引入派生 node。

对称适用于 unit 的所有位置：

* 主体 / 论元值上："入选微芯片" ≠ 微芯片，"DeepMind 提出的智能体" ≠ 智能体。

* 谓词位上："以独特方式深刻塑造" ≠ 塑造，"于 1997 年击败" ≠ 击败——这一条容易被忽略。

**典型操作 — 把一次性动作改写为持久的状态 / 需求**：

```
(S)[做](P of O)        →    (O)[需要 / 具有](P)
                       +    bridge unit (S)[家族成员](O 的需求 / 状态)
```

bridge predicate 从 §三 桥接 family 中选最贴切的成员。动作是一次性的，状态 / 需求是领域级持久事实——入口挂到这一层，下一篇同主题的新方法也能归到同一标识符上。bridge unit 在 S 从主 unit 里消失时才必要；S 在图里别处保留时（如 `(DeepMind)[提出](X)`）冗余。

例：

```
原文：DeepMind 提升了智能体在复杂环境中的学习效率
抽取：(智能体)[需要提升](学习效率)
      ()[范围](复杂环境)
      ()[证据](DeepMind)
```

### III. 嵌套修饰（对应思考操作：推理）

**规则**：modal / 意图 / 因果 / 条件 / 态度 / 引用 / 嵌入子句——一切对命题做的修饰或操作都装到外层 unit 的论元位，被嵌套的内层 unit 用段内局部 ID（u_a / u_b / ……）引用。禁止用句法连词切碎为同层平行断言。

**意图链**（in order to thereby）：

```
原文：DeepMind 提出 X，旨在应对真实世界的复杂性，从而提升深度强化学习的性能

(真实世界)[具有](复杂性)                    # u_a
(深度强化学习)[需要提升](性能)                # u_b
(X)[目的是](u_a, u_b)
()[证据](DeepMind)
```

注意 "从而" 在目的语境里 = *in order to thereby*（未发生的意图链），不是因果结果（A 引起 B）；前者所有子目标共享一条 `[目的是]` 主 unit，后者归入 "导致" family。

**因果链**：

```
原文：真实世界规则不明确，使得在此类环境中进行想象耗时耗力

(真实世界)[具有](规则不明确性)               # u_a
(在真实世界中进行想象)[是](耗时耗力的)        # u_b
(u_a)[导致](u_b)
```

主体是因，论元是果——读法 "u_a 导致 u_b"。

**模态 / 条件**：

```
原文：要让算法执行复杂行为，就必须使其具备对未来推理的能力

(算法)[执行](复杂行为)                       # u_a  目标命题
(算法)[具有](对未来推理的能力)                # u_b  必需条件
(u_b)[必要条件](u_a)
```

读法 "u_b 是 u_a 的必要条件"。模态 family 里的 `必须` / `应该` / `可能` 直接修饰单条命题（`(u_b)[必须]()`）；条件关系更适合用 `必要条件` / `充分条件` 这种二元 predicate。

**命题态度**：

```
原文：研究者认为该方法不可行

(该方法)[是](不可行的)                        # u_a
(研究者)[认为](u_a)
```

### IV. 自洽（对应思考操作：自洽）

**规则**：图永远不能同时存在两条互相矛盾的 unit。

**操作**：新 unit 入库前查 `subject_mentions[新 unit.主体]` 反查到的小集合；若主体重合 + 修饰行一致 + 谓词互为否定（通过 `negates` unit 查得），用 `被取代` 主 unit 把旧 unit 标为被取代，带时间戳。旧 unit 保留供审计；常态查询沿 ⇒ 链取末端。

***

## 五、抽取流程（操作侧）

抽取时按以下顺序处理一段原文：

1. **句法解析**：识别小句、动词、论元、修饰、连词、辖域算子。
2. **语言层预处理**：

   * **指代还原**：人称代词、零指代（"去了商店，买了苹果，很甜" → "\[他]去了商店，\[他]买了苹果，\[苹果]很甜"）都还原成具体 node。

   * **特殊句式标准化**：

     * 把字句 / 被字句：还原为 `(施事)[谓词](受事)` 而非按表层语序。

     * 兼语句（"老师让学生回答问题"）：拆为致使 unit + 嵌套子 unit。

     * 连动句（"他去图书馆借书"）：拆为多条 unit，按时序 / 目的连。

     * 是字句 / 有字句：用 `属于` / `具有` 等静态谓词，不写成动作。

     * 比较句（"A 比 B 高"）：谓词 ∈ 比较 / 程度 family，修饰行带 `维度` 和 `参照`。

   * **辖域识别**：否定 / 量化 / 模态的辖域要在这里定下来——决定它是谓词自身的否定（用 `negates`）、修饰行（`量化` / `否定辖域`）、还是嵌套外层（原则 III）。

   * **句类识别**：陈述以外的句类（疑问 / 祈使 / 感叹）通过命题态度 family wrapping（询问 / 请求 / 评价）变成 unit；语气词的字面形式不输出。
3. **复句拆分**：按因果 / 转折 / 时序 / 目的 / 条件 / 让步切分。
4. **逐条 unit**：选谓词（归 family 基础成员）、定主体（≥1 个具体 node）、补修饰行；同时满足四条原则。
5. **入库**：原则 IV 查冲突 → §六 索引自动更新。

***

## 六、查询

### 1. 反向索引（node → unit）

每个 node 是一个 wiki 页面，按谓词 family 分组展示三块：

| 索引 | 含义 |
| - | - |
| `subject_mentions` | node → \[作为主体出现的 unit ID] |
| `context_mentions` | node → \[作为论元 / 修饰行值出现但不是主体的 unit ID] |
| `narrowed_by` | node → \[以它为基础的派生 node]（沿 `的` 主 unit 反查论元位） |

例："1997 深蓝击败卡斯帕罗夫" → `subject_mentions[深蓝]` += 它，`context_mentions[卡斯帕罗夫]` += 它，`context_mentions[1997]` += 它（1997 在 `()[发生时间]` 修饰行里）。

### 2. 判断索引（高频）

| 索引 | 含义 | 自动派生自 |
| - | - | - |
| ≡ | 两条 unit 等价 / 可互换 | `同义` 主 unit |
| ↔ | 相关但说不清逻辑关系 | `相关于` 主 unit（共现 + LLM 确认） |
| ⇒ | 后者取代前者 | `被取代` 主 unit，带时间戳 |

矛盾（⊥）不在这里——按原则 IV 在入库时已被 ⇒ 消解。

### 3. 查询操作

| 操作 | 做法 |
| - | - |
| 打开 node 页 | `subject_mentions[X]` 按谓词 family 分组 + `narrowed_by[X]` 列派生 node |
| 继承推理 | 沿 `属于` 闭包传递；`派生自` 不参与——挂在派生 node 上的具体断言不会被推到原 node 上去 |
| 展开 family | 谓词 ∈ family 基础成员 → 沿 `同义` + `的` 闭包找到所有变体 unit |
| 找因果链 | 谓词 ∈ "导致" family，沿 (因→果) 主体遍历 |
| 谁主张了 X | `subject_mentions[X]` ∩ 谓词 ∈ "主张" family |
| 追溯目的-手段 | 谓词 ∈ "目的是" family，沿论元里嵌套的子 unit 展开 |
| 查事实出处 | `context_mentions[S]` ∩ 谓词 = `证据` |
| 整合新 unit | 主体反查邻居 → LLM 判 ≡ / ↔ / 冲突；冲突走原则 IV |
| 取最新事实 | 沿 ⇒ 链取末端，跳过被取代的旧 unit |

入库时的语义判断已固化到谓词 / 修饰行里。所有查询是图遍历，无在线 LLM 调用。

***

## 七、trade-off

* **接受语言表达层信息损失**：焦点 / 主题前置、口吻、句末语气词、被动主动这类表层语序不输出。认知内容由命题态度 family 和修饰行承载。

* **接受叙述外壳信息损失**：原则 I 默认把"谁说的 / 谁提出的"压成 `()[证据]`，归属在大多数情况下不是首要事实。如果场景里归属是关注点（学术优先权、争议引述），需要手动把它升回主 unit。

* **入库依赖 LLM 的语言理解**：指代消解、特殊句式标准化、辖域识别、谓词 family 归并、事实层 vs. 叙述外壳的判别都需要 LLM。常态查询不再需要 LLM。

* **等价 / 矛盾判定靠 LLM pairwise**，不靠形式逻辑求解。

* **不做严格形式推理**：目标是组织和检索 unit，不是定理证明。如需可叠加形式化命题层。

* **入库代价高于 RAG**：一次入库换长期可推理，常态使用不再付 LLM 成本。