TreeHeap 代数:先做数学闭包,再谈语言推理

前一篇守夜训练给了一个重要教训:

只靠 local BPE context objective,
不能证明 TreeHeap 学出了世界模型。

这不只是 loss 设计问题。 更深一层的问题是:

TreeHeap 现在还不像一个完整的数学系统。

目前我们实现得最多的是:

L0(token) x path/world -> CMul -> t_merge

这相当于只有一个核心参与乘积。

它可以保存信息,可以调制方向,也可以让 token 带上 path 背景。 但它不一定能完成:

转置
求逆
分解
投影
组合
能量排序
概率坍缩

如果这些操作都没有定义,TreeHeap 就还不是一个“堆数据结构”。 它只是一个带名字的向量变换层。

所以这篇文章先不谈 WMT,也不谈 BLEU。 我们先退一步:

TreeHeap 能不能先成为一个可计算的代数系统?

为什么先做代数

语言推理是上层问题。

比如翻译:

中文结构 -> 英文结构 -> 英文表面句子

这里面当然有语义、语法、文化和世界知识。 但在 TreeHeap 视角下,它首先需要一些更基本的能力:

一个结构能不能合成?
合成后能不能分解?
一条关系能不能反过来看?
一个对象能不能投影到某个参考系?
投影后能不能回来?
一组候选结构能不能排序?
不确定时能不能先保留概率?

这些不是语言专属问题。 这些是数学操作问题。

如果这些操作不稳定,那么后面说“世界模型”“推理”“翻译”都太早。

这就是这篇文章的核心判断:

先建立 TreeHeap Algebra。
再把语言推理放到这个代数系统上。

什么叫数学闭包

本科计算机里经常会见到“闭包”这个词。

例如整数加法:

整数 + 整数 = 整数

所以整数对加法是封闭的。

但:

整数 / 整数 = 不一定是整数

例如:

1 / 2 = 0.5

所以整数对除法不封闭。

放到 TreeHeap 里,我们想要的是:

TreeHeap object op TreeHeap object -> TreeHeap object

也就是说:

两个 TreeHeap 对象做完操作,
结果还应该是一个 TreeHeap 对象。

如果每次操作完都跑出空间,只能交给神经网络硬猜,那数学结构就没有帮上忙。

TreeHeap 对象是什么

先定义一个最小对象:

H = (v, p, s, q)

其中:

v: semantic/world vector
p: heap path or structural coordinate
s: latent slot distribution
q: probability mass / confidence

口语一点说:

v 是“它是什么”
p 是“它在堆里的位置”
s 是“它像在哪些潜在槽位上”
q 是“我们对它有多确定”

这比一个裸向量多一点结构。

TreeHeap 不应该只保存:

128D vector

它应该保存:

向量 + 结构坐标 + 槽位分布 + 概率质量

这才像一个高维堆对象。

操作一:compose 合成

compose 是:

compose(H1, H2, ..., Hn) -> H_parent

意思是:

多个 child heap objects 合成一个 parent heap object。

例如:

foot + ball -> football

或者在句子结构里:

kick + ball + goal -> event/state

关键不是简单加法。 compose 应该同时更新:

v: 世界状态变了
p: 结构位置变了
s: 槽位分布变了
q: 置信度变了

如果 compose 只是:

v_parent = v1 + v2

那它太弱。

操作二:decompose 分解,也就是逆树堆

如果有合成,就自然会问有没有逆操作。

compose(children) -> parent

反过来:

decompose(parent) -> children

这就是“逆树堆”的直觉。

但是语言里一般没有唯一逆。

例如:

football

可以拆成:

foot + ball
sport + ball
game + object

所以 decompose 不应该返回一个硬答案。

它应该返回概率容器:

{
  foot + ball:    0.52
  sport + ball:   0.31
  game + object:  0.17
}

这和之前说的 Probability Container 是同一个思想。

逆树堆不是普通函数逆。 更准确地说,它是:

probabilistic inverse

操作三:transpose 转置

矩阵里有转置:

A -> A^T

TreeHeap 里也需要类似操作,但含义不是把二维表格翻过来。

TreeHeap 的转置更像:

关系方向反转

例如:

edge(parent, child, role)

转置后:

edge(child, parent, inverse_role)

它应该满足一个基本性质:

transpose(transpose(edge)) ≈ edge

也就是转两次应该差不多回来。

为什么这对翻译重要?

