Sitelet https://github.com/open-compass/VLMEvalKit/issues/1617
Skip to content

MMMU Open-ended问题无法正确评测 #1617

Description

@identzz-ai

问题

MMMU 里约 62 道 question_type=open 的题,在评测时被 MMMU_preproc 改成「A = 正确答案 / B = Other Answers」的伪 MCQ,再按选项字母打分。但推理时 prompt 以 Answer: 结尾,模型输出的是自由文本或数值,并没有按选择题作答。

结果是:Open-ended 子集的分数不能反映模型是否答对了,只能反映解析器能不能从长文本里抠出一个字母。

和历史版本比,Latest Version 在 MMMU 上整体偏低一些。用同一批 raw_predictions 分别按两套后处理重算,分差可以对上,说明不是推理变了,是打分逻辑变了。历史版本对这类题有误提字母 A 的情况(比如正文里出现 Solution A、area 等),Latest Version 用 can_infer 解析不了就记 Z,碰巧少了一些「答错却得分」的样本,但两边都没有真正比对答案内容。


原因

1. 推理和评测任务不一致

评测阶段才做 open→MCQ 改写,模型推理时看不到 A/B 选项,却要在评测时被当成选了 A 或 B。

2. Latest Version 统一走 can_infer

extract_answer_from_item 里没有给 MMMU 单独分支,open 改写题和正常 MCQ 一样走字母提取。can_infer 适合短输出、单字母选项;对长段开放作答基本只能返回 Z。

# multiple_choice.py
else:
    ret = can_infer(item['prediction'], choices)

3. 标准 MCQ 不受影响

MMMU 里真正的选择题,模型一般直接输出选项字母,can_infer 和历史版本的专用解析器结果一致。问题集中在 open 改写那部分。


核实情况

  • 同一 checkpoint、同一批 prediction,历史版本和 Latest Version 推理结果一致。
  • 解析差异集中在 open 改写题,典型情况是:模型算了错数,Latest Version 记错(解析失败),历史版本有时记对(误提了正文里的 A)。
  • 抽查样例里,误记对的占多数,说明历史分数在这块有水分;Latest Version 更严,但也不是在做内容判分。

影响

  • Open-ended 子集(约 62 题)当前分数参考价值有限。
  • MMMU 总分和历史版本不宜直接横比,需要说明后处理差异。
  • MCQ 子集可以照常看。
  • 不建议为对齐历史分数,把「全文捞唯一字母」那套 fallback 加回来。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions