MemLens: Benchmarking Multimodal Long-Term Memory in Large Vision-Language Models

Paper: arXiv:2605.14906 Code: xrenaf/MEMLENS Code reference: main @ 7550da84 (2026-05-06)

1. Motivation (研究动机)

这篇论文要解决的不是“LVLM 能不能在长上下文里找一张图”这样单点问题,而是更具体的 multimodal long-term conversational memory:一个视觉语言助手在多轮、多会话、图文混排的历史中,是否能定位过去的相关会话、读懂其中的视觉证据、把证据和文本事实结合起来,并在信息被更新或缺失时给出一致回答。这个目标比常见的 long-context retrieval 更接近真实助手部署场景,因为真实用户不是一次性给模型一篇长文档,而是持续地上传图片、截图、票据、商品、地点、日程和偏好变更;系统既要记住旧内容,又要在新事实到来后覆盖旧状态。

现有评测在这个目标上有三类缺口。第一类是长上下文多模态 benchmark,例如 MM-NIAH、MMLongBench-Doc、MMLongBench,它们能测试长上下文或文档检索,但主要针对直接长上下文 LVLM,不把 memory-augmented agents 放在相同数据上比较。第二类是 conversational memory benchmark,例如 LongMemEval、MemoryAgentBench,它们重视多会话记忆,但基本是 text-only,无法测“视觉证据是否真的被记住”。第三类是 multimodal conversation benchmark,例如 LoCoMo、Mem-Gallery,虽然保留图文输入,但很多题目可以从文本 shortcut 推断答案;如果不看图也能答对,那么评测到的其实不是视觉记忆,而是文本线索利用能力。MemLens 的出发点就是把这三个条件同时固定住:多会话、长上下文、必须使用视觉证据,并且让 direct long-context LVLM 与 memory agents 在同一任务族上比较。

Figure 1 右侧分布解读:MemLens 的 789 个问题覆盖 5 个主类型和 9 个报告子类型,而不是只做单一 retrieval。IE 占 31.18%,MSR 占 18.12%,TR 占 24.59%,KU 占 14.70%,AR 占 11.41%;子类型进一步拆成 IE-Entity、IE-PrevInfo、MSR-Arithmetic、MSR-Counting、MSR-Entity、TR-Duration、TR-Temporal Grounding、KU-Update、AR-Refusal。这个分布说明论文想测的是一组互补 memory abilities,而不是一个 aggregate score 能概括的能力。

这件事值得研究的原因在于,长上下文和外部记忆是两条当前都很热门的路线,但它们的失败模式可能正交。长上下文 LVLM 能直接看到原始像素,短上下文下视觉 grounding 强,但上下文增长后,证据图像会被大量 haystack 会话稀释;memory agents 通过写入、压缩、检索来保持长度稳定,但在写入阶段可能把图像压成 caption、embedding 或 session composite,从而丢失 fine-grained visual evidence。没有一个能同时控制长度、保留视觉必要性、并比较两类系统的 benchmark,就无法判断“长上下文 attention”和“结构化 memory retrieval”到底各自解决了什么、还缺什么。MemLens 最核心的动机就是暴露这条 trade-off:模型不是只要扩大 context window 就能获得长期记忆,也不是只要加一个 memory store 就能保持视觉忠实度。

论文给出的关键证据是 cross-modality ablation。对于 80.4% 的 image-essential 或 image-supportive 问题(),在提供 question + evidence facts + evidence images 且没有 haystack 的 oracle setting 下,GPT-5.4 达到 93.13%,Gemini-3.1-Pro 达到 89.42%;一旦移除 evidence images,GPT-5.4 降到 1.74%,Gemini-3.1-Pro 降到 1.89%。也就是说,这不是“文本里藏着答案,图像只是装饰”的评测,而是如果看不到证据图像,前沿 LVLM 几乎完全无法恢复答案。这个实验把 MemLens 与很多看似多模态、实则 text-sufficient 的长记忆评测区分开来。

2. Idea (核心思想)

MemLens 的核心 insight 是:要评价多模态长期记忆,不能只把“长上下文长度”和“问题答案”做成变量,还必须把 visual evidence dependency 作为构造约束。论文通过 entity abstraction 和 evidence-session wrapping 把答案拆成两个互补部分:文本上下文提供事实关系,图像提供被文本刻意隐藏的实体、视觉细节、时间线索或更新锚点;模型只有同时定位会话、读懂图像、结合文本,才能答对。

关键创新可以概括为三点。第一,MemLens 构造了 789 个多会话问题,并把同一问题实例扩展到 32K、64K、128K、256K 四个标准上下文长度,使长度变化主要来自 haystack/filler 而不是题目分布变化。第二,它把 memory abilities 拆成 IE、MSR、TR、KU、AR 五类:既测单会话视觉事实召回,也测跨会话聚合、时间推理、状态更新和拒答校准。第三,它在同一 benchmark 上比较 27 个 direct LVLM 和 7 个 memory-augmented agents,直接揭示“原始像素 attention”和“外部记忆压缩检索”的互补短板。

与 LongMemEval 这样的 text-only conversational memory benchmark 相比,MemLens 的本质差异是答案必须依赖图像;与 MM-NIAH / MMLongBench 这类长上下文多模态评测相比,它不是只测文档/needle retrieval,而是把多会话记忆能力分型;与 LoCoMo / Mem-Gallery 这类图文对话评测相比,它通过自动 filter、人审和 ablation 验证降低了 text-only shortcut。更重要的是,它不是只评一个模型家族,而是把 direct LVLM 和 memory-agent pipeline 放在同一问题空间里,因而能回答“什么时候应该靠长上下文,什么时候外部记忆会损失视觉忠实度”。

3. Method (方法)

3.1 总体框架:从主题到多会话长上下文实例

Figure 1 解读:MemLens 的构造流程可以看成四级流水线。最左侧从 topic ontology 采样主题并检索候选图像;中间生成带视觉锚点的问题,利用 entity abstraction 把文本中的具体实体替换成“图中这个物体/地点/文档”;随后把 evidence fact 包装进自然的 user-assistant evidence session;最右侧把 evidence sessions、haystack sessions 和 text-only filler 按时间戳交错,形成 32K 到 256K 的标准输入。这个图的重点不是“生成更多对话”,而是把视觉必要性、会话自然性、证据不可显眼定位、长度可控这几个约束同时塞进数据生成过程。

形式化地,一个 MemLens evaluation instance 是四元组 。其中 是按时间排序的多会话历史,每个 都可能混合文本和图像; 是历史中的所有图像, 是承载 answer-critical visual information 的证据图像集合; 是查询, 是 gold answer,AR 类型中则是字面字符串 NOT_MENTIONED。一个正确系统需要完成两步:先在长且有干扰的历史里定位 relevant evidence sessions,再在 和 surrounding text 上做 cross-modal reasoning。

这个设计的直觉是:长期记忆的难点不只是“记住事实”,而是“在大量相似、自然、可能包含多张图的会话里,把某个问题指向的证据找出来”。如果 evidence fact 被直接插入上下文,它会在语义上很突兀,retrieval 系统会靠相似度轻松捞出来;所以论文把每个 evidence fact 包装为完整 evidence session,并让该 session 的主题和风格接近 haystack sessions。这样模型不能靠表面异常定位证据,而必须处理真实记忆系统里常见的检索混淆。

3.2 五类 memory ability 与子类型

IE:Information Extraction

MemLens 的五类任务分别覆盖不同长期记忆失败模式。IE(Information Extraction)测单会话视觉事实召回,包含 Entity 和 PrevInfo 两个子类型。Entity 是 two-hop:先从图像识别抽象实体,再从周围文本读该实体属性;PrevInfo 则询问早前 session 中某张图的视觉细节,比如颜色、数量、布局或屏幕文本。MSR(Multi-Session Reasoning)要求跨 3 到 8 个 session 聚合,包含 arithmetic、counting、entity resolution;它的难点是证据分散且至少部分 operand 或实体身份只在图像中可见。TR(Temporal Reasoning)把自然语言日期、session timestamp 和视觉时间线索混合起来,测 duration comparison 与 temporal grounding。KU(Knowledge Update)构造四步 preference/update chain,要求模型输出最后状态而不是旧事实。AR(Answer Refusal)则移除原本可答问题的 supporting evidence,检验模型是否拒答而不是 hallucinate。

Figure 2 解读:IE-Entity 样例展示了 entity abstraction 的关键效果。问题文本不会直接说出具体实体,而是用“图中那个物体/地点/信息”指代;模型必须先读图识别实体,再回到文本找相关事实。这个设计把视觉识别和文本检索串成 two-hop chain,能区分只擅长文本检索的模型和真正能视觉 grounding 的模型。

