Skip to content

Latest commit

 

History

History
150 lines (100 loc) · 6.47 KB

File metadata and controls

150 lines (100 loc) · 6.47 KB

P3 — 冲突词隔离测试(P4 性质的实证)

结论:分区条件下一切完美(判别 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

1. 设计

冲突词:同一个伪词,两位老师教互斥的含义(komalor:老师 A 说 = blue,老师 B 说 = red)。

为什么用冲突:泄漏必然可见——若 A 的 komalor 变成了红色,泄漏板上钉钉,无需统计推断 (DESIGN_CONCEPT_BENCH §6)。

两个条件:

条件 上下文
分区(partitioned) 只含 A 的概念 —— 模拟按 uid 分区的记忆
共享(shared) A 与 B 的概念同时在场 —— 模拟无隔离的共享记忆

留出集由微世界程序化生成(每对 8 条:4 正 + 4 负),负例刻意包含对方老师含义的实例——冲突正是在这里可见。


2. 结果

Q1 泄漏:对 A 留出集的判别力(阈值无关 AUC)

条件 AUC
分区 1.000(8/8 对全部完美)
共享 0.754
下降 −0.246,6/8 对出现下降

最严重的 ISO-08 掉到 0.281——低于随机 0.5,即系统性反向(A 的 tirene 被 B 的 yellow 带走)。

★ Q2 门控在冲突下是否仍准

条件 压缩门选对 A 的真实含义
分区 8/8 = 100%
共享 4/8 = 50% ≈ 随机

⟹ 没有分区,门就无法把概念归属到人。 这不是模型不行,是信息上就不可能—— 两个互斥定义同时在场时,观测数据本身不含"哪个属于谁"的信息。


3. ⚠️ 两处必须说清的限定

3.1 共享条件下的门控比较测的是顺序,不是两个独立候选

代码里:

g_shar_A = ΔNLL( "w means A.\nw means B." )
g_shar_B = ΔNLL( "w means B.\nw means A." )

是同样两句话的不同顺序。 所以严格说,它测的是「先提到的定义是否更占优势」。 答案是不占(50% = 随机)——位置不承载归属信息。

这是对「无分区时门能否归属」的一个合理操作化,但不得表述为"门在两个候选间选错了"。

3.2 共享条件是强形式污染,非自然泄漏

本实验把两条互斥定义直接放进同一上下文。真实的跨用户泄漏(PersistBench 报的 cross-domain 中位 53%) 是更隐蔽的——从另一个域检索到不该来的记忆。

本实验证明的是:互斥概念共处一境会同时破坏模型判别与门控归属,因而分区是必要的; 不是在自然泄漏场景下复现了 53%。度量不同,勿直接比数值。

3.3 方法学:为何用 AUC 而非 0.5 阈值(实测教训)

初版用 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 之后第二次"先验仪器再下结论"救了结论。)


4. 与 P4 主张的关系

主张 状态
按对话者分区后,门控准确 ✅ 8/8
不分区则门控失效 ✅ 50% = 随机
分区可做成架构性保证(key 空间硬分区) 🔴 未实现 —— 本轮是上下文级分区,不是记忆层级
自然泄漏场景下的泄漏率 🔴 未测 —— 本轮是强形式污染

诚实定位:本实验确立了隔离的必要性与分区后的正确性, 但尚未实现 product-key 记忆层的 uid 硬分区(研究文档 §7.4 的架构性零干扰主张仍未实证)。


4b. memory.py — 隔离作为架构保证而非约定

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(秒级,无依赖)。

4c. P0l — E5 第三条解法路径排除(反事实否定条件化)

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 ⟹ 标 💭 待预注册复现,不得写入论文。


5. 复现

python p3/p3_isolation.py --model Qwen/Qwen2.5-1.5B-Instruct

零训练算力,单机 MPS 约 8 分钟。