Skip to content

v7.13.5: LoCoMo 检索评测 + 召回聚合不再让影子沙压住相关度排序 - #12

Merged
sixgodgit merged 1 commit into
mainfrom
claude/intelligent-hawking-oeyjx8
Oct 12, 2026
Merged

sixgodgit merged 1 commit into
mainfrom
claude/intelligent-hawking-oeyjx8

Conversation

@sixgodgit

Copy link
Copy Markdown
Owner

起因

第一次在公开基准的真实数据上测 nyx。选的是 LoCoMo:10 段两人长对话,1536 道计分题。测的是零 LLM 的检索证据召回,也就是「前 k 条召回里,找到了多少标注的证据句」。

结果:nyx 的 recall@5 是 0.046,同一批句子上最朴素的 BM25 是 0.498。

原因

逐路排查后,SearchRouter 本身是对的:问「Caroline 什么时候去的 LGBTQ 互助小组」,它排第 1 的就是证据句。问题出在把几路结果合起来的那一步:

  • 聚合按来源优先级整段拼接。影子沙优先级 80,高于 SearchRouter 的 60,所以它返回什么,什么就占住最前面。
  • 影子沙只看「问句里某个词是不是某个实体名的一部分」,取出提到该实体的所有行,再按信任分排序,与问句其余部分无关。
  • 英文专名抽取又把句首的「Hey Caroline」当成了实体名。

结果是:问到人名的题,前几名全是「Hey Caroline! Good to see you!」这类打招呼的句子。

修法

影子沙的优先级从 80 降到 55,排到 SearchRouter 后面。SearchRouter 本来就把影子沙的命中并进候选,按「相关度 × 信任分」排序,所以信任反馈不会丢。

LoCoMo(语义关闭) v7.13.4 v7.13.5 BM25
总体 recall@5 0.046 0.546 0.498
总体 recall@10 0.459 0.619 0.565
多跳 recall@5 0.033 0.289 0.180

四个类别都高于 BM25。

没有针对测试集调参

  • 缺陷是在第 1 段对话上定位的。没参与诊断的第 2–10 段,recall@5 从 0.037 升到 0.546,幅度相同。
  • 只改了一个优先级,没有任何针对 LoCoMo 的参数。

其他评测不受影响

  • 纵向评测:35 个种子逐项与 v7.13.3 相同。
  • LongMemEval 小样本:中英文分数都相同。
  • 投毒演练、事故演练:结果相同。
  • 真实 Hermes 检查:通过。

新增与改动

  • benchmarks/locomo_eval.py:
    • 每段对话在独立子进程、独立目录里跑;
    • 逐轮走 provider.sync_turn 写入;
    • 证据编号规范化(数据里有 D:11:26、D8:6; D9:17 这类写法);
    • 附 BM25 参照。
  • 数据是 CC BY-NC 4.0,不进仓库。benchmarks/results/locomo_retrieval.json 只存分数。
  • tests/test_locomo_harness.py:用我自己写的同格式小样本端到端跑评测框架。把优先级改回 80 时,这项测试失败,前几名正是「Hey Ava!」。
  • longmemeval_eval.py:把召回对象映射到 seq 的逻辑抽成 map_to_seqs,供两个框架共用。

如实说明

  • 这是检索,不是别人报的问答准确率。那类分数是「大模型作答 + 大模型裁判」,口径不同,不能直接比。
  • 语义检索是关闭的:开发环境连不到 HuggingFace,没有嵌入模型。
  • 多跳题的全部证据进前 10,只有 17%。

验证

  • 全量 510 项通过。
  • 真实 Hermes 检查通过。

🤖 Generated with Claude Code

https://claude.ai/code/session_019ZZeQFn5F6mEbmX8vPsf4g


Generated by Claude Code

第一次在公开基准真实数据上测(LoCoMo,10 段长对话、1536 道计分题,零 LLM 检索证据召回):
nyx recall@5 0.046,最朴素的 BM25 0.498。

逐路排查:SearchRouter 自己排对了(证据句第 1);错在聚合 —— 按来源优先级整段拼接,
影子沙优先级最高(80 > SearchRouter 60),而它只看「问句里某个词是实体名的一部分」,
取出提到该实体的所有行按信任分排,与问句其余部分无关;英文专名抽取又把「Hey Caroline」
当成实体。问到人名的题,前几名全是打招呼的句子。

修法:影子沙排到 SearchRouter 后面(80 -> 55)。SearchRouter 已把影子沙命中并进候选、
按相关度 x 信任分排序,信任反馈不丢。

- recall@5 0.046 -> 0.546(BM25 0.498),recall@10 0.459 -> 0.619(BM25 0.565),四类都高于 BM25
- 缺陷在第 1 段对话定位;未参与诊断的第 2-10 段 0.037 -> 0.546,幅度相同
- 纵向评测 35 种子逐项与 v7.13.3 相同;LongMemEval 小样本分数相同;投毒 / 事故演练结果相同
- benchmarks/locomo_eval.py:子进程隔离、走 provider.sync_turn、证据编号规范化、BM25 参照;
  数据 CC BY-NC 不进仓库,results 只存分数
- tests/test_locomo_harness.py:自写同格式小样本端到端;优先级改回 80 时失败(前几名是「Hey Ava!」)
- longmemeval_eval:召回对象 -> seq 的映射抽成 map_to_seqs 供两个框架共用

验证:全量 510 通过;真实 Hermes 检查通过。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019ZZeQFn5F6mEbmX8vPsf4g
@sixgodgit
sixgodgit merged commit 134ee9c into main Oct 12, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants