Natural Memory NM2.1: 记忆路由器分叉、数据集缺陷修复与全轴评测证据

- 引入 MemoryRouterXL 与 v5/v6 流式多线程训练/编码管线
- 修复 prepare_memory_router_dataset 候选池重建缺陷(mega 家族 3568x 加速,输出逐字节相同)
- 修复 v5 被破坏的拒答与多跳标签(train 未知样本 319 -> 16319,multi_hop 平均正例 1.00 -> 2.00)
- 同存储预算下 V2-128 v6 逐轴 22/22 通过:Top-1 41.12% -> 94.62%,未知拒答 0.00% -> 100.00%
- 记录三条被实测推翻的显然优化(logits_to_keep=1 反而慢 55%、XL 容量未带来收益)
- 记忆手术跨架构可移植性 14/14,读写关闭时与原生模型逐位相同
This commit is contained in:
WpyQwq
2026-09-19 11:11:31 +08:00
commit 643e22ecb9
484 changed files with 306821 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
# 端到端测试发现(回答级,非代理指标)
之前所有结论都建立在**路由器级**评分卡上。本文件记录回答级(写入证据 → 路由器读取 → Qwen 生成 → 打分)的测试,以及它推翻了什么。
## 1. 先说结论
1. **在 v6 评测集上,端到端回答正确率与新路由器无关**:生产路由器与 V2-128-v6 得到**完全相同**的结果(总体 59.55%、可回答 59.38%、未知拒答 60.00%)。原因见 §2。
2. **路由器确实在一个真实失败模式上产生了产品级收益**:面对没有任何词法重叠的改写问句,旧路由器 **7/16 直接判断"不需要读记忆"**(已知问题被误拒 43.75%),新路由器 **0/16**。这与路由器级指标(已知被误拒率 11.23% → 0.00%)一致。
3. **但答对率只从 37.50% 提升到 43.75%**,且"答成别的属性"从 18.75% 升到 25.00%。瓶颈已经从"路由"转移到"证据精度与模型用证"。
4. **路由器的 Top-1 在纯语义改写上是弱的**:`top_k=1` 时 43.75% 答成别的属性。而路由器级评分卡上 paraphrase 类别 Top-1 是 99.65% —— 因为那些用例仍与事实共享属性词,属于词法+语义混合匹配。
## 2. 为什么 v6 端到端结果与路由器无关
在 44 个真实用例(覆盖全部 11 类)上统计检索决策来源:
| 决策来源 | 占比 |
|---|---:|
| `evidence_found`(规则化地址/词法命中) | 90.9% |
| `explicit_unknown_request`(识别"请明确说不知道") | 9.1% |
| 需要神经路由器决定记录选择 | 0%(规则已给出候选并命中) |
对同一批用例,生产路由器与 V2-128-v6 给出**逐位相同**的决策(`top` 值 8.367 / 4.168 / 8.536 全同,`page_ids`、`record_ids` 数量全同)。
机制(源码路径):`MemoryOSV2.read` 先用规则判断(显式未知请求 → 直接弃答),再问路由器的 `need_memory`;**候选页面/记录由库内 `_address_hits` / `_lexical_evidence_hits` 产生**,神经分数只在候选内排序。因此当查询与证据共享属性词时,规则已经解决了问题,路由器不改变结果。
**含义**:v6 评测集的构造方式(问句与事实共享属性措辞)使它对路由器不敏感;用这种数据无法测出路由器的优劣,也无法证明路由器能改善产品。
## 3. 路由器关键测试(规则无法决定)
构造:16 条**属性互异**的个人事实(因此冲突键不同、真实共存,不是互相覆盖)+ 16 个**与所有事实零词法重叠**的改写问句;答案是只出现在一条事实里的随机编码,因此"答成别的属性"可检测。写入 16 条事实 + 4 条无关填充后提问。
| 路由器 | 用例 | 回答正确率 | 答成别的属性 | 触发读取 | 规则命中用例 | 平均注入记录 | 决策来源 |
|---|---:|---:|---:|---:|---:|---:|---|
| 生产 128 维(v3) | 16 | 37.50% | 18.75% | **56.25%** | 6/16 | 2.88 | `evidence_found`:9, **`router_abstained`:7** |
| **V2-128-v6** | 16 | **43.75%** | 25.00% | **100.00%** | 6/16 | 6.38 | `evidence_found`:16 |
已知问题被误拒:**43.75% → 0.00%**(7/16 → 0/16)。
### 注入记录数扫描(V2-128-v6)
| `top_k_records` | 答对率 | 答成别的属性 | 平均注入记录 |
|---:|---:|---:|---:|
| 8(默认) | **43.75%** | 25.00% | 6.38 |
| 3 | 37.50% | 25.00% | 2.63 |
| 1 | 18.75% | **43.75%** | 1.00 |
减少注入量**使结果更差**:`top_k=1` 时 43.75% 答成别的属性,等于路由器在这些零重叠改写上的 Top-1 大约一半是错的。默认 8 条之所以得分最高,是因为模型能从更大的证据集里自己捞回正确答案——**这不是路由器的功劳,而是它的错误被大证据集掩盖了**。
## 4. 部署约束(实测)
| 路由器 | 能否直接替换生产路由器 | 原因 |
|---|---|---|
| V2-128-v6 | **能** | 16 个权重键与分片零差异,可驱动 `PagedMemoryBankV2` |
| XL-128-v6 | 不能 | 新架构,`MemoryRouterXL` 形状与运行时的 `MemoryRouterV2` 不兼容,需改运行时 |
| V2-512-v6 | 不能 | 需要把 `memory_router_dim` 128→512 并重建记忆地址 |
## 5. 下一步(按性价比排序)
1. **补训路由器的零重叠改写能力**:当前 paraphrase 训练样本仍共享属性词。用模板化改写(同义词/口语化/指代)生成"零词法重叠"样本,这是 §3 暴露的唯一缺口。
2. **证据精度而非召回**:默认注入 8 条时错答属性比例 25%,说明应当对注入证据做冲突键去重与属性一致性过滤,而不是单纯扩大 Top-K。
3. **重建评测集**:让问句与事实不共享属性措辞,否则任何路由器改进都无法在 v6 上体现。
4. 端到端 v6 全集(220 用例)可作为产品基线,但它测的是规则路径 + 生成能力,不是路由器。