摘要

  • 研究重心已从“图结构驱动的长期记忆”切换为“Temporal Reasoning(时态推理)端到端闭环”
  • 已打通 检索 → 打包 → Reader → 评测 的可观测链路,修复事件未入索引与时间可见性问题;检索命中恢复正常。
  • 本月关键结论:检索侧 Hit@10 ≈ 0.26,但 nDCG@10 ≈ 0.019,排序质量是当前主要瓶颈;时间视图差异已很小。

研究重点变化(为何转向 Temporal Reasoning)

时间视图的核心:RAW / AW / AR

  • RAW:不做时间可见性裁剪,作为索引超集,只构建一次,复用全流程。
  • AW(As-World):按“真实世界状态”过滤,只保留在提问时刻仍有效的事实/事件。
  • AR(As-Recorded):按“当时记录”过滤,保留记录发生时的证据,便于审计溯源。

例子 1:会议改期

  • 10月1日记录:“会议在10月10日”。10月5日又记录:“会议改到10月12日”。
  • 问题 A(10月3日发问):“会议何时举行?”
    • AR:看到10月1日的记录 → 10月10日(改期记录尚未存在)。
    • AW:若以“真实世界当前已知”为准,10月3日仍只有10月10日 → 10月10日。
  • 问题 B(10月8日发问):“会议何时举行?”
    • AR:会返回两条记录(10日与12日),用于审计。
    • AW:应回答12日(最新有效状态)。
  • 意义:AW/AR 让系统在时间维度消解冲突,避免“旧事实”误导回答,AR 则保留审计轨迹。

例子 2:身份变更(住所迁移)

  • 2023年:“Alice 居住在巴黎”。2024年:“Alice 迁往柏林”。
  • 问题(2025年发问):“Alice 住在哪里?”
    • AW:柏林(当前有效)。
    • AR:会显示先巴黎后柏林的完整时间线,保证可追溯。

例子 3:订阅/合同到期

  • 订阅自 2024-01-01 至 2024-12-31。
  • 问题(2025-01-02):“订阅是否有效?”
    • AW:无效(已过期)。
    • RAW:索引里仍有该订阅事实,但在候选过滤阶段被 AW 裁剪掉。

落地方式:以 RAW 为索引超集(一次构建、复用),在检索结果阶段施加 AW/AR 可见性过滤;并在评测时对齐 gold 的时间视图,确保按时效取证

方法与系统改造(围绕 Temporal Reasoning)

设计目标

RAW→AW/AR 的时间视图体系为脊梁,完成从“数据生成/同化”到“检索/重排/打包/Reader/评测”的端到端闭环;并把“是否能检到”“是否被打包”“是否被引用”“是否答对”分段量化(可观测),便于迅速定位瓶颈。

端到端数据流(以一个对话片段为例)

对话原文(带时间戳)


[2025-10-01 09:00] U: 我们把项目会议定在10月10日早上。
[2025-10-05 18:12] U: 会议改到10月12日上午,地点在B203。
[2025-10-08 10:00] Q: 请问项目会议什么时候举行?

1) 预处理(memowrite)

  • 分句与说话人归一:识别 U(用户)为主语;抽出候选时间表达(“10月10日”“10月12日”)、地点(“B203”)。
  • 相对时间规范化:将日期映射为 ISO(2025-10-10, 2025-10-12),并附带时区。

2) 实体/别名/指代

  • 实体抽取:会议/Meeting(事件类)、B203(地点)。
  • 别名合并:将“项目会议”“会议”合并为同一个 Meeting(project) 概念。
  • 指代解析:第二句“会议”指向同一 Meeting(project)

