文本到认知图:图构建方法

把一段自然语言(句、段、整篇)压成一张可遍历的 unit 图。


一、输出形式

图的 ground truth 是 unit 文本——已有抽取约定的序列化形式:

(主体)[谓词](论元, 论元, ...)
()[修饰谓词](值)

派生 (M)[的](B)、同义 (A)[同义](B)、嵌套局部 ID(u_a / u_b / ...)等同 §二「数据模型」。

图示绘制也只用一套记号——(X) 表示节点、[P] 表示谓词、── / └── 等表示边——与 unit 文本的括号完全一致。机器消费一律以 unit 文本为准,图示只是辅助阅读。


二、记号约定

下文示例和讨论用以下记号表达 unit 图:

记号 含义
(X) 节点。同一 node 全图唯一一个 (X) 实例
[P] 谓词。每条 unit 引入独立的 [P] 实例(同名谓词不共享节点)
── 边:主体 — [P] — 论元;修饰行 [P] — 值
┄┄ 节点的外发尾巴:标记该节点的 subject_mentions 在全图层面非空、向本输入之外延伸

入口节点 / 仅论元节点的区分不在记号本身体现,而由 §三 步骤 4 的 S* 集合刻画——需要展示时在节点旁加注(如 (X)*)或在表格中单列说明。(X) 形态相同,是为了让图示和 unit 文本完全同形。


三、构建流程

输入文本 → 输出 unit 集合 + 图拓扑。共五步,前三步沿用 认知图:以谓词作为概念 §五 抽取流程,后两步是本文档新增。

步骤 1 — 句法解析与语言层预处理

参照原 §五.1–2:识别小句 / 动词 / 论元 / 修饰 / 辖域;指代还原;特殊句式标准化(把字句、被字句、兼语、连动、是 / 有字句、比较句);句类识别。

多句 / 多段输入:跨句指代和零指代在这一步统一还原。代词不能还原时降级为占位 node ?_1 / ?_2,并打 ()[置信度](low)

步骤 2 — 复句拆分

按因果 / 转折 / 时序 / 目的 / 条件 / 让步切分小句。保留连接关系,待嵌套层装回(原则 III)。

步骤 3 — 抽取 unit 集

逐小句产出 unit:

派生 node (M)[的](B) 在使用前先声明,渲染名 MB 入图。同义命名 (A)[同义](B) 在两个标识符首次共现时声明。

派生 / 同义 不是默认操作——按以下规则触发:

两种判别启发

  1. 重点是描述 vs 事件:去掉量词 "一位 / 一个 / 一种",看剩下的是不是个动词主导的完整句。是 → 事件型,主谓宾 + 修饰行;不是(剩下的是名词短语)→ 描述型,派生层级 + [属于]
  2. 避免重复编码:写完一条派生 / 同义后,看是否同一事实在派生名、谓词、修饰行多处重复出现。是 → 简化掉冗余的层(要么删派生留事件,要么删事件留派生)。

反例 A — 描述错抽成事件:原文 "一位每天乘坐列车通勤的人"(名词短语)写成 (通勤者)[通勤]() + [工具](列车) + [频率](每天)——把描述抽成动作,丢失"她是什么人"的分类语义。正解:(列车通勤)[的](人) + (每天)[的](列车通勤的人) + (通勤者)[属于](每天列车通勤的人)

反例 B — 派生 + 同义 + 事件四处重复:同句写成 (列车通勤)[的](人) + (列车通勤的人)[同义](列车通勤者) + (列车通勤者)[通勤]() + [工具](列车)——同义被滥用作 alias,"列车通勤" 编码四次。

段(抽取块)的边界:决定 () 指代的范围、决定局部 ID u_a / u_b 的有效域。一般以原文自然段或一两句一组划段;段终止后 () 不再有指代,必须重起一条主 unit;跨段引用必须用持久 unit ID。这套规则照搬 §二.2–3,不在本文档重复。

步骤 4 — 节点收集与角色判定(全局)

遍历输入产出的所有 unit 集合 U(跨句、跨段统一收集,不分段重置):

