SVO语义检索的系统化方案
SVO 语义检索的系统化方案
本方案描述的是检索架构。SVO 算子定义、原子分类、拓扑模型、可读性建议等基础规范见
SVO语义矢量算子手册.md;大脑记忆四大机制的生物学原型见大脑记忆的核心机制.md。本文不重复上述内容,只在关键处回指。立场:入库拆解、门控字段、边权分化、基础激活等全部是工程需要。表达层的算式只需满足手册的硬性约束(§1.1),工程层单向从合法算式中抽取所需字段。任何为让检索工作而反向约束表达的规则,都不应出现在手册或指令文档中。
零、方案概要
一句话:检索 = 概念向量入口 + 类型化图扩散 + 门控与基础激活调节 + 能量阈值输出。
四步对应大脑扩散激活(大脑记忆的核心机制.md §四):
| 生物机制 | 工程实现 |
|---|---|
| 入口激活(线索点亮节点) | 查询 → SVO 解析出概念簇 → 向量索引 top-K → 初始能量 |
| 沿边扩散(能量按边权流动) | 类型化有向图上并行 BFS,边权按 : / > / 连词类分化 |
| 激活汇聚叠加(多线索交汇) | 多源能量在公共邻居上求和;门控冲突乘惩罚;扇出归一化 |
| 阈值触发(累积高的浮现) | threshold 过滤 + conclu / info / output 三层输出 |
为什么是扩散模型(这是整份方案的设计根基):
- 语义连续交给向量(入口层)——分布式表征让"相似即相近",对应脑的多通道编码。
- 结构离散交给图(扩散层)——SVO 算子明确告诉工程层哪里是命题、哪里是修饰、哪里是逻辑连接,对应脑的海马体索引。
- 冲突信号用能量衰减而非硬过滤——极性/量词/模态/连词的不匹配只是"乘以一个 < 1 的系数",对应脑的神经调质调节。多入口交汇时,噪声互相抵消,信号互相增强;这是模糊检索的本质,不是 bug。
SVO 二元本体(SVO语义矢量算子手册.md §1.2)在图上的同构:
- 属性本体
:→ 概念簇内部结构 + 修饰边(scope → proposition) - 力本体
>→ 动作命题(S→V→O)+ 逻辑命题(前件→连词→后件)+ 言说引用
属性和力在本体上是两类基本实体,在图上就是两类基本结构——向量空间主要承载属性(静态标签),图结构主要承载力(动态流向)。
一、相关性分层
检索相关性分六层,由图中不同机制承担。"每层一个专用索引"被扩散架构收敛为"一张图 + 一个向量索引 + 类型化边":
| 层级 | 含义 | 承担机制 |
|---|---|---|
| L1 概念相关 | 词项语义相似("汽车"→"SUV") | 概念向量索引(唯一入口) |
| L2 命题相关 | 主谓宾整体对齐 | 入口概念经槽位边 1 跳激活动作命题 |
| L3 作用域相关 | 话题/身份/范围/句子级副词匹配 | scope/sentence_mod 概念经修饰边激活命题 |
| L4 推导相关 | 条件/让步/因果链前后件匹配 | 扩散至逻辑命题 + 沿逻辑前件边/后件边双向展开 |
| L5 蕴含相关 | 否定/量词/模态区分 | 节点门控属性能量衰减(软约束) |
| L6 结构类比 | 骨架相同实体不同 | 扩散的自然副产物(同构命题图距近) |
奥卡姆式收敛:L2–L6 全部交给同一张图的类型化扩散;只有 L1 保留独立的向量索引。相比"倒排索引 + 结构哈希 + 前后件向量 + …"的多索引方案,扩散模型用"图拓扑本身承载结构语义"替代了多数专用索引。
二、入库:从 SVO 表达式到类型化图谱
2.1 三类原子节点(长期记忆的分布式单元)
SVO 表达式不作为整体被索引。解析后分解为三类节点,对应大脑皮层的三种模式:
| 节点 | SVO 形式 | 皮层类比 |
|---|---|---|
| 概念簇(concept) | 红:苹果、(前:负责人):Karpathy、(AI:方面)、显然 |
分布式表征的最小单元(类 V1–IT 的层次特征) |
| 动作命题(action_proposition) | S > V > O(含空补语/引用宾语) |
一条"事件索引"——主谓宾是海马体打包的最小共激活单元 |
| 逻辑命题(logical_proposition) | 前件 > 连词 > 后件 |
两条事件索引之间的"关系索引" |
概念簇的 role(按手册 §1.2.1 的属性本体分类,入库自动判别):
entity:专有名词、人物、机构、产品concept:普通概念、抽象名词、偏正复合词scope:话题/身份/背景/范围(典型形式(AI:方面)、(前:负责人))sentence_mod:句子级副词与情态标记(显然、不幸:的是、祈使、疑问)
role 用于按角色分流召回(§4.3),不改变图结构。
致使/条件/让步结构的嵌入命题(手册 §1.1-4)被显式封装为独立命题节点,> 连接词变为逻辑命题的 connector。例如:
论文 > 促使 > (Tishby > 认识到 > (理论 > (可能:涵盖) > (广泛:过程)))
入库为:
P1 = Tishby > 认识到 > P2 (action; object_ref=P2)
P2 = 理论 > (可能:涵盖) > (广泛:过程) (action)
L1 = 论文 > 促使 > P1 (logical; connector_class=致使; antecedent="论文", consequent=P1)
2.2 三类引用关系边(海马体索引的具象化)
原子之间通过 PropRef 引用关系相连,对应图中三类有权有向边:
| ref_type | 典型 SVO 形式 | 图中边类型 | 默认基础权重 |
|---|---|---|---|
slot |
S > V > O 的 S、O 槽位 |
槽位边 concept ⇄ action | 0.8 |
utterance |
K > 表示 > (P)、认知指向类 |
言说引用边 action → action | 0.5 |
modifier |
显然 : (P)、(AI:方面) : (P) |
修饰边 scope/sent_mod → proposition | 0.6 |
logical |
(P1) > 则 > (P2) |
逻辑前件边 / 逻辑后件边 | 按连词类分化(§3.2) |
边的方向 = 能量流动方向(与 > 本体定义一致):条件 → 结论、原因 → 结果、前件 → 后件、说话者 → 言说内容。
2.3 节点门控属性(软过滤调节器 = 神经调质)
门控对应神经调质(多巴胺/去甲肾上腺素/乙酰胆碱)——不改变拓扑,只调节能量传递。
| 字段 | 取值 | 作用层 |
|---|---|---|
polarity |
+1 / −1 | L5 否定 |
quantifier |
所有 / 某 / 没有 / NULL | L5 量词 |
modality |
必须 / 可能 / NULL | L5 模态 |
voice |
active / passive / NULL | L2 语态一致性 |
connector_class |
条件 / 让步 / 因果 / 推论 / 目的 / 致使 / 认知 / 比较 / 言说(仅逻辑命题) | L4 连词类型 |
门控冲突惩罚:扩散时若源节点与目标节点的门控字段均非 NULL 且不相等,该条边传递的能量乘 gate_penalty(默认 0.1)。NULL 视为"未指定",不触发惩罚。
voice 字段的关键作用:把"被"从概念簇的修饰中抽离。A > 发布 > B(active)与 B > 被:发布(passive)应识别为同一事件的两种语态,入库管线自动抽取 被 → voice=passive,而不是让"被"成为概念簇的一部分污染嵌入空间。
2.4 边权重:按类型与连词类分化
连词权重按类别而非按具体词(条件类涵盖"则/否则/除非/当/只有",作者写哪个都归同一类):
| 连词类 | 默认权重 | 代表词 |
|---|---|---|
| 因果类 | 0.80 | 导致、使得、造成、引起、以致 |
| 致使类 | 0.75 | 促使、迫使、让、令、使、催生 |
| 条件类 | 0.70 | 则、否则、除非、当、只有 |
| 推论类 | 0.70 | 因此、所以、从而、故而、进而 |
| 认知指向 | 0.60 | 表示、认为、知道、察觉、发现 |
| 言说引导 | 0.60 | 说、告知、声明、问、答 |
| 比较类 | 0.60 | 比、胜过、不如、堪比、逊于 |
| 目的类 | 0.50 | 以便、为了、旨在、力求 |
| 让步类 | 0.30 | 尽管、虽然、即使、纵然(反预期,能量传递弱) |
归类由入库管线完成:作者按原句写任意连接词,管线查表归入九类之一。新词加入对应类别,不修改表达层规则。
2.5 基础激活 B_i(ACT-R,使用频率与近因)
借鉴 ACT-R 的 Base-Level Activation(大脑记忆的核心机制.md §5.2),每个节点维护:
$$ B_i = \ln!\left(\sum_{k=1}^{n} t_k^{-d}\right) $$
其中 t_k 是节点第 k 次被命中时距今的秒数,d 默认 0.5。
- 频繁被命中的节点 → B_i 高 → 同样线索下更易被激活
- 久未命中 → t_k 大 → B_i 衰减 → "想不起来"
最终节点能量(混合扩散能量 a_i 与基础激活 B_i):
E_i = a_i + α · softplus(B_i) α = 0.1(默认)
α 不宜过大,否则热门节点永远被召回(priming 失控)。仅 conclu 排序用 E_i,扩散过程本身仍用 a_i,避免基础激活层层累乘。
2.6 源表达式索引(海马体快照)
每个原子节点都挂一个 source_expr_id,回指完整的 SVO 算式 + 自然语言原句 + 文档位置。这层对应海马体保留的"共激活指针"——多次命中时,大脑通过索引同步回放所有相关皮层。工程上用它做:
conclu聚合:一条源表达式的总能量 = 其内部激活原子的能量之和- 可解释性:每一个返回单元都能指回原句与文档行号
- 重巩固(§6):命中的源表达式整体 B 加一次
三、概念向量索引(唯一独立索引 = 分布式表征)
扩散起点。查询解析得到的每个概念簇,在此索引上取 top-K 作为图入口。
3.1 编码策略:两阶段
阶段一(零训练,立即可用):加性组合
v(concept) = v(核心词) + Σ α^depth · v(修饰词_i)
α = 0.8
深度按 SVO 绑定的嵌套层级定义:最外层核心词 depth=0,每多一层 : 深度 +1。
阶段二(微调,精度提升):BGE-base / Qwen3-Embedding 主干 + 按 role 训练 4 个 LoRA 适配器(entity/concept/scope/sentence_mod),不强行统一编码空间。
训练对比对(阶段二):
- 同指正例:
K氏/Karpathy - 属性敏感正例:
(资深:工程师):李、(高级:工程师):李 - 混淆负例:同修饰不同核心词(
红:苹果vs红:汽车) - 属性翻转负例:
(前:CEO)vs(现任:CEO) - role 混淆负例:
(AI:方面)scope vsAIentity
3.2 按 role 分流召回
在一个大向量库中用 role metadata 过滤子集召回:
- 查询的实体词 → entity + concept 子库
- 查询的场景词 → scope 子库
- 查询的情态词 → sentence_mod 子库
避免 (AI:方面) 作为 scope 被当成 AI 实体召回(它们表达不同的本体角色)。
3.3 属性 / 力双子空间(可选,阶段二上线)
手册 §1.2 的二元本体建议显式投影到两个子空间(同一主干 + 两个投影头):
- 属性子空间:编码概念簇、scope、sentence_mod —— 在线扩散仅用此子空间,因为入口是概念簇
- 力子空间:编码动作命题、逻辑命题 —— 离线诊断、类比挖掘、未来端到端重排
两个子空间独立归一化,避免属性向量被力向量拉偏。
四、扩散激活检索流程
4.1 完整流程(与大脑四步严格对应)
查询(自然语言或 SVO 算式)
│
① 入口激活 ─ SVO 解析 → 概念簇集合
│ ├─ 解析成功:每个概念簇在向量索引取 top-K,初始 a_i = 余弦相似度
│ └─ 解析失败:整句向量化作单入口,降级模式(保证服务可用)
│
② 沿边扩散 ─ 并行 BFS,最多 max_hops 跳
│ ├─ 每一跳按边权衰减
│ ├─ 节点门控软过滤(冲突 × gate_penalty)
│ ├─ 扇出归一化(fan effect 防 hub 吞能)
│ └─ 全局距离衰减 global_decay
│
③ 激活汇聚叠加 ─ 多源能量在公共邻居上求和
│ └─ 噪声互相抵消、信号互相增强 = 模糊检索
│
④ 阈值触发 ─ E_i = a_i + α·softplus(B_i) ≥ threshold
├─ conclu:按 source_expr 聚合能量,top-M 返回
├─ info:top-N 原子,带能量与命中路径
└─ output:沿逻辑链前后展开至 logic_chain_max_depth
4.2 能量传播公式
每一跳:
a_j(t+1) = Σ_i [ a_i(t) · w_type(i→j) · gate(i,j) · fan_norm(i) ] · global_decay
其中:
w_type(i→j):边类型基础权重,逻辑边用连词类分化权重(§2.4)gate(i,j) = 1.0若所有非 NULL 门控字段一致;冲突则gate_penalty(默认 0.1)fan_norm(i) = 1/√fan_out(i)当fan_out(i) > fan_trigger,否则 1.0global_decay = 0.7
可行性自检(这些常数必须满足能量能跨 2 跳存活):
初始能量 ≈ 0.9(cosine)
1 跳后 ≈ 0.9 × 0.8 × 1.0 × 0.7 ≈ 0.50 > threshold=0.05 ✓
2 跳后 ≈ 0.50 × 0.7 × 1.0 × 0.7 ≈ 0.25 > threshold ✓
门控冲突 1 跳 ≈ 0.9 × 0.8 × 0.1 × 0.7 ≈ 0.05 勉强达阈 ✓(正符合"冲突项压到阈值附近"的设计)
让步类 1 跳 ≈ 0.9 × 0.3 × 1.0 × 0.7 ≈ 0.19 低但存活 ✓
最终排序能量(§2.5):E_i = a_i + 0.1 · softplus(B_i)。
4.3 扇出归一化(fan effect)
ACT-R 的扇出效应:高出度节点("AI"、"机器学习"、"深度学习")的能量均摊到所有出边。
fan_norm(i) = 1/√fan_out(i) 仅当 fan_out(i) > fan_trigger=20 触发。低出度节点不惩罚,避免过早衰减冷门节点。
监控指标:top-20 最高出度节点在 conclu 占总能量比例应 < 30%,否则提高归一化强度或降低 fan_trigger。
4.4 门控冲突的精细化(阶段二)
默认所有冲突乘同一个 gate_penalty=0.1。阶段二按冲突类型分化:
| 冲突类型 | 默认惩罚 | 理由 |
|---|---|---|
| polarity 翻转(肯定 vs 否定) | 0.05 | 最强信号,近乎反义 |
| quantifier 不一致(所有 vs 某 vs 没有) | 0.20 | 弱于极性但确实改变真值 |
| modality 不一致(必须 vs 可能) | 0.40 | 最弱,常表示近似信息 |
| voice 不一致(active vs passive) | 1.00 | 不扣分——同一事件的两种语态 |
| connector_class 不一致 | 0.25 | 已由边权分化承担一部分 |
4.5 默认参数(写入 config.yaml)
activation:
entry_top_k: 5 # 每入口概念召回候选数
max_hops: 2 # 最大扩散跳数
global_decay: 0.7 # 每跳全局距离衰减
threshold: 0.05 # 节点最低保留能量
gate_penalty: 0.10 # 默认冲突惩罚(阶段一)
fan_trigger: 20 # 出度超此值启用 fan 归一化
fan_normalizer: sqrt # sqrt / linear / none
base_activation_alpha: 0.10 # 基础激活混合系数
max_visited_nodes: 10000 # 防退化上限
edge_weight:
slot: 0.80
utterance: 0.50
modifier: 0.60
logical:
因果: 0.80
致使: 0.75
条件: 0.70
推论: 0.70
认知: 0.60
言说: 0.60
比较: 0.60
目的: 0.50
让步: 0.30
output:
conclu_top_m: 10 # 结论层表达式数
info_top_n: 30 # 证据层原子数
logic_chain_max_depth: 4 # 逻辑链展开深度
4.6 三层输出契约(向下兼容现有 BuildContextFragments)
def SpreadingActivationSearch(query: str) -> tuple[str, str, str]:
"""返回 (conclu, info, output)"""
- conclu(结论层):top-M 源表达式(SVO canonical + 自然语言回译),按聚合能量排序。聚合能量 = 该源表达式内部被激活原子的能量之和,带长度惩罚,去重。LLM 的主要生成依据。
- info(证据层):top-N 激活原子,每条带
(atom, energy, entry_sources, hop_path)。用于调试、人工排错、LLM 定位命中点。 - output(推导层):扫描激活到的逻辑命题,沿逻辑前件/后件边前后向各展开至
logic_chain_max_depth跳——即使链上节点未达阈值也补齐,保证 LLM 看到完整因果/条件链。对应大脑扩散激活触发后整段情境快照被完整回放。
4.7 典型扩散场景
| 查询 | 扩散行为 | 结果 |
|---|---|---|
(模型>开源) > 则 > (?) |
入口激活 模型、开源 → 槽位边到命题 模型>开源 → 逻辑前件边 |
connector_class=条件 的后件能量最高 |
所有:学生 > 通过 > 考试 |
候选 某:学生 > 通过 > 考试 因 quantifier 冲突能量 × 0.2 |
量词匹配命题排前 |
现有:框架 > 适用 |
候选 现有:框架 > 不:适用 因 polarity 冲突 × 0.05 |
反义命题降至阈值以下 |
(AI:方面) : (K > 偏向 > X) |
scope 入口经修饰边激活命题;其他域命题拿不到此路径能量 | 域外相关命题降权 |
A 促使 B 认识到 C 类比 |
结构同构命题在图中拓扑接近,扩散自然汇聚 | L6 类比无需专门结构哈希 |
谁说 AGI 还要十年 |
AGI、十年之遥 入口 → 动作命题 → utterance 反向边 |
言说者节点浮现 |
五、数据模型
-- 概念簇(唯一向量索引)
CREATE TABLE concept (
id BIGSERIAL PRIMARY KEY,
canonical TEXT NOT NULL, -- (前:负责人):Karpathy
core_word TEXT NOT NULL, -- Karpathy
modifiers TEXT[] NOT NULL, -- [前, 负责人]
role VARCHAR(16) NOT NULL, -- entity|concept|scope|sentence_mod
vector VECTOR(768),
base_activation FLOAT NOT NULL DEFAULT 0, -- B_i
last_hits_ts TIMESTAMPTZ[] -- 最近 N 次命中时戳(环形缓冲,计算 B_i 用)
);
CREATE INDEX idx_concept_role ON concept(role);
-- 动作命题(图节点)
CREATE TABLE action_proposition (
id BIGSERIAL PRIMARY KEY,
subject_id BIGINT REFERENCES concept(id),
verb TEXT NOT NULL,
object_id BIGINT REFERENCES concept(id), -- NULL 时宾语是 PropRef
object_ref BIGINT, -- PropRef 指向另一命题
polarity SMALLINT NOT NULL DEFAULT 1, -- 门控
modality VARCHAR(16), -- 门控
quantifier VARCHAR(16), -- 门控
voice VARCHAR(8) DEFAULT 'active', -- 门控:active/passive
base_activation FLOAT NOT NULL DEFAULT 0,
last_hits_ts TIMESTAMPTZ[],
source_expr_id BIGINT NOT NULL
);
-- 逻辑命题(图节点)
CREATE TABLE logical_proposition (
id BIGSERIAL PRIMARY KEY,
antecedent_id BIGINT NOT NULL REFERENCES action_proposition(id),
connector_raw TEXT NOT NULL, -- 原句连接词(则/尽管/由于/从而迫使/...)
connector_class VARCHAR(16) NOT NULL, -- 九类之一:条件/让步/因果/推论/目的/致使/认知/比较/言说
consequent_id BIGINT NOT NULL REFERENCES action_proposition(id),
base_activation FLOAT NOT NULL DEFAULT 0,
last_hits_ts TIMESTAMPTZ[],
source_expr_id BIGINT NOT NULL
);
CREATE INDEX idx_logical_class ON logical_proposition(connector_class);
-- 引用关系(图边表;双向索引即邻接结构)
CREATE TABLE prop_ref (
id BIGSERIAL PRIMARY KEY,
source_type VARCHAR(16) NOT NULL, -- action|logical|concept
source_id BIGINT NOT NULL,
target_type VARCHAR(16) NOT NULL, -- action|logical|concept
target_id BIGINT NOT NULL,
ref_type VARCHAR(16) NOT NULL, -- slot|utterance|modifier|logical_ante|logical_cons
weight_override FLOAT -- 阶段三学习权重,NULL 用类型默认
);
CREATE INDEX idx_ref_target ON prop_ref(target_type, target_id, ref_type);
CREATE INDEX idx_ref_source ON prop_ref(source_type, source_id, ref_type);
-- 源表达式(conclu 聚合回溯 = 海马体快照)
CREATE TABLE source_expression (
id BIGSERIAL PRIMARY KEY,
canonical TEXT NOT NULL, -- SVO canonical
natural TEXT NOT NULL, -- 自然语言原句
doc_id BIGINT,
line_no INT,
base_activation FLOAT NOT NULL DEFAULT 0,
last_hits_ts TIMESTAMPTZ[]
);
关键设计:
concept向量独立存储在 Qdrant / Milvus,concept.id与向量 metadata 互相映射。- 内存图从 Postgres 的
prop_ref双向索引加载为numpy / scipy稀疏邻接,百万节点 ≈ 500 MB。 base_activation与last_hits_ts是可巩固字段:命中时更新(§6)。weight_override留给阶段三的端到端边权学习;阶段一、二为 NULL 不启用。
六、记忆巩固:离线重放与再巩固
这一节是本方案相对旧版的核心增量——把大脑记忆"快照 → 回放 → 巩固"(大脑记忆的核心机制.md §三、§5.4)显式搬入工程层。
6.1 海马体 ↔ 皮层:两层记忆组织
- 海马体层(episodic,短期高塑性):
source_expression+ 原子级base_activation。每次入库/命中都快速修改。 - 皮层层(semantic,长期稳定):图结构(节点 + 边)+ 稳定化的边权
weight_override。只在离线巩固时修改。
类比 CLS(Complementary Learning Systems, 大脑记忆的核心机制.md §5.4):
短期系统承担单次事件的快速记录,长期系统从反复回放中提取统计规律。
6.2 在线命中即重巩固(reconsolidation)
每次查询命中后,对命中的源表达式与其内部原子执行:
def on_hit(node, now):
node.last_hits_ts.append(now)
if len(node.last_hits_ts) > MAX_HITS_BUFFER:
node.last_hits_ts.pop(0)
node.base_activation = log_sum_power_decay(node.last_hits_ts, d=0.5)
效应:
- 频繁被查的节点 B 上升 → 下次更易被召回(priming)
- 久未命中的节点 B 自然衰减 → 不删除,只"想不起来"
- 每次命中都是一次学习,符合
大脑记忆的核心机制.md§3.2 的 reconsolidation
6.3 离线巩固任务(类慢波睡眠)
定时任务(每日/每周)执行:
- 扫描高频共现边:过去 N 天查询中,哪两个节点经常同时被高能量激活 → 记录为候选赫布强化对。
- 赫布更新
weight_override:Δw_ij = η · a_i · a_j · μ η = 0.01(学习率) μ ∈ [0.5, 2.0] 按情绪/显著性(见 §6.4) - 突触稳态归一化:每个节点所有出边权重之和若超过
homeostasis_cap(默认 N × base_weight),整体等比缩放——防止某些节点所有出边无限增强。 - 提取规律到皮层层:如果
A → B → C的路径在多次查询中都被高能量激活,可增加A → C的快捷边(学习到的规律性连接,阶段三才启用)。
这对应脑的慢波睡眠回放(大脑记忆的核心机制.md §3.3, §6.2):
Experience replay(RL)、多 epoch 训练都是对应的工程机制。
6.4 情绪 / 显著性门控(可选)
不是所有命中都值得长期巩固。可引入 salience 信号作为神经调质 μ:
| 信号 | μ 乘数 | 说明 |
|---|---|---|
| 用户显式反馈(点赞 / 采用) | 2.0 | 最强显著性 |
| LLM 生成时引用 | 1.5 | 下游任务确认有用 |
| 单次查询中能量异常高(> μ+2σ) | 1.2 | 明确命中 |
| 普通命中 | 1.0 | 基线 |
| 疑似噪声召回(能量极低) | 0.5 | 弱化,防止扩散噪声被固化 |
μ 对应多巴胺(预测奖赏)、去甲肾上腺素(惊讶)、乙酰胆碱(专注)的联合调节(大脑记忆的核心机制.md §2.3)。
七、核心挑战与对策
7.1 SVO 解析器稳定性(最大风险点)
扩散架构对解析器依赖比旧架构更重——解析结果直接决定入口概念集合。
行动指引:
- 解析一致率基准:500 句自然语言 × 10 个人工改写(同语义),统计结构指纹一致率。
- 一致率门槛:< 85% 不得投入生产。
- 双轨降级:解析成功 → 多入口;解析失败 → 整句向量化单入口(§4.1)。
- 重点稳定"作用域 vs 条件"识别:中文"在 X 的情况下"歧义最高,必须用上下文特征分类,不能靠正则。
- 解析器版本化:每次解析器升级重建全量
concept向量与prop_ref;灰度期保留两份索引。
7.2 编码器敏感度要求
向量层需区分:
- 角色翻转:
A > 杀 > BvsB > 杀 > A(由命题节点区分,向量只需区分A、B) - 同义动作:
喜欢vs爱(需向量区分;主要由人工对比对训练) - 作用域翻转:
(战时)vs(和平)(scope 子索引)
注意:极性翻转、连词翻转主要由门控 + 边权分化承担,向量辅助。不要试图让向量承担全部语义区分——那是旧架构的技术债。
7.3 参数校准(扩散架构特有)
gate_penalty × global_decay需过threshold:0.1 × 0.7 × 1.0 = 0.07 勉强过 0.05。必须用标注集校准。- 连词权重相对值:条件 0.7 vs 让步 0.3 的比值直接决定反预期召回率。
- 扇出归一化触发点:
fan_trigger=20为经验初值,需监控 Hub 能量占比。 - 基础激活混合系数 α:α 过大 → 热门节点永远浮现(priming 失控);α 过小 → 无 recency/frequency 效应。建议 [0.05, 0.2]。
方法:阶段一 100 条 (query, expected) 标注 + 脚本化 grid search;阶段二 500+ 对监督学习。
7.4 Hub 能量流失
中心节点("AI"、"模型"、"深度学习")因入度/出度极高,容易吞掉全图能量或把能量分散到无关节点。
对策分层:
- 扇出归一化(§4.3):已在公式内置
- 阶段二边权学习:度越高的节点,出边基础权重按
1/log(fan_out)再衰减 - 阶段三 edge attention:用 GNN 学习上下文相关的边权
八、工程落地路径
8.1 基础设施选型
| 组件 | 选型 | 理由 |
|---|---|---|
| 概念向量索引 | Qdrant / Milvus / MindStore | 支持按 metadata(role)过滤 |
| 关系表 & 图边表 | Postgres | 外键一致,prop_ref 双向索引即邻接结构 |
| 内存图 | numpy / scipy sparse | 百万节点 ≈ 500 MB |
| 编码器 | BGE-base / Qwen3-Embedding + LoRA | 中文效果好、微调成本低;复用本仓库已有 checkpoint |
| 扩散算法 | 纯 Python 模块 | 无需新服务;热点可异步 C 扩展 |
| 离线巩固 | Airflow / 定时脚本 | 每日/每周跑 §6.3 |
废弃基础设施(相对旧四层索引):
- Elasticsearch 倒排 → 槽位边扩散替代
- Redis 结构哈希 → 扩散自然实现 L6 类比
- pgvector 的前后件向量列 → 逻辑命题作为图节点,不再独立向量化
8.2 三阶段演进
阶段一 MVP(2–4 周)
- 跑通 SVO 解析 → 多入口 → 类型化边扩散 → 三层输出
- 概念编码用加性组合(零训练)
- 参数从 §4.5 初值起手调;100 条标注做 grid search 校准
threshold/gate_penalty - 基础激活 B 字段保留但不在排序生效(α = 0)
- 目标:验证扩散能量排序能替代旧架构的学习排序
阶段二 精度提升(1–2 月)
- 编码器微调:概念按 role 训练 4 个 LoRA
- 扇出归一化从
sqrt改为按边类型 + 节点度数的联合学习权重 - 连词权重从手调改为小规模监督学习(500+ 对)
- 门控系数按冲突类型细化(§4.4)
- 基础激活上线:α = 0.1,MAX_HITS_BUFFER = 50
- 开启 reconsolidation(§6.2)
- 目标:L3/L4 召回率显著提升,Hub 能量占比 < 30%
阶段三 持续优化
- 离线巩固任务上线(§6.3),启用
weight_override与学习到的快捷边 - 全图 edge attention(类 GNN),端到端学习边权
- 属性 / 力双子空间投影上线(在线仍只用属性子空间)
- 显著性门控(§6.4):用户反馈回流强化信号
- 多模态入口:图片 / 音频作为入口激活源
- 激活缓存:高频查询启动效应(priming)
8.3 评估指标
SVO 固有指标: 角色准确率 / 极性准确率 / 量词一致率 / 作用域覆盖率 / 嵌套深度保持率 / 连词一致率 / 逻辑链完整率。
扩散架构新增指标:
| 指标 | 定义 | 目标 |
|---|---|---|
| 扩散覆盖率 | 目标命题在 2 跳内被激活到的比例 | > 90% |
| 能量信噪比 | top-K 结果能量均值 / 第 K+1 位能量 | > 2.0 |
| Hub 能量占比 | top-20 最高出度节点能量 / 总能量 | < 30% |
| 门控过滤准确率 | 冲突门控命题被压至阈值以下的比例 | > 85% |
| 基础激活效应 | priming 命中在同一会话内耗时下降比例 | 阶段二 > 20% |
| 巩固稳定性 | 离线巩固前后 top-10 变化率 | < 15%(避免震荡) |
九、操作快查表
| 检索需求 | 扩散实现 |
|---|---|
| 含特定实体的表达式 | 实体词为入口概念激活 |
| 含特定话题 / 场景 | scope 概念为入口 + 修饰边 1 跳 |
| 含句子级态度词("显然") | sentence_mod 概念为入口 |
| 角色精确匹配动作命题 | 入口 + 槽位边 1 跳 |
| 结构类比动作命题 | 多入口扩散自然实现 |
| 语义模糊相似动作命题 | 入口 top-K + 扩散 2 跳 |
| "如果 X 则…"推导 | X 入口 → 激活逻辑命题 → 后件边,connector_class=条件 权重最高 |
| "…导致 X"推导 | X 入口反向沿前件边,connector_class=因果 权重最高 |
| 特定连词推导链 | 连词类别权重直接分化,无需额外过滤 |
| 避免召回反义命题 | polarity 门控 × 0.05 衰减 |
| 避免召回不同连词 | 条件 0.7 vs 让步 0.3 的权重差异自动压制 |
| 追溯"谁说了这句话" | 沿 utterance 反向边扩散 |
| 展开"他说了什么" | 沿 utterance 正向边扩散 |
| 追溯推导前提 | 沿逻辑前件边反向 / output 层逻辑链补齐 |
| 展开推导后果 | 沿逻辑后件边正向扩散 |
| 热门词不要永远浮现 | 扇出归一化 + α 限制基础激活影响 |
| 频繁被查的信息优先 | 基础激活 B_i 上升 + α·softplus(B) 参与排序 |
| 区分同事件的主动/被动语态 | voice 门控不扣分,聚合在同一命题 |
十、参考
- SVO 算子规范与原子定义:
Agent/svo/SVO语义矢量算子手册.md - 生物学原型与设计灵感:
Agent/svo/大脑记忆的核心机制.md - SVO 表达层输入规范:
Agent/svo/SVO表达指令.md - 现有检索接口(待对接):
Auto/gen_qdrant_dataset.py中的BuildContextFragments