3) 时间解析与对齐

  • 事件区间:
    • E1: Meeting(project)@2025-10-10 09:00(记录时间:2025-10-01
    • E2: Meeting(project)@2025-10-12 09:00(记录时间:2025-10-05,覆盖 E1)
  • 事实/状态:
    • F1: Meeting(project).location = B203(记录时间:2025-10-05

4) RBU 同化(状态转移)

  • 根据“更晚的记录覆盖更早的计划”的业务规则:E2 REPLACE E1 作为当前有效时间点;F1 写入地点状态。

5) 事件生成与存储(evidence)

  • 生成两条证据文档(示意 doc_id):
    • doc:event/meeting_20251010_v1(已被后续改期覆盖)
    • doc:event/meeting_20251012_v2(当前有效)
  • 以及地点事实:
    • doc:fact/meeting_location_b203_v1

6) 索引与可见性(RAW→AW/AR)

  • RAW 索引:一次性建库,收纳上述 doc 全部进入索引(含已过期/被覆盖条目)。
  • AW 过滤(As-World,回答时刻=2025-10-08 10:00):
    • doc:event/meeting_20251012_v2可见(有效且已记录)
    • doc:event/meeting_20251010_v1不可见(被覆盖)
    • doc:fact/meeting_location_b203_v1可见
  • AR 过滤(As-Recorded):
    • 可见两条事件记录(10日初版与12日改期),用于审计溯源。

7) 检索与重排

  • 查询构造:Q="项目会议 什么时候 举行" + 时间线索(观测时刻=2025-10-08)。
  • 候选生成:BM25 ∪ e5 融合(RRF)给出 Top-N。
  • 重排:交叉编码器(MiniLM)+ 可选时间相似度项 time_sim(E, Q)(“越接近回答时刻的有效事件,分越高”)。
  • 典型 Top-5(示例):
rankdoc_idkindscore(CE)time_simfused
1doc:event/meeting_20251012_v2event2.310.983.29
2doc:fact/meeting_location_b203_v1fact1.050.721.77
3doc:event/meeting_20251010_v1event1.120.121.24
4doc:note/meeting_summary_sepnote0.850.401.25
5doc:fact/old_room_b201fact0.600.050.65

AW 视图下,meeting_20251010_v1 会被可见性裁剪去除;RAW 下仍保留但排名落后。

8) 打包(pack)

  • 将 Top-K 文档折叠为文档级证据(chunk→doc 归一):生成 pack 表(示例):
rank_in_ctxdoc_idviewactive_at/intervalstokens
1doc:event/meeting_20251012_v2AW[2025-10-12 09:00, …]180
2doc:fact/meeting_location_b203_v1AW[2025-10-05 18:12, …]120
  • 计算 pack_hit@k(gold 是否进入 pack),并统计 pack_loss@k = retrieval_hit@k - pack_hit@k

9) Reader 与引用

  • 结构化回答协议(仅输出 JSON):
{
  "answer": "会议在10月12日上午举行,地点B203。",
  "citations": ["doc:event/meeting_20251012_v2", "doc:fact/meeting_location_b203_v1"]
}
  • 评估 cite_hit@k(gold 是否被引用)与 context_use@k(引用是否都来自 pack)。

10) 评测闭环与分段指标

  • 检索:hit@k / ndcg@k
  • 打包:pack_hit@k / pack_loss@k
  • 引用:cite_hit@k / context_use@k
  • 端到端:accuracy / acc_oracle_pack
  • 诊断产物:candidates.tsv / gold.tsv / id_join_report.json / pack_context.tsv / reader_citations.tsv / visibility_losses.tsv

关键实现与开关(对齐仓库)

  • RAW 超集索引与稳定指纹:src/modules/retrieval/index_key.pysrc/modules/retrieval/index.py
  • 视图裁剪(AW/AR)与融合检索:src/modules/retrieval/eagle_v1.py
  • 交叉编码器重排与时间特征融合(可选):src/modules/retrieval/rerank.py
  • 打包与折叠:eagle_v1.pack 路径;ID 归一:tools/id_normalize.py
  • Reader 输出协议与引用:src/pipelines/memoread.py(提示词模板约束 JSON 输出)
  • 评测与抽样:src/pipelines/eval_runner.py--max-samples --sample-step),检索-only:runner.py --retrieval-only
  • temporal 子集与样本过滤:tools/datasets.pylongmemeval:temporal