nodes  := ⋃ unit ∈ U {主体, 谓词, 论元, 所有修饰行的值}
S*     := ⋃ unit ∈ U {主体}                 # 含派生 / 同义 / 修饰行所属主 unit 的主体
preds  := { (unit, 谓词位置) }                # 注意:以位置为单位,不去重

每个 node 的角色:

派生 node 的基础 node B(出现在 (M)[的](B) 的论元位):在本输入里若 B 没单独作过主体,仍然是仅论元节点;这条派生声明本身让 M 进 S*(M 是该 unit 的主体)。

步骤 5 — 主线选定

在本段产出的 unit 集中标记一条 unit 为核心——它是这一段的 narrative center。通常是:

其余 unit 自动是分支——它们仍然是独立 unit、有完整结构 / 反向索引 / 查询语义,只是叙事地位上从属于主 unit

主线选定没有结构后果——它不改变图遍历语义,也不影响 unit 文本的 ground truth。它的作用是:

  1. 视觉布局:核心 unit 横向居中排在图的主轴上,分支从主轴节点向下/向上引出;
  2. 段查询:问"这段在讲什么"直接读核心 unit,不必遍历全部 unit 综合;
  3. 叙事中心化:让一段的核心断言和支撑细节在层级上有明确区分。

主线视觉边标签 vs unit 文本谓词:视觉图上可用自然连接词(平时 / 清楚 / 造成),便于人读;unit 文本里始终写 family 基础成员属于 / 认为 / 导致),便于查询。映射例:

视觉自然词 unit 文本 family 谓词
平时 / 通常 / 是 属于 /
清楚 / 知道 / 认为 认为 / 认知 / 知道
造成 / 引发 / 让 导致 / 造成
提出 / 介绍 (元话语,原则 I 降级,不上主线)

空段允许无主 unit:纯派生 / 同义声明段(如开头铺设词典)可能没有自然中心;这种段标记主 unit 为 null 即可。

步骤 6 — 图拓扑装配

每条 unit (S)[P](A_1, ..., A_n) 装配为一个星形子图:

(S) ── [P] ── (A_1)
           ── (A_2)
           ...
           ── (A_n)

修饰行 ()[mod-P](v) 挂在主 unit 的 [P] 上:

(S) ── [P] ── (A)
           └── [mod-P] ── (v)

嵌套 —— 当 A_i 是局部 ID(u_a / u_b / ...):把内层 unit 的 [P] 直接接到外层 [P] 的论元位,跳过中间节点。读图者沿外层 [P] 走到内层 [P],再展开内层 unit。

外层:(S)[目的是](u_a, u_b)
渲染:(S) ── [目的是] ── [u_a 的谓词] ── ...
                    └── [u_b 的谓词] ── ...

派生簇 —— (M)[的](B) 是一条普通 unit:

(M) ── [的] ── (B)

派生 node 的渲染名 MB 在后续 unit 里被引用时,复用 (M) 的位置——不复制 M 节点,整张图里 M 始终一个实例。

同义簇 —— (A)[同义](B) 同样作为 unit 渲染。查询时 ≡ 索引由 同义 谓词派生(§六.2);图上是显式的 [同义] 节点和两端的 (X)

跨段连接 —— 当输入跨多个段时,节点(依靠全局唯一性,§四)天然把不同段产出的星形子图缝合在一起:第一段把 X 作主体 (X),第二段又用 X 作论元 (X),那 (X) 同时出现在两段对应的子图里——它们共用同一个实例。

外发尾巴 —— 给每个入口节点画一条 ┄┄ 尾巴,端点空悬,表示该 (X) 在全图层面有 subject_mentions 项可达本输入之外。如果该入口节点的所有 unit 都在本输入内被产出,尾巴只是占位;图被并入更大图后尾巴连到外部 unit。


四、不变量

构建出的图必须满足:

  1. 节点全局唯一性:同一 node 在整段输入产出的图里全局唯一一个 (X) 实例。一个 node 在多句多段多条 unit 里出现,对应同一个实例。
  2. 谓词独立性:同一谓词在不同 unit 里是不同 [P] 实例。"两次说'具有'"对应两个 [具有] 实例。
  3. 角色单调性:节点一旦进入 S*(成为入口节点),永远是入口节点,不会因后续 unit 倒退为仅论元节点。
  4. 修饰行从属性:修饰行的 [P] 必须挂在主 unit 的 [P] 上,不能直接连主体 (X)——否则就该升格为独立主 unit。
  5. 嵌套不绕路:内层 unit 在外层 unit 的论元位上以"另一个 [P]"形态出现,禁止用占位 (X) 中转。
  6. 段内局部 ID 不外泄u_a / u_b 等局部 ID 只在所属段内的论元位上出现;跨段引用必须替换成持久 unit ID 或具体节点名。
  7. 每段恰有一条主 unit(或显式标 null);其余 unit 全是分支。主线没有结构后果,仅影响视觉布局和段查询入口。

违反任一条 → 抽取或装配出错。


五、可序列化形式

实际输出有两层。主输出 — unit 文本 是 ground truth;分段、主 unit 用注释标记:

# 段 1   spine: u1
(想象增强)[的](智能体)
(想象增强智能体)[需要提升](学习效率)        # u1
()[范围](复杂不完美环境)
()[工具](想象力)
()[证据](DeepMind)

# 段 2   spine: u3
...

派生输出 — 拓扑摘要(可选,给可视化渲染器消费,由主输出自动派生、不持久化):

graph:
  nodes:
    - id: 想象增强智能体
      entry: true                     # 入口节点(S* 成员)
      out_count: 4
    - id: 学习效率
      entry: false                    # 仅论元节点
    ...
  preds:
    - id: u1
      subject: 想象增强智能体
      predicate: 需要提升
      args: [学习效率]
      modifiers:
        范围: 复杂不完美环境
        工具: 想象力
        证据: DeepMind
    ...
  segments:
    - id: seg-1
      spine: u1                       # 段的主 unit;null 表示无主线
      branches: [u2, u3, u4, ...]     # 该段其余 unit
    ...

两者必须一致——若不一致,以 unit 文本为准。


六、示例

例 1 — 单句简单陈述

原文:深蓝击败卡斯帕罗夫。

unit 文本:

(深蓝)[击败](卡斯帕罗夫)

节点角色:S* = {深蓝} → 入口节点;卡斯帕罗夫 → 仅论元节点;[击败] 是谓词实例。

拓扑示意:

            ┄┄┄┄ (外发)
              ╲
              (深蓝) ── [击败] ── (卡斯帕罗夫)

例 2 — 单句派生 + 修饰行

原文:DeepMind 通过赋予智能体想象力,提升了其在复杂不完美环境中的学习效率。

unit 文本(取自 svo_demo_0_processed.txt 句 1):

(复杂不完美)[的](环境)
(想象增强)[的](智能体)

(想象增强智能体)[具有](想象力)
()[证据](DeepMind)

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

节点角色:S* = {复杂不完美, 想象增强, 想象增强智能体}

node 角色 理由
复杂不完美 入口 派生声明 (复杂不完美)[的](环境) 的主体
想象增强 入口 派生声明 (想象增强)[的](智能体) 的主体
想象增强智能体 入口 多次作主体(具有 / 需要提升)
环境 仅论元 仅作论元
智能体 仅论元 仅作论元
想象力 仅论元 论元 + 修饰行值
学习效率 仅论元 仅作论元
复杂不完美环境 仅论元 修饰行值(派生 node 渲染名)
DeepMind 仅论元 修饰行值(证据)

拓扑示意:

(复杂不完美) ── [的] ── (环境)

(想象增强) ── [的] ── (智能体)

                            ┄┄┄ (外发)
                            ╲
   (想象增强智能体) ── [具有] ── (想象力)
                  │       └── [证据] ── (DeepMind)
                  │
                  └── [需要提升] ── (学习效率)
                              ├── [范围] ── (复杂不完美环境)
                              ├── [工具] ── (想象力)
                              └── [证据] ── (DeepMind)

