结论:分区条件下一切完美(判别 AUC 1.000、门控 8/8); 共享条件下判别力掉到 0.754、门控掉到 50%(= 随机)。 ⟹ 隔离不是工程洁癖,是机制正确性的前提。
| 日期 | 2026-08-01 |
| 模型 | Qwen2.5-1.5B-Instruct(冻结,bf16,纯 prompt,零训练) |
| 材料 | p1/isolation_p1.json 的 8 对冲突词 × 每对 8 条程序化留出决策 |
| 脚本 | p3_isolation.py · 结果 p3_Qwen2.5-1.5B-Instruct.json |
冲突词:同一个伪词,两位老师教互斥的含义(komalor:老师 A 说 = blue,老师 B 说 = red)。
为什么用冲突:泄漏必然可见——若 A 的
komalor变成了红色,泄漏板上钉钉,无需统计推断 (DESIGN_CONCEPT_BENCH §6)。
两个条件:
| 条件 | 上下文 |
|---|---|
| 分区(partitioned) | 只含 A 的概念 —— 模拟按 uid 分区的记忆 |
| 共享(shared) | A 与 B 的概念同时在场 —— 模拟无隔离的共享记忆 |
留出集由微世界程序化生成(每对 8 条:4 正 + 4 负),负例刻意包含对方老师含义的实例——冲突正是在这里可见。
| 条件 | AUC |
|---|---|
| 分区 | 1.000(8/8 对全部完美) |
| 共享 | 0.754 |
| 下降 | −0.246,6/8 对出现下降 |
最严重的 ISO-08 掉到 0.281——低于随机 0.5,即系统性反向(A 的 tirene 被 B 的 yellow 带走)。
| 条件 | 压缩门选对 A 的真实含义 |
|---|---|
| 分区 | 8/8 = 100% |
| 共享 | 4/8 = 50% ≈ 随机 |
⟹ 没有分区,门就无法把概念归属到人。 这不是模型不行,是信息上就不可能—— 两个互斥定义同时在场时,观测数据本身不含"哪个属于谁"的信息。
代码里:
g_shar_A = ΔNLL( "w means A.\nw means B." )
g_shar_B = ΔNLL( "w means B.\nw means A." )是同样两句话的不同顺序。 所以严格说,它测的是「先提到的定义是否更占优势」。 答案是不占(50% = 随机)——位置不承载归属信息。
这是对「无分区时门能否归属」的一个合理操作化,但不得表述为"门在两个候选间选错了"。
本实验把两条互斥定义直接放进同一上下文。真实的跨用户泄漏(PersistBench 报的 cross-domain 中位 53%) 是更隐蔽的——从另一个域检索到不该来的记忆。
本实验证明的是:互斥概念共处一境会同时破坏模型判别与门控归属,因而分区是必要的; 不是在自然泄漏场景下复现了 53%。度量不同,勿直接比数值。
初版用 0.5 阈值算准确率,得到 0.00 的假象。查证发现:
| 上下文 | 实例 | p(yes) |
|---|---|---|
komalor means blue. |
蓝色项 | 0.245 – 0.349 |
| 同上 | 红色项 | 0.020 – 0.023 |
判别信号强(约 14×),但绝对值全在 0.5 以下——模型对陌生伪词谓词有系统性 No 偏置。
★ 这反过来佐证了机制设计:压缩门用连续 NLL 而非阈值化决策,不受该偏置影响 ——同一条 ISO-01 上"准确率 0.00"而门控 ✅。阈值无关的 AUC 才是正确度量。
(这是继 P0h 之后第二次"先验仪器再下结论"救了结论。)
| 主张 | 状态 |
|---|---|
| 按对话者分区后,门控准确 | ✅ 8/8 |
| 不分区则门控失效 | ✅ 50% = 随机 |
| 分区可做成架构性保证(key 空间硬分区) | 🔴 未实现 —— 本轮是上下文级分区,不是记忆层级 |
| 自然泄漏场景下的泄漏率 | 🔴 未测 —— 本轮是强形式污染 |
诚实定位:本实验确立了隔离的必要性与分区后的正确性, 但尚未实现 product-key 记忆层的 uid 硬分区(研究文档 §7.4 的架构性零干扰主张仍未实证)。
p3_isolation.py 测的是模型行为上的隔离;memory.py 是把该保证下沉到数据结构的参考实现,
三条设计承诺各有测试(test_memory.py,14/14 通过,纯 CPU 无需模型):
| 承诺 | 机制 | 对应测试 |
|---|---|---|
| 键空间硬分区 | 条目键 (uid, word);没有任何 API 接受跨 uid 检索 |
T4a–T4d(含"键空间不相交、无对象别名") |
| 门是 L2 唯一入口 | REJECT 立即淘汰;ASK / DEFER 留 L1 计龄 | T1a/T1b/T2/T6 |
| 写入前可逆性 | 未毕业条目超龄自动 expire,永不进 L2 | T3a–T3c |
要点在于隔离不可表达(没有能跨 uid 的调用),而不是"调用了但过滤掉了"——后者靠约定, 前者靠类型。T4c 因此直接断言键空间不相交且无对象别名。
复现:python p3/test_memory.py(秒级,无依赖)。
p0l_counterfactual.py:把条件化写成 "{w} means M, not M′",试图用显式否定绕开 E5。
失败——全局 margin 反降(+16.71 → +8.00),G5 五种措辞全负。
关键在自埋的诊断项:对照臂 emph(纯强调、不含任何对立信息)改善 +18.57,
反而高于 neg 的 +16.13 ⟹ 那点改善来自加词的 nuisance,不是反事实机制。
没有这个对照,neg 的 +16.13 会被读成"反事实条件化有效"。
⟹ E5 的三条路径至此全部排除:P0i 忠实性探针 / P2-D 言语化对比 / 本条反事实否定。
🟡 旁支
rule(iff 措辞)全局 margin +65%,但系事后从 5 个措辞里挑最大、判对仅 16→17 ⟹ 标 💭 待预注册复现,不得写入论文。
python p3/p3_isolation.py --model Qwen/Qwen2.5-1.5B-Instruct零训练算力,单机 MPS 约 8 分钟。