方法演进与风险对策

  • 排序增强:加大 seed 候选与 CE 对数;引入 time_sim、Doc 级去重/聚合;保持 ndcg@10 监控为一号指标。
  • 视图一致性:以 RAW 索引保覆盖,AW/AR 只在候选阶段裁剪,避免重复嵌入与错失事件。
  • 误差定位:若 RetrievalHit 高而 PackHit 低 → 调整打包预算/去重;PackHit 高而 CiteHit 低 → 强化 Reader 协议与引用抽取。

实验设置(10月基线)

  • 数据集:longmemeval:temporal
  • 视图:主跑 AW,对照 RAW / AR
  • 评测口径:k=10,检索-only 与端到端分开观测

实验数据与分析(检索侧)

configviewhit@1hit@5hit@10ndcg@1ndcg@5ndcg@10
qwen_emb+rerank_xencRAW0.16540.24810.28570.01160.01550.0208
qwen_emb+rerank_xencAR0.16540.25560.30080.01170.01580.0208
qwen_emb+rerank_xencAW0.16540.25560.29320.01170.01710.0215
qwen_embRAW0.14290.22560.25560.00950.01320.0211
qwen_embAR0.13530.21800.27070.00930.01320.0209
qwen_embAW0.13530.23310.26320.00930.01310.0208
colbertRAW0.13530.21800.26320.00930.01310.0208
colbertAR0.13530.23310.26320.00930.01310.0208
colbertAW0.13530.21800.26320.00930.01320.0208
bm25_onlyRAW0.13530.21050.24060.00150.00510.0165
bm25_onlyAR0.13530.21050.23310.00150.00510.0163
bm25_onlyAW0.12780.21800.23310.00150.00510.0163
dense_onlyRAW0.14290.22560.25560.00130.01110.0175
dense_onlyAR0.14290.21050.24810.00150.01120.0176
dense_onlyAW0.13530.21050.25560.00130.01110.0175

要点解读

  • 融合检索 + 交叉编码器(qwen_rerank_xenc)整体优于纯 BM25 / 纯 dense;
  • 视图差异很小(RAW≈AW≈AR),证明“RAW 超集索引 + 候选期裁剪”的策略有效;
  • 仍需通过“更大的候选池 + 更强重排 + 时间相似度特征”提升 nDCG@10

误差与瓶颈

  • 重排与排序质量:交叉编码器对数偏小(历史常见 32),应提升候选面与重排强度。
  • 时间敏感排序特征:缺少“query 时间 ↔ 事件时间”的相似度项,易造成正确事件落后。
  • by-kind 细节:event 侧已不再系统性为 0,但排序仍偏弱,需要定向增强。

下阶段计划

  • 排序增强(高优先级)

    • 扩大 seed 候选(50/100/200)并将 CE 对数提升至 128/256;
    • 引入时间相似度特征并与 CE/BM25 做线性融合(α/β 网格搜索);
    • 文档级聚合与去重,避免相似片段挤占前列。
  • by-kind 精细评估

    • 输出 event/fact 的命中—排序曲线,针对 temporal 题型做特征与权重调参。
  • 端到端准确率推进

    • 在检索优化后,聚焦 Pack/Reader 的损耗链路(pack_loss@kcite_hit@k)与模板/引用一致性。
  • 工程稳态与可复现

    • 继续完善指标键名与文档一致性,保持 RAW 超集索引的一次构建、多运行复用。

代码实现进展(P1 完成度小结)

结论

  • 时间视图(RAW/AW/AR)让系统在时间维上统一“索引、过滤、评测”的语义:RAW 负责覆盖、AW/AR 负责有效性与可追溯。
  • 本月已把时间维的工程问题稳定住,检索命中恢复,排序成为新主攻方向。
  • 下月重点在“候选池扩大 + 重排增强 + 时间特征融合”,以明显提升 nDCG@10,并带动端到端准确率。