匹配手绘图的形态:入口节点(带 ┄┄ 尾巴)是反向索引登记点,手臂上是 [P] ── (X),多条 unit 通过共享 (X) 相连。

例 3 — 单句嵌套(意图链)

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

unit 文本(原则 I 元话语降级 + 原则 III 意图链嵌套):

(真实世界)[具有](复杂性)               # u_a
(深度强化学习)[需要提升](性能)         # u_b

(X)[目的是](u_a, u_b)
()[证据](DeepMind)

节点角色:S* = {真实世界, 深度强化学习, X} → 入口节点;其余 → 仅论元节点。

拓扑示意(嵌套用 [P] 直连 [P]):

(真实世界) ── [具有] ── (复杂性)
                       ↑
                       │ (作为论元位)
(X) ── [目的是] ────────┤
       │               ↓
       │     (深度强化学习) ── [需要提升] ── (性能)
       └── [证据] ── (DeepMind)

注意 [目的是] 的两个论元位接的是另外两个 [P](u_a / u_b 的谓词),不是中间套 (X)——这是嵌套的几何特征。

例 4 — 跨句的全局节点缝合

原文(两句一段):DeepMind 提出了想象增强智能体。该智能体在复杂环境中具有更高的学习效率。

unit 文本(两段抽取块,每段独立局部 ID 域;节点跨段共享):

(想象增强)[的](智能体)
(想象增强智能体)[同义](DeepMind 提出的想象增强智能体)
()[证据](DeepMind)
(复杂)[的](环境)

(想象增强智能体)[具有](学习效率)
()[范围](复杂环境)
()[程度](更高)

节点角色(全局收集):

想象增强智能体 在第一段是主体(同义声明)、第二段还是主体(具有)——它是同一个 (想象增强智能体),把两段的子图缝合到一起。这是 §四 不变量 1 在跨句场景的直接体现。

例 5 — 整段(三句)综合:主线 + 分支组织

原文:

设想一位每天乘坐列车通勤的人。大多数早晨,她的列车都能准时发车,她能轻松有备地赶上早会。但她清楚,一旦有一点意外发生——机械故障、信号失灵,甚至只是碰到雨天——都可能扰乱她原本的模式,造成迟到或慌乱。

这一整段的核心 narrative arc 是她清楚一旦意外发生会扰乱模式造成迟到 / 慌乱——句 1 描述她是什么人是 setup,句 2 立常态也是 setup,句 3 是核心断言。整段抽成一条主线 + 多条分支,主线由命题态度 wrap 嵌套因果链。

主线(spine)

整段共 3 条 spine units,对应视觉主轴上的 3 条边:

# SPINE
(她)[属于](每天列车通勤的人)             # spine.1   视觉边 [平时]
(她)[认为](u_c)                          # spine.2   视觉边 [清楚]
(u_b)[导致](迟到, 慌乱)                  # spine.3 = u_c   视觉边 [造成]
()[模态](可能)

视觉边标签 平时 / 清楚 / 造成 来自原文,unit 文本里规范化到 family 谓词 属于 / 认为 / 导致

嵌套因果链(spine.2 / spine.3 内部)

(意外)[发生]()                            # u_a
()[量化](一点)

(u_a)[扰乱](通勤者原本模式)               # u_b
()[模态](可能)

(u_b)[导致](迟到, 慌乱)                   # u_c   ← 同 spine.3
()[模态](可能)

(她)[认为](u_c) 通过 u_c → u_b → u_a 的反向链,自动覆盖整条因果链——不需要写成 [认为](u_a, u_b, u_c) 把每节点都列出来。

分支(独立 unit,叙事地位从属于主线)

# 分支:(她) 的描述(D 决定)
(列车通勤)[的](人)
(每天)[的](列车通勤的人)

# 分支:意外的子类(C 决定)
(机械故障)[属于](意外)
(信号失灵)[属于](意外)
(雨天)[属于](意外)

# 分支:(她) 的原本模式
(她)[的](原本模式)

# 分支:常态背景(句 2)
(列车)[发车]()
()[方式](准时)
()[量化](大多数早晨)
()[模态](能)