Figure 3 解读:IE-PrevInfo 样例把问题指向之前 session 中上传过的图像,比如截图、网页界面或自然照片。这里的难点不是识别名人或地标,而是从长历史中回忆“之前那张图里有什么细节”,因此更贴近日常助手会遇到的视觉记忆。

MSR:Arithmetic

Figure 4 解读:MSR-Arithmetic 把价格、数量、时长等 operand 分散在多个 session,有些 operand 只在图片上出现。模型如果漏掉一个 session 或只读文本,就会得到错误总和;这类问题把 retrieval failure 和 computation failure 混在一起,正好测试长期记忆系统是否能先找齐证据再计算。

MSR:Counting

Figure 5 解读:MSR-Counting 要跨会话统计满足条件的实体或项目。图像不是辅助说明,而是决定某个 session 是否应被计入的证据;这会暴露 caption-only memory 的限制,因为 caption 往往保留 gist,却丢掉细粒度数量、属性或类别边界。

MSR:Entity Resolution

Figure 6 解读:MSR-Entity Resolution 要判断跨 session 的两个视觉引用是否指向同一实体,或者数出 distinct entities。这类题的关键不是单张图识别,而是跨多个视觉证据建立 co-reference,因此 MSR 在结果中成为最难能力。

TR:Duration / Temporal Grounding

Figure 7 解读:TR-Duration 把起止时间放在文本日期、session timestamp、clock/calendar 图像之间。模型需要把视觉时间线索转成可比较的时间表达,再与文本日期组合;这比普通 temporal QA 更难,因为时间信息可能分散在不同模态。

Figure 8 解读:TR-Temporal Grounding 包括 chronologically ordering 和 date extraction。图中展示的 clock face、calendar page 或日期文档让模型必须做视觉符号读取;如果模型只依赖 session 文字,往往会把事件顺序或具体日期搞错。

KU:Update

Figure 9 解读:KU-Update 是四步状态更新链。每一步偏好更新都锚定不同图像,gold answer 永远是最后状态;模型如果只召回早期事实,或漏掉最后一次视觉锚点,就会输出 stale answer。这正好对应长期助手里的“用户偏好已经改变但系统仍记住旧偏好”问题。

AR:Refusal under missing evidence

Figure 10 解读:AR-Refusal 不是让模型找更多信息,而是验证信息缺失时能否拒答。构造方式是从原本可答的问题中移除 supporting evidence;如果模型仍给出具体数量或属性,说明它在长上下文里把不确定性错当成可回答事实。

3.3 数据生成:entity abstraction、evidence wrapping 与长度控制

问题构造从 topic ontology 出发。论文为四类可回答任务设计约 100 个 topic,并扩展出约 12,000 个 fine-grained subtopics,覆盖 identification、experience、document 三条 track。每个问题先由 Gemini-3-Pro 生成 3 到 5 句背景段落,段落里至少包含两个可视觉识别的 named entities;随后选出一个视觉锚点,通过 iCrawler 检索候选图像。图像过滤由三通道打分组成:CLIP ViT-L/14、SigLIP ViT-SO400M、以及 query 与 BLIP-2 caption 的 text-text cosine。CLIP 阈值为 0.30,候选图像必须超过 CLIP 阈值并通过至少一个 secondary channel;之后还要经过 watermark、stock-photo logo、copyright overlay、resolution artifact 等 negative-content filter。文档类图像额外用 GPT-4V 检查水印和排版干扰。

entity abstraction 是最重要的防 shortcut 机制。对于普通实体,系统先把 selected entity 分到 55 个 semantic categories,如 bridge、museum、restaurant、book、vehicle、instrument 等,再从约 170 条 type-aware replacement phrases 中采样,把 “Golden Gate Bridge” 替换成 “the bridge shown in <image>”。替换后文本中不再出现具体实体名,只有图像能解析指代。对于 KU,普通字典替换不够,因为偏好链里往往是一组同类物体;论文改用 LLM 把每个 item 改写成不超过 5 个词的感官描述,例如 “blood orange” 变成 “this tangy round thing <image>”,既避免直接命名,又保留图像必要性。