因为不同语言经常从不同方向表达同一关系。

例如中文和英文的修饰、介词、话题结构,方向可能不一样。 如果 TreeHeap 没有 transpose,就很难用数学操作表达:

同一个关系,换一个方向读。

操作四:project 投影到参考系

我们一直说世界模型和参考系。

project 就是:

project(H, frame) -> H_frame

例如:

project(ball, sport_frame)

和:

project(ball, kitchen_frame)

应该不一样。

同一个对象进入不同参考系,解释方向不同。

这对应前面的例子:

football - ball -> foot / kick / field / goal
basketball - ball -> hand / throw / court / basket

如果没有 project,向量差分只是数字。 有了 project,差分才变成:

这个变化在什么世界里被解释?

操作五:unproject 反投影

如果能投影,就要问能不能回来:

unproject(project(H, frame), frame) ≈ H

这叫 projection roundtrip。

如果做不到,说明投影丢了太多信息。

但也不能完全不变。 如果 project/unproject 只是 identity echo,那也没意义。

所以它要同时满足两个条件:

1. roundtrip 后能大致回到原对象。
2. 在 frame 内部确实改变了可解释方向。

这就是难点。

操作六:energy 能量

energy 是:

energy(H) -> scalar

它给 TreeHeap 对象打一个一致性分数。

低能量表示:

这个对象更像一个合法结构。

比如:

compose(foot, ball)

应该比:

compose(engine, snow)

在 sport-ball frame 下能量更低。

但注意,energy 不是“真理”。 它只是排序工具。

最小 predict:P-ALG01

现在可以写一个新的 predict:

P-ALG01:
如果 TreeHeap 是可用的数学底座,
那么 compose、decompose、transpose、project、unproject、energy
这些操作应该在 TreeHeap 对象空间内近似封闭。

也就是说:

操作前是 TreeHeap 对象。
操作后仍然是 TreeHeap 对象。

而不是变成一堆无法解释的向量碎片。

怎么实验

先不要跑 WMT。

先跑四个数学实验。

E-ALG01: compose/decompose 往返

children -> compose -> parent -> decompose -> children'

看:

children' 能不能在 top-k 里找回原 children。

失败标准:

找回率不超过 random / nearest baseline。

E-ALG02: transpose 两次回来

edge -> transpose -> transpose -> edge'

看:

edge' 是否接近原 edge。

失败标准:

转置两次还不如不转。

E-ALG03: project/unproject 往返

H -> project(frame) -> unproject(frame) -> H'

看:

H' 是否接近 H。

同时还要看:

project 后是否真的提升 frame 内 relation ranking。

否则就是 echo。

E-ALG04: 闭包压力测试

反复做:

compose
project
transpose
decompose
normalize

看有没有:

norm explosion
global cosine collapse
energy drift
probability mass invalid

如果反复操作几轮就炸掉,那 TreeHeap 还不是稳定代数。

和 WMT 的关系

这一步看起来远离翻译,其实是在给翻译铺地基。

如果 TreeHeap Algebra 成立,S2 翻译可以变成:

source TreeHeap
-> transpose / project
-> target frame TreeHeap
-> decompose / collapse
-> target sentence

也就是:

用数学操作迁移结构,
再用模型生成表面语言。

否则就只能回到:

source tokens -> black-box decoder -> target tokens

那 TreeHeap 的意义就不明显。

当前架构判断

现在可以把之前的判断整理成三句话:

Echo preserves information.
CMul carries participation.
World model requires algebraic topology operations.

中文就是:

Echo 保存信息。
CMul 携带参与关系。
世界模型需要代数拓扑操作。

所以接下来不是继续加大 local context 训练。

下一步是:

先设计 TreeHeap Algebra。
再训练模型学习这个代数里的未知映射。

ARA 状态

新增 predict:

P-ALG01

新增设计文档:

ara/s2-translation/logic/solution/treeheap_algebra.md

下一步 planned evidence:

ara/s2-translation/src/treeheap_algebra_probe.py
ara/s2-translation/evidence/treeheap_algebra_probe/

状态:

Design phase.

还没有 claim。

最后一句话

TreeHeap 不应该只是一个乘法层。

它应该先成为一个能做:

合成
分解
转置
投影
反投影
能量排序
概率保留

的高维堆代数系统。

语言推理不是第一层。

语言推理是这个代数系统上的应用。

License: GPLv3