(她)[赶上](早会)
()[方式](轻松, 有备)
()[模态](能)
()[量化](大多数早晨)

视觉拓扑

按"主轴 + 各节点分支"整合排列,全部以 unit 文本表达。修饰行 ()[mod-P](v) 缩进 2 格挂在上方最近的一条主 unit 的 [P] 上;视觉边标签写在 # 注释里,不进入语法。

# 主轴 spine
(她)[属于](每天列车通勤的人)              # spine.1   视觉: 平时
(她)[认为](u_c)                           # spine.2   视觉: 清楚
(u_b)[导致](迟到, 慌乱)                   # spine.3 = u_c   视觉: 造成
  ()[模态](可能)

# spine.2 内部嵌套链
(意外)[发生]()                            # u_a
  ()[量化](一点)
(u_a)[扰乱](通勤者原本模式)               # u_b
  ()[模态](可能)
(u_b)[导致](迟到, 慌乱)                   # u_c

# (她) 节点向下分支(D 决定)
(列车通勤)[的](人)
(每天)[的](列车通勤的人)
(她)[的](原本模式)

# (她) 节点的常态分支
(她)[赶上](早会)
  ()[方式](轻松, 有备)
  ()[模态](能)
  ()[量化](大多数早晨)

# (列车) 节点的常态分支
(列车)[发车]()
  ()[方式](准时)
  ()[量化](大多数早晨)
  ()[模态](能)

# (意外) 节点向下分支(C 决定)
(机械故障)[属于](意外)
(信号失灵)[属于](意外)
(雨天)[属于](意外)

抽取决策注记

  1. 主线选定 — A.a 单一核心断言:本段是说服性叙述,核心是 "她清楚一条规则"——主 unit 选 (她)[认为](u_c)属于 / 导致 也上主线是因为它们共享 (她) 起点和 (迟到, 慌乱) 终点,构成完整 narrative arc;不是另立两段。
  2. B 主线规范化:视觉用 平时 / 清楚 / 造成 让人读得自然;unit 文本写 family 谓词 属于 / 认为 / 导致,让查询沿 family 闭包仍能命中。
  3. C 子类独立机械故障 / 信号失灵 / 雨天 写成 3 条 [属于] unit(不压成 (意外) 节点的 [子类](机械故障, 信号失灵, 雨天) 修饰行),保证 "意外的所有子类" 是图遍历一步。
  4. D (她) 的描述独立:派生 + [属于] 链立人物——不降为 (她) 节点的 [每天行为](乘列车) 修饰行。这条选择保证 "每天列车通勤的人" 作为类,能挂上 (她)赶上 等其他实例的常态属性供继承。
  5. (她)[认为](u_c) 单论元嵌套:u_c → u_b → u_a 反向可达,主线只需写终点 unit ID;不重复 [认为](u_a, u_b, u_c)
  6. 常态背景属于分支:句 2 的 (列车)[发车]() / (她)[赶上](早会) 不上主线——它们是 setup,不是核心断言。视觉上挂在 (她) / (列车) 节点旁。
  7. 元话语 设想:原则 I 降级,不写 (读者)[设想](...)。整段假说性可挂 ()[置信度](假设) 给主 unit。
  8. 跨句指代 :步骤 1 还原为 (她)(直接作为主体 ID);图里没有 "她" 这个代词节点。

节点角色总览

入口节点 来源
列车通勤 派生主体 (列车通勤)[的](人)
每天 派生主体 (每天)[的](列车通勤的人)
中心节点——属于 / 认为 / 赶上 / 派生(原本模式)
列车 发车
机械故障 / 信号失灵 / 雨天 三条 属于 unit 的主体
意外 发生

仅论元节点:人、列车通勤的人、每天列车通勤的人、早会、原本模式、通勤者原本模式(即"她的原本模式"渲染名)、迟到、慌乱、修饰行值(每天、准时、轻松、有备、大多数早晨、一点)。


七、trade-off


Revision #1
Created 2026-05-08 08:45:58 UTC by Colin
Updated 2026-05-08 08:45:59 UTC by Colin