Files
WpyQwq 643e22ecb9 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,读写关闭时与原生模型逐位相同
2026-09-19 11:11:31 +08:00

63 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 端到端测试发现(回答级,非代理指标)
之前所有结论都建立在**路由器级**评分卡上。本文件记录回答级(写入证据 → 路由器读取 → 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 用例)可作为产品基线,但它测的是规则路径 + 生成能力,不是路由器。