不再借外部向量:从本地共现语料训练坐标,再测 TreeHeap Kernel

SPR-028 的结果是负面的:

frozen all-MiniLM embedding 坐标系下,
vector_add 明显强于 TreeHeap prob vector plus。

但 Houming818 指出一个关键问题:

这还不能 defeat TreeHeap。

原因是:

蒸馏源的数据本来就是 vector。

也就是说,all-MiniLM-L6-v2 已经把大量世界知识压进向量空间。

在这种空间里:

left + right

天然可能靠近:

compound target

所以 vector_add 赢,不奇怪。

这更像是在测试:

TreeHeap 能不能追上一个已经很强的向量空间。

而不是测试:

TreeHeap 能不能从语料共现中建立自己的坐标。

新方案:从语料共现训练小 embedding

这次改成 C 方案:

从本地小语料训练 embedding。

不使用预训练 embedding。

不使用外部模型坐标。

不使用 all-MiniLM

坐标系来自我们自己的小语料:

football means foot ball
football uses foot and ball
foot ball forms football
football belongs to ball
...

也就是:

语料共现
-> SGNS / SkipGram negative sampling
-> 小型 128D embedding 坐标

这更接近我们真正关心的问题:

数据中的共现信息,如何进入 TreeHeap?

实验脚本

脚本:

ara/s1-echo/src/s1_corpus_embedding_kernel_probe.py

执行主机:

io.grepcode.cn

证据:

ara/s1-echo/evidence/s1_corpus_embedding_kernel_probe/

坐标来源:

local SGNS corpus embedding
external_model = false
vocab_size = 85
corpus_sentences = 888
skipgram_pairs = 10448

这次不需要 proxychains4

因为没有下载外部模型或语料。

为什么 kernel 设计重要?

上一版 TreeHeap 的问题之一是:

reader 太自由。

它可以像一个普通 MLP 一样记训练集。

这不是真正的 TreeHeap 写入。

这次改成结构化 kernel:

left token  -> left child
right token -> right child
root        -> compose kernel(left_child, right_child)

也就是:

H[left]  = WriteLeft(left_vector)
H[right] = WriteRight(right_vector)
H[root]  = Compose(H[left], H[right])

TreeHeap 结构强制参与计算。

不是把所有节点摊平给一个大 reader。

对比模型

三个模型:

Model 含义
vector_add 直接 normalize(left + right)
concat_mlp 普通 MLP,看 [left, right, left*right, abs(left-right)]
structured_treeheap_kernel 左写入、右写入、root compose kernel

结果

Model Train cosine Test cosine OOD cosine OOD top1
vector_add 0.5705 0.5965 0.5785 0.000
concat_mlp 0.9994 0.6957 0.7321 0.167
structured_treeheap_kernel 0.9999 0.6801 0.7126 0.000

这次结果比 SPR-028 明显不同。

在本地共现坐标系里:

vector_add 不再天然统治。

TreeHeap kernel 的 OOD cosine:

0.7126

高于 vector_add:

0.5785

并且接近 concat MLP:

0.7321

所以这次 claim 是:

S1-WM-C02 -> supported pilot, narrow scope

为什么说 narrow scope?

因为 OOD top1 还没解决。

TreeHeap 的 OOD top1:

0.000

concat MLP:

0.167

也就是说,TreeHeap 的输出向量在平均 cosine 上更接近目标,但最近邻检索还没有稳定命中目标词。

这说明:

坐标接近性有进展。
离散概念坍缩还没完成。

这个区别很重要。

在 TreeHeap 语言里可以说:

概率场靠近了目标区域,
但还没有稳定坍缩到目标点。

这证明了什么?

这次支持三件事。

第一:

用本地语料共现训练坐标是可行的。

第二:

kernel 设计会显著影响 TreeHeap 写入。

从自由 reader 改为:

left child / right child / root compose

之后,TreeHeap 不再像 SPR-028 那样崩掉。

第三:

TreeHeap 在本地共现坐标上可以超过 vector_add 的 OOD cosine。

这说明不能用 SPR-028 直接否定 TreeHeap。

这没有证明什么?

边界也要说清楚。

这次没有证明:

TreeHeap 已经有完整世界模型。
TreeHeap 已经能翻译。
TreeHeap 击败 Transformer。
TreeHeap 在 top1 检索上胜出。

它只是证明:

当坐标系来自本地共现语料,
并且 TreeHeap kernel 被结构化约束后,
TreeHeap 可以在 OOD cosine 上超过 vector_add。

这是一个小但重要的进展。

下一步

下一步不能只看 cosine。

要开始要求:

top1
MRR
margin loss
multi-seed
corpus variants

尤其要加入:

nearest-neighbor margin loss

否则模型可能只是“靠近目标区域”,但没有“坍缩到目标点”。

下一版 kernel 应该加入:

family slots
subheap reuse
route collapse regularization
explicit right-side shared kernel

例如:

ball family:
  football
  basketball
  baseball
  handball
  snowball

这些应该共享:

ball 子堆

这才是 TreeHeap 可能超过普通 MLP 的地方。

总结

SPR-028 告诉我们:

不能拿预训练向量空间里的 vector_add 输赢来直接判断 TreeHeap。

SPR-029 告诉我们:

从本地语料共现训练坐标后,
结构化 TreeHeap kernel 可以超过 vector_add 的 OOD cosine。

但下一关还在那里:

从靠近目标区域,
到稳定坍缩目标概念。

这就是下一轮 S1-WM 要打的点。