证据不是直接插入,而是包装成完整 evidence session。这样做的原因是,如果 evidence fact 太突兀,retrieval 系统可以用语义相似度直接找到答案。论文让 evidence session 使用与 haystack session 相同的生成风格和主题匹配约束,并鼓励 user model 间接提到事实,例如把“上个月开始新工作”藏在询问税表更新的对话里。最终每个问题的 evidence sessions 被随机插入按时间排序的 haystack history;KU 保持证据 session 的相对顺序,因为更新链顺序本身决定答案。为了让长度可控,论文通过增加 haystack sessions 构造 32K、64K、128K、256K 四档输入,同时保持固定 text-per-image ratio,并用 ShareGPT / UltraChat text-only filler 维持对话自然性。

数据规模上,MemLens 最终有 789 questions、5 types / 9 subtypes、2,145 evidence sessions;平均每个 session 约 10 turns、约 1.5 images,每张图在 cross-modal counting 下约 2,000 tokens。随着上下文从 32K 增至 256K,单实例 sessions 数从 14 增至 93,images 数从 20 增至 138。质量控制有两层自动过滤和三轮人审:rule-based pre-filter 删除不看图也能答的样本;GPT-5.1 只看 question text,剔除可由 parametric knowledge 解答的样本;四名 annotators 对约 20k 初始候选做问题级 review,Cohen’s ;两名 annotators 审 2,145 个 evidence sessions;再抽查 500/689 multimodal haystack sessions。最终从约 20k 候选压缩到 789 题,主要拒绝原因包括证据图像不关键(31%)、题干泄漏答案(23%)、答案歧义(18%)和难度校准失败(28%)。

3.4 评测协议与指标

Direct LVLM 在完整上下文中直接 attend 到原始 interleaved conversation;Memory agents 则按各自架构写入外部 memory store 后检索。论文评测 27 个 LVLM,包括 GPT-5.4、Claude Sonnet 4.5、Gemini-3.1-Pro、Kimi-K2.5、Qwen3.5 系列、Qwen3-VL 系列、GLM-4.6V / 4.5V、Gemma3、Phi4、Cosmos-Reason2、Nemotron-Nano 等;memory agents 包括 M3-Agent、M2A、M3C、Mem0、MemOS、MemAgent-7B、Memory-T1。Direct LVLM 在 32K/64K/128K 评测,因为很多模型不支持 256K;agents 在 32K/64K/128K/256K 评测,但由于推理慢,在一个 stratified 195-question subset 上跑,subset 用 seed=42 从 789 题分层采样,保留 IE/MSR/TR/KU/AR 比例:61/35/48/29/22。

指标主线是 LLM-as-Judge accuracy。canonical judge 是 Qwen3-VL-235B-A22B-Instruct with thinking disabled;它读取 question、reference answer 和 raw model output,给 binary correct/incorrect verdict。论文用 GPT-5.4-mini 对 800 个 item 复判,item-level agreement 为 96.40%,Cohen’s ,model-level Spearman

又用三名 human annotators 共识标注 484 个 item,judge agreement 为 93.60%,。剩余偏差主要是 leniency:29 个 false positives 对 2 个 false negatives,尤其在短答案 partial match 和 refusal hedge phrases 上。论文还用 deterministic typed-accuracy audit 检查 closed-form subtypes,在 34 个 32K rosters 的 12,234 个 deterministic items 上,weighted agreement 为 93.6%。

评测基础设施方面,本地模型通过 vLLM v0.17—0.18 + FlashAttention-2,在 8×A100-80GB 节点上服务,128K 输入使用 tensor parallelism。API models 通过 provider endpoints 并发请求,4—8 threads。论文实验的 generation length 设置为 direct models 2,048 tokens,thinking models 16,384 tokens。released repo 的 eval.py 默认 --input_max_length=32768--generation_max_length=2048eval_api.py 支持 --batch_size 并发和 .cache resume;scripts/run_benchmark.sh 是便捷 orchestrator,提供 32k/64k/128k/256k 到 32768/65536/131072/262144 的映射,但脚本默认 GEN_MAX_LENGTH=128,需要显式传 --gen-max-length 才与论文实验设置一致。

3.5 Released code 对应关系与伪代码

Code reference: main @ 7550da84 (2026-05-06) — pseudocode and mapping based on this commit

Paper ConceptSource FileKey Class/Function
dataset/context assemblydata.pybuild_context, load_data, Dataset
local HF/vLLM evaluationeval.pyparse_arguments, run_test, main
API evaluation with resumeeval_api.pyload_cache, append_cache, process_single, run_test
model registry and wrappersvlm_models/__init__.py, vlm_models/model_utils.pyload_LLM, LLM.prepare_inputs, LLM.generate
deterministic metricsparse_utils.pyparse_model_output, compute_metrics, print_metrics
LLM-as-Judge scoringllm_judge.py, judge_prompts/*.py_judge_one, evaluate, type-specific prompts
extract-then-match scoringanswer_extraction.pyextract_model_answer, match_extracted_answer, compute_extracted_metrics
orchestrationscripts/run_benchmark.shdataset length registry, API/local command builder

论文公式与 released code 实现差异:官方仓库主要发布 evaluation harness、model wrappers、scoring scripts 和 dataset 使用方式,没有发布完整 benchmark generation pipeline(例如 topic ontology 采样、Gemini-3-Pro 问题生成、evidence session generation、人审流程的自动化脚本)。因此笔记中关于构造流水线的伪代码来自论文方法描述;下面关于 context assembly、evaluation loop 和 judge/metrics 的伪代码来自 xrenaf/MEMLENS 的 released code。另一个需要注意的差异是便捷脚本 scripts/run_benchmark.sh 默认 generation max length 为 128,但论文实验基础设施说明 direct models 使用 2,048、thinking models 使用 16,384;复现实验时不应把脚本默认值误认为论文主实验配置。

def build_context(item, image_dir, label_images=False, no_context=False,
                  prefer_url=False, text_only=False):
    if no_context:
        return "", []
    parts, images = [], []
    sessions = item.get("haystack_sessions", [])
    dates = item.get("haystack_dates", [])
    for i, session in enumerate(sessions, 1):
        date = session.get("date", dates[i - 1] if i - 1 < len(dates) else "unknown")
        turns = session.get("session", session if isinstance(session, list) else [])
        parts.append(f"\n=== Session {i} (Date: {date}) ===\n")
        for turn in turns:
            parts.append("[User]: " if turn["role"] == "user" else "[Assistant]: ")
            text = turn.get("content", "")
            if text_only:
                parts.append(text.replace("<image>", "").strip() + "\n")
                continue
            for img in turn.get("images", []):
                path = resolve_image_path(img, image_dir, prefer_url=prefer_url)
                if path:
                    images.append(path)
                    parts.append(f"[Image {len(images)}]" if label_images else "<image>")
            parts.append(text + "\n")
    return "".join(parts), images

这段逻辑解释了为什么 repo 可以支持 --text_only--no_context--label_images 和 URL/local image 两种模式。它把每个 session 变成带日期分隔符的文本块,并保留图像路径列表;Direct LVLM wrapper 再负责把这些 <image> placeholder 和路径转成模型可接受的 chat format。对于 text-only agents 或 ablation,text_only=True 会移除图像 token,只保留文本。

def run_local_eval(args):
    data = load_data(args.input_file, args.image_dir,
                     input_max_length=args.input_max_length,
                     label_images=args.label_images,
                     text_only=args.text_only,
                     no_context=args.no_context)
    model = load_LLM(args)
    results, metrics = [], defaultdict(list)
    for item in DataLoader(Dataset(data, model, model.processor), collate_fn=lambda x: x):
        test_item = item[0]
        inputs = model.prepare_inputs(test_item)
        output = model.generate(inputs=inputs)
        mets, parsed = test_item["post_process"](output, test_item)
        output.update(parsed)
        output.update(mets)
        results.append(output)
        for k, v in mets.items():
            metrics[k].append(v)
    full_metrics, _ = compute_metrics(results)
    save_json({"data": results, "metrics": full_metrics}, args.output_dir)
    return full_metrics

eval.py 的关键不是训练,而是把 dataset item、model wrapper、post-process metric 串起来。输出 JSON 保存每个样本的 question_id、prediction、parsed answer 和 metric;同目录还会保存 metrics 文件。API 路径 eval_api.py 使用 ThreadPoolExecutor(max_workers=batch_size) 并把完成样本 append 到 .cache,所以中断后可以继续跑 provider endpoint。

def judge_and_score(prediction, question, reference, question_type):
    clean_output = normalize_for_judge(prediction)
    prompt = build_type_specific_prompt(question_type, question, reference, clean_output)
    judge_response = call_vllm_or_api(prompt)
    answer_score = parse_binary_score(judge_response)
    return int(answer_score)
 
 
def deterministic_metrics(items):
    overall = {"sub_em": 0, "f1_sum": 0.0, "refusal": 0, "count": 0}
    by_type = defaultdict(lambda: {"sub_em": 0, "f1_sum": 0.0, "count": 0})
    for item in items:
        pred = parse_model_output(item["prediction"])
        ref = item["reference_answer"]
        is_refusal = is_insufficient_information(pred)
        em = sub_em(pred, ref)
        f1 = f1_score(pred, ref)
        update_aggregates(overall, by_type[item["question_type"]], em, f1, is_refusal)
    return aggregate_percentages(overall, by_type)

这段伪代码对应 llm_judge.pyparse_utils.py 的分工。论文主指标是 LLM-as-Judge,但 repo 同时保留 deterministic SubEM/F1/refusal rate;answer_extraction.py 进一步提供 extract-then-match pipeline,用 LLM 从 verbose model output 中提取 committed answer,再按类型做 deterministic matching。

4. Experimental Setup (实验设置)

数据集与规模。 MemLens 包含 789 个问题、2,145 个 evidence sessions、4,695 张 unique images。每个问题都生成 32K、64K、128K、256K 四个上下文长度版本;32K 到 256K 时,平均 sessions/instance 从 14 增至 93,images/instance 从 20 增至 138。五类任务及数量分别是 IE 246(Entity 120、PrevInfo 126)、MSR 143(Arithmetic 50、Counting 46、Entity 47)、TR 194(Duration 91、Temporal Grounding 103)、KU 116、AR 90。跨模态依赖上,65.7% 是 image-essential,14.7% 是 image-supportive,19.6% 是 text-sufficient(包括全部 AR 和部分 MSR)。Agents 使用 195-question canonical subset:IE 61、MSR 35、TR 48、KU 29、AR 22,比例与 full benchmark 差异低于 0.2 percentage points。

比较对象。 Direct LVLM 共 27 个,包含闭源 API 模型 GPT-5.4、Claude Sonnet 4.5、Gemini-3.1-Pro,以及开源/开放权重模型 Kimi-K2.5、Qwen3.5 系列、Qwen3-VL 系列、GLM-4.6V / GLM-4.5V、Gemma3、Phi4-Multimodal、Cosmos-Reason2-8B、Nemotron-Nano-12B 等。Memory-augmented agents 共 7 个:M3-Agent、M2A、M3C 是 multimodal pipelines;Mem0、MemOS、MemAgent-7B、Memory-T1 是 text-only 或 caption-based pipelines。四个 text-only agents 用 BLIP-2 captions 替代图像;M3-Agent 把每个 session render 成 composite image;M2A 和 M3C 使用 native multimodal input,但 answer time 仍依赖 memory entries 或 embeddings,而不是像 direct LVLM 一样完整重新 attend 原始像素。

指标。 主指标是 LLM-as-Judge accuracy,judge 为 Qwen3-VL-235B-A22B-Instruct with thinking disabled。辅助指标包括 Substring Exact Match、F1、Coverage、Per-Answer Accuracy,以及 extract-then-match deterministic scoring。Coverage 是 699 个 answerable questions 中模型尝试回答的比例;Per-Answer Accuracy 是 attempted answers 中正确比例;整体近似关系为 。这个拆解很重要,因为某些模型可以通过少答提高 attempted accuracy,也可能因 refusing 太多而降低 overall。

运行配置与硬件。 论文不是训练新模型,因此没有 optimizer、LR 或训练步数;可复现配置主要是 evaluation config。本地模型用 vLLM v0.17—0.18、FlashAttention-2,在 8×A100-80GB nodes 上跑 128K 输入并使用 tensor parallelism。API 模型通过 provider endpoints,4—8 threads 并发。论文设置 direct models generation length 为 2,048 tokens,thinking models 为 16,384 tokens;released eval.py 默认 --generation_max_length=2048eval_api.py 默认 --batch_size=4scripts/run_benchmark.sh--dataset 32k/64k/128k/256k 映射到 input_max_length=32768/65536/131072/262144。如果使用 run_benchmark.sh 复现主实验,需要显式传入与论文一致的 --gen-max-length,因为该脚本便捷默认值为 128。

5. Experimental Results (实验结果)

Figure 11 解读:主结果 heatmap 展示 representative 13 个 LVLM 与 6 个 memory agents 在不同长度和不同 question type 上的准确率。最显眼的模式是:direct LVLM 在 32K 下整体明显强于 agents,尤其是 IE/KU/AR;但随着 context length 增长,direct LVLM 的 retrieval-heavy 能力下降。Agents 的颜色变化较小,说明长度相对稳定,但绝对准确率低,特别是在需要原始视觉证据的 IE 和 KU 上。

主表中,32K overall 最强的是 Qwen3.5-122B-A10B,达到 58.68;Qwen3-VL-30B Instruct 为 55.01,Kimi-K2.5 为 54.88,Gemini-3.1-Pro 为 54.10,GPT-5.4 为 52.72。到 128K,Gemini-3.1-Pro 以 51.99 保持最佳且只下降 2.11;Kimi-K2.5 同样为 51.99;GPT-5.4 为 49.56;Qwen3.5-122B 从 58.68 降到 45.50,下降 13.18;Qwen3-VL-30B Instruct 从 55.01 降到 44.23。这个结果说明短上下文 leaderboard 与长上下文 robust leaderboard 不完全一致,context scaling 会改变模型排序。

类型维度上,AR 在 32K 最容易,最高可达 97.78;TR ceiling 为 60.82;IE ceiling 为 74.39;KU ceiling 为 50.86;MSR 最难,32K ceiling 只有 44.06(Kimi-K2.5),Gemini-3.1-Pro 为 32.17,其它大多数系统低于 30。MSR 之所以难,不是因为单步算术或排序本身困难,而是因为证据散在 3 到 8 个 sessions 中,模型必须先从长历史中找齐所有 relevant evidence,再执行聚合。论文在 appendix 的 oracle-retrieval diagnostic 中指出,如果只提供 required sessions,MSR accuracy 可恢复到 90—100%,说明很多“reasoning error”其实是上游 retrieval failure 诱发的。

Figure 12 解读:specialization heatmap 强调没有单一模型统治所有 memory abilities。GLM-4.6V 在 TR 上强但 KU 崩;Qwen3.5 对 KU 更强;Kimi-K2.5 在 32K 的 MSR 相对突出但长上下文优势减弱;Gemini-3.1-Pro 是少数在 128K 的 IE、KU、MSR 上仍同时有竞争力的模型。Memory agents 则呈现反向 profile:Memory-T1 通过 BM25 date matching 在 TR 高,但 IE 弱,显示 keyword retrieval 不能替代视觉 grounding。

Figure 13a–13b 解读:左图显示 direct LVLM 平均准确率随输入长度下降,IE 约降 20%,KU 约降 12%,AR 从约 75% 降到约 45%;MSR 看似平,但主要是因为已经接近 30% floor。Agents 从 32K 到 256K 基本在 内,长度稳定但低分。右图把 128K wrong answers 按 failure modality 分解:IE 和 KU 近 90% 错误属于 Visual category,说明模型没有找到或读懂证据图像;MSR 的错误 73% 归为 Reasoning,但结合 oracle retrieval 可知这往往是 retrieval 选错证据后的下游表现。

Memory agents 的具体数字更能说明问题。在 195-question subset 上,MemAgent-7B 32K overall 最高,为 32.82;Mem0 为 31.79;MemOS 为 30.26;Memory-T1 为 28.72;M3-Agent、M3C、M2A 分别为 19.49、18.46、15.38。到 256K,Mem0 仍有 30.77,MemOS 29.74,Memory-T1 29.23,说明长度稳定;但它们远低于 matched direct LVLM,例如 195-subset 上 Qwen3.5-122B 32K 为 63.59、Gemini-3.1-Pro 128K 为 58.46。论文的解释是:text-only agents 只能看到 BLIP-2 captions,multimodal agents 也在 write time 或 answer time 使用 composite/session embeddings,无法像 direct LVLM 一样在 query time 重新 attend 原始像素。视觉 fidelity 在 memory storage 阶段已经损失。

Figure 14 解读:32K 的 type correlation heatmap 说明五类能力不是同一个 latent skill。IE 和 KU 有较强相关性,因为二者都依赖定位证据图像;MSR 与 IE/AR 的相关性弱,说明它的主要瓶颈是跨证据聚合而非单图 retrieval。这个发现支持论文按 type 报告,而不是只给一个 overall。

Figure 15 解读:子类型相关性进一步细化了这个结论。IE Entity 与 IE PrevInfo 是唯一近 ceiling 的 pair,32K 时 ,128K 时 ;MSR 内部 32K 平均 pairwise ,到 128K 上升到 0.38,但这是 shared-failure artifact,因为 MSR 接近 floor;TR 内部相关性接近 0()。因此,单一 aggregate score 会掩盖不同能力的来源。

Figure 16 解读:wrong-answer pie 把错误划成更细类别,例如 grounding failure、unsupported answer、computation slip 等。这个图的作用是避免把所有错误都归为“模型推理差”:如果错误主要是 total miss 或 grounding failure,那么改 chain-of-thought 未必有效,真正要改的是 evidence localization 和 multimodal retrieval fidelity。

Figure 17 解读:从 32K 到 128K,wrong-answer 类型发生迁移:unsupported answer 增加 10.23%,grounding failure 下降 5.38%,computation slip 下降 4.82%。表面上看某些错误减少,但实际含义是模型更常在长上下文里完全找不到可靠证据,于是给出无支撑答案。上下文增长没有单纯增加“算错”的比例,而是削弱了 evidence grounding。

Figure 18 解读:Qwen3-VL Instruct family 的 scaling curve 显示,2B 到 8B dense scaling 大体单调,30B MoE 优于 8B dense,说明 active-parameter efficiency 对短上下文表现有帮助;但 235B Thinking 并不总是更好,特别是在长上下文和 generation budget 受限时,reasoning traces 可能带来退化。这个结果提醒我们,扩大模型或打开 thinking mode 不等于解决 memory retrieval。

Figure 19 解读:三个带 retrieval logs 的 agents 在 32K 下被分解为 correct、comprehension failure 和 retrieval failure。红色 retrieval failure 大,说明许多 agent 错误不是 answer model 不会读,而是 evidence 没有被正确取回;黄色 comprehension failure 则表示证据取回了但答错。这个分解支持论文关于 pipeline architecture bottleneck 的结论:backbone 质量重要,但 retrieval/storage 设计主导了上限。

主要 ablation 与诊断可以总结为四点。第一,cross-modality ablation 证明视觉证据必要:在 的 image-essential/supportive set 上,GPT-5.4 从 93.13 降到 1.74,Gemini-3.1-Pro 从 89.42 降到 1.89。第二,agent-vs-LVLM matched subset 表明 agents 稳定但低分:Memory-T1 128K overall 30.26,而 direct Gemini-3.1-Pro 128K subset 58.46;

M2A 使用 Qwen3-VL-8B backbone,但 32K overall 15.38,远低于 direct Qwen3-VL-8B Instruct 的 50.77,这说明结构化 memory pipeline 并没有自动继承 backbone 的 direct visual grounding 能力。第三,post-training 可能伤害拒答:Mem0 和 MemOS 这种 frozen-backbone framework 在 AR 上保留 77.27 和 68.18,而 RL/LoRA memory agents 常掉到 9—22;

M2A 在 Qwen3-VL-8B backbone 上 AR 只有 22.73,而 direct Qwen3-VL-8B subset 是 81.82。第四,MSR ceiling 并不只是推理能力上限,oracle retrieval 可以把 MSR 提到 90—100,说明关键在 long-context evidence selection。

论文局限也很明确。第一,evidence 和 haystack sessions 是 LLM 生成的,虽然有 ShareGPT/UltraChat filler 和人审自然性控制,但仍不等于真实长期用户对话分布。第二,问题生成使用 Gemini-3-Pro,而榜单强模型包含 Gemini-3.1-Pro;作者用 oracle evidence 设置下 GPT-5.4 反超 Gemini 的结果缓解了 generator-family familiarity concern,但没有做独立生成器重建 subset 的直接 ablation。第三,LLM-as-Judge 仍有 leniency bias,尤其是短答案 partial match 和 hedge refusal;虽然交叉 judge、人审、deterministic audit 都显示不重排 top leaderboard,但绝对数值可能被约 5% 的 leniency 抬高。第四,MemLens 是 static-length offline evaluation,不是 online streaming memory protocol;真实 agent 还会面临不可逆写入、持续遗忘、隐私删除和多轮更新时机等问题。

总体结论是:MemLens 显示当前 long-context LVLM 和 memory agents 都没有解决多模态长期记忆。Direct LVLM 的短上下文视觉 grounding 强,但证据在长历史中被稀释;memory agents 对长度更稳,但在写入阶段压缩视觉证据,导致 fine-grained image facts 丢失。未来更合理的方向不是单独扩大 context window,也不是单独加 retrieval store,而是把 long-context attention、structured multimodal retrieval、pixel-level evidence retention 和 evidence-sensitive abstention 结合起来。