想象这样一个场景:你要聘请一位 AI 做你的城市导游。旧版笔试很简单,考官递上一张照片问:“这是什么水果?”“图里有几只猫?”考生凭颜色和形状就能蒙对大半。可一旦站到真实街头,游客指着招牌问“这家店几点关门”,AI 当场傻眼——因为答案清清楚楚写在招牌上,而它从来不需要看字。这正是传统 VQA 基准的尴尬:它的题库里,考“读字”的题目几乎为零。 TextVQA 就是为了补上这块拼图而诞生的“识字路考”。它把多模态模型请进真实街景考场,题目必须读取路牌、菜单、价签上的场景文字,再结合图片上下文才能作答。它考察的不是背诵题库,而是 OCR 识别与视觉推理的协同作战——这也是文档理解、票据识别等真实应用的核心能力。 本文将沿用“AI 导游资格考试”这个比喻,从考试设计者视角拆解 TextVQA:它为何诞生、如何出题、怎样阅卷、模型又如何闯关。读完你会明白,为什么每个多模态大模型评测榜单,都要单独列一项 TextVQA 分数。
掌握 TextVQA 基准,等于掌握多模态模型“读图识字”能力的标尺——这是你评估、调试和选型视觉语言模型时最实用的度量衡之一,直接关系到文档理解、路牌识别、购物辅助等真实场景。
可视化演示
演示TextVQA基准如何让模型读取图像中的文字并结合视觉上下文回答问题,分步展示OCR检测与视觉推理的协同管道,并对比不同题型与模型方案的准确率。
本节配有交互动效(进入视口后自动加载,约 3KB)。
TextVQA 关键 文字识别:OCR读取场景文字 视觉推理:结合上下文问答 组合题:文字+视觉最困难 OCR+推理 协同提升准确率
基准起源
假设你要考核一位 AI 导游的从业资格。旧版考试长这样:递上照片问“这是什么水果”“图里有几只猫”。考生靠颜色、形状就能蒙对大半,因为考卷从未出现过“招牌上写着什么”这类问题。考官们渐渐发现:自己的题库在真实世界面前,漏掉了最要命的一项技能——认字。
这套“旧版考试”就是传统 VQA(视觉问答)基准:给模型一张图和一个问题,让它输出答案。VQA 基准推动了无数模型进步,但研究者统计题库后发现,需要读取图中文字才能作答的题目占比几乎为零——模型就算完全不识字,也能在考试中拿高分。
2019 年,研究团队发布论文《Towards VQA Models That Can Read》,正式推出 TextVQA 基准。论文指出传统 VQA 偏重物体识别,对场景文字(如路牌、店招、价签上的文字)覆盖严重不足。TextVQA 的定位是补上这块短板:所有问题都围绕图像中真实出现的文字设计,逼着模型学会“读”。
TextVQA 的诞生,就像考官把“识字路考”正式写进导游资格大纲。它传递的信号很明确:认得出苹果不算本事,读得出“营业至 22 时”,才是合格导游的入场券。
- 分子 |Q_text|旧试题中需要读文字才能回答的问题数量,统计上趋近于零。
- 分母 |Q_all|题库中所有问题的总数,即传统 VQA 的完整试题集。
- 比值 P_read文字问题占比极小,导致模型形成“不识字也能过”的侥幸心理。
任务定义
新考试的题型设计得很巧妙:考题给出一张街景照,问“这家店几点关门”。答案不在画面中央的招牌之外——它清清楚楚写在招牌上,可考生得先“看见字”,再“看懂字”,最后把“22时”和“关门”这个动作连起来。
形式上,TextVQA 仍是标准的视觉问答:输入一张图像 I 和一个自然语言问题 Q,输出一段文本答案。与普通 VQA 的区别在于,正确答案的线索主要藏在图像中的场景文字里,而非物体的颜色、形状或类别。
于是任务可以被拆成三个子问题:一是 OCR 识别——图像上有哪些文字、分别在哪;二是选择——哪段文字与问题相关;三是推理——把文字与视觉对象(如门面、餐品)联合起来得出结论。模型输出的答案是开放文本,可能是“22时”这样的原文抄录,也可能是“不营业”这样的推理结果。
这就像导游面对游客提问时,先在脑内检索“我看到了什么字、看到了什么东西”,再挑一个最有把握的答案说出口。题不难,难在每一步都要做对。
- 条件概率 P(a|I,Q)给定图像 I 与问题 Q,模型为每个候选答案 a 估算的合理程度。
- 答案空间 A所有可能答案组成的集合,在 TextVQA 中是开放式的短文本。
- argmax 取最大从候选中选取概率最高的答案作为模型输出 â。
数据集构建
一场好考试背后是一本好题库。TextVQA 的考官们从 COCO 数据集里挑出 2.8 万张真实街景照片——餐厅、超市、地铁站——全是文字密集的“天然考场”。他们先请标注者把所有文字框出来、写下来,再请另一批人对着照片提问,且问题必须“不读字就答不出”。
数据集构建分为三层:图像筛选、OCR 标注、人工提问。图像来自 COCO 数据集,覆盖大量含场景文字的真实照片;标注者借助 OCR 工具并人工校正,标出每处文字的位置与内容;问题编写者根据文字内容设计自然语言问题。
最终 TextVQA v1 包含 28,408 张图像与 45,336 道问题,平均每张图约 1.6 个问题。测试集的答案由多位人工标注者提供,作为评分基准。题目的“含金量”在于:问题必须同时涉及文字与视觉上下文,例如“这家餐厅卖什么”需要同时读招牌和看菜品。
题库的底色决定了考试的含金量。TextVQA 把考场搬进真实街景,每一题都像游客随手拍下的困惑——这正是它比其他合成数据更“值钱”的地方。
- 问题总数 |Q|人工编写的 45,336 道题,全部要求结合场景文字作答。
- 图像总数 |I|28,408 张 COCO 场景图,保证了街道、店铺、菜单等场景多样性。
- 平均题数比两者相除得到平均每张图的题目密度,约 1.6 道。
评测指标
考卷设计好了,阅卷规则也得讲究。开放式答案没有唯一的“标准答案”:“22时”“22点”“晚上十点”都对。若只认一个参考答案,考生和阅卷老师都会崩溃。TextVQA 的解法是“人工陪审团”:每个问题征集 10 位标注者的答案,模型答案只要与其中 3 人一致,就记满分。
TextVQA 沿用标准 VQA 准确率作为核心指标。其设计哲学是:参考答案不是一个点,而是一个集合。通过多数人投票的方式,既宽容了表述差异,又保留了客观可比性。
具体计算时,统计 10 个人类答案中与模型输出完全一致的数量 c,得分 = min(1, c/3)。3 人及以上一致得 1 分,少于 3 人则按比例给分。例如模型答“22:00“,有 2 位标注者也写”22:00”,得 2/3 ≈ 0.67 分。这一指标成为后续众多多模态模型榜单的标准尺。
这套阅卷规则像极了生活中“多数人认可”的共识机制:3 位游客点头,导游这个回答就算过关。既放过了无伤大雅的措辞差异,又筛掉了真正离谱的错误。
- 一致数 c遍历 10 位标注者的答案,统计与模型答案完全相同的人数。
- 归一化 c/3以“3 人一致”为满分基准,少于 3 人按比例得分。
- min 上限截断得分封顶为 1,避免标注者高度一致时分数虚高。
模型挑战
拿到新考卷,AI 导游们集体翻车。翻车的原因逃不开三关:第一关看清字——招牌歪了、被树枝挡住、灯光昏暗,OCR 就认错;第二关读懂字——“营业中”和“已打烊”一字之差,语义天壤之别;第三关字图联动——知道“今日特价”四个字,还得认出特价的是哪道菜。
这三关对应三个技术挑战:OCR 识别鲁棒性、文字语义理解、跨模态融合。早期模型常出现“字是读出来了,可答非所问”的尴尬——因为 OCR 文本与视觉特征没有打通。
跨模态融合的关键是注意力机制。模型将 OCR 文字 token 与视觉区域特征映射到同一空间,动态计算“当前问题最该关注哪个字、哪个区域”。例如问“几点关门”,注意力应集中在“22时”上;问“卖什么”,注意力则应转移到“面馆”与相邻的菜品区域。
注意力像导游的视线管理:读时间看钟表,读菜单看价签,视线落对地方,答案自然浮现。
- Q 与 K 的点积计算问题特征与文字/视觉特征之间的相似度分数。
- 缩放因子 √d_k除以特征维度的平方根,防止分数过大导致 softmax 饱和。
- softmax 归一化把相似度转成和为 1 的注意力权重,突出最重要的信息。
- 加权聚合 V按权重汇总文字与视觉信息,得到融合特征作为推理依据。
方法演进
第一代考生答题很笨:把图上的字全部抄进答案,复制粘贴了事。这样的“生字本”毫无灵魂——模型不知道每个字长在哪、是什么字体、属于哪个招牌。直到学霸模型登场,才把“生字本”升级成“记忆卡片”。
以 M4C(Multimodal Multi-Copy Mesh)为代表的模型,重新设计了 OCR token 的表示方式。它不把 OCR 文本当普通字符串,而是把每个文字 token 编码成四条信息的融合体。
M4C 中,OCR token 的最终表示由四类特征逐元素相加得到:FastText 词向量提供语义、字符级 CNN 编码拼写细节、PHOC 描述字符形状结构、Faster R-CNN 检测框特征记录其视觉位置。此后,答案通过迭代解码生成,模型甚至可以直接“复制”某个 OCR token 作为答案——因为 TextVQA 的答案经常就写在图里。后续工作进一步引入针对图文关系的预训练任务,把“识字”能力预装进模型。
记忆卡片的哲学是:一个字的“意思、长相、位置”缺一不可。当模型答题时能同时调用这些信息,“从图里抄答案”就升级为“看着图答答案”。
- 词向量 e_word用 FastText 编码文字 token 的语义信息。
- 字符特征 e_char字符级 CNN 提炼拼写构成,抵抗字体形变干扰。
- 形状描述 e_phocPHOC 编码字符结构,捕捉文字的形状指纹。
- 检测特征 e_detFaster R-CNN 输出的视觉框特征,记录文字在画面中的位置。
- 逐元素相加四路特征求和,得到携带语义与位置的统一表示。
价值意义
识字路考上线后,AI 导游圈被重新洗牌。原本在旧考试里拿高分的“优等生”纷纷现出原形——不是它们变笨了,而是考卷终于考到了它们从没练过的技能。更深远的意义在于,这场考试把整个行业的目光拽向了“读图识字”。
TextVQA 的价值早已超出单一数据集。它是多模态模型评测生态中的“识字量尺”:文档理解、票据识别、自动驾驶路牌读取等场景,都直接受益于“读字 + 推理”能力的可量化评估。
在实际应用中,评估一个多模态大模型能不能胜任文档类任务,先看它在 TextVQA 上的分数已成为行业惯例。它催生的 OCR 预训练、跨模态融合等技术,与后来的 Document VQA、表格理解等基准一脉相承,共同构成视觉语言评测的完整拼图。
考试的意义不在分数,而在镜子。TextVQA 这面镜子照出了行业认知的盲区:AI 能“看见”世界,但离“读懂”世界还很远。现在,每一份多模态模型评测报告上的 TextVQA 分数,都是这场路考留下的时代注脚。
- 普通 VQA 准确率同一模型在传统 VQA 基准上可达 70%~80%。
- TextVQA 准确率早期强模型在 TextVQA 上仅 20%~40%。
- 能力差距约 40% 的差距暴露了“读字”是多模态模型的最大短板。
AI 应用场景
财务报销票据理解
阶段:模型评测与选型
解决的问题:传统 OCR 只能把发票上的字“抠”出来,却答不出“这顿午饭花了多少钱”这类语义问题。TextVQA 式的“读字 + 理解 + 查询”协同能力,恰好是票据理解的核心诉求。
具体案例:某财务 SaaS 公司在选型时,用 TextVQA 作为标尺横向对比多个视觉语言模型,专门统计“拍发票问总额”的准确率,筛出表现最好的模型上线,把报销录入时间从 5 分钟压缩到 30 秒。
自动驾驶路牌读取
阶段:模型能力评测
解决的问题:自动驾驶需要实时读取限速牌、禁行标志,还要与地图、路况等视觉信息融合判断。TextVQA 风格的题目(如问“这里限速多少”并要求结合路况)提供了标准化的评测方式。
具体案例:某自动驾驶团队在仿真环境中用 TextVQA 式样本测试感知系统的“读字推理”链路,发现模型对倾斜、反光路牌识别率低,据此加强了数据增强,使限速识别准确率提升 12%。
视障辅助问答应用
阶段:应用效果评估
解决的问题:在无障碍阅读类产品中,用户拍下药品包装问“一天吃几次”,模型必须读到说明书上的文字并理解剂量。TextVQA 的指标与题型为这类应用提供了现成的评测基准。
具体案例:开发者沿用 TextVQA 的评测思路构建内部回归测试集,持续追踪“读药盒文字”能力,避免模型版本升级后出现“读字能力倒退”。
Python 演示
"""TextVQA 风格评测的最简演示: 模拟数据 + 准确率指标 + 双模型对比。""" MOCK_DATA = [ { "image_id": "store_001", "ocr_tokens": ["营业中", "22时", "面馆"], "question": "这家店几点关门?", "human_answers": ["22时", "22点", "22:00", "晚上十点", "22时", "22时", "22时", "十点", "22:00", "晚上十点"], }, { "image_id": "store_002", "ocr_tokens": ["今日特价", "牛肉面", "28元"], "question": "牛肉面多少钱?", "human_answers": ["28元", "28", "28元", "二十八元", "28元", "28块", "28元", "28元", "28元", "28"], }, { "image_id": "store_003", "ocr_tokens": ["已打烊", "明日9时"], "question": "这家店现在营业吗?", "human_answers": ["不营业", "没有", "打烊了", "不营业", "已打烊", "不营业", "关门", "不营业", "没开", "关门了"], }, { "image_id": "store_004", "ocr_tokens": ["营业时间", "9:00", "22:00"], "question": "这家店几点关门?", "human_answers": ["22:00", "22点", "22时", "晚上十点", "22:00", "22:00", "22:00", "十点", "22:00", "晚上十点"], },] def vqa_accuracy(model_answer, human_answers): """计算 TextVQA 风格准确率: min(1, 一致人数 / 3)""" match_count = sum(1 for ans in human_answers if ans == model_answer) return min(1.0, match_count / 3.0) def simple_reader_model(question, ocr_tokens): """极简基线: 只取第一个含数字的 token, 忽略问题语义与视觉布局""" digit_tokens = [t for t in ocr_tokens if any(ch.isdigit() for ch in t)] if "几点关门" in question and digit_tokens: return digit_tokens[0] if "多少钱" in question and digit_tokens: return digit_tokens[0] if "营业" in question: if any(("打烊" in t or "不营业" in t) for t in ocr_tokens): return "不营业" return "营业中" return "不知道" def keyword_reader_model(question, ocr_tokens): """增强基线: 结合问题关键词挑选正确的文字 token""" if "关门" in question: return next(t for t in ocr_tokens if "22" in t) if "开门" in question: return next(t for t in ocr_tokens if "9" in t) return simple_reader_model(question, ocr_tokens) def evaluate(model, name): total = 0.0 print("== %s ==" % name) for item in MOCK_DATA: pred = model(item["question"], item["ocr_tokens"]) acc = vqa_accuracy(pred, item["human_answers"]) total += acc print(" Q: %s -> %s | acc=%.2f" % (item["question"], pred, acc)) print(" 整体准确率: %.2f\n" % (total / len(MOCK_DATA))) def main(): print("=== TextVQA 风格基准评测演示 ===") evaluate(simple_reader_model, "无推理基线") evaluate(keyword_reader_model, "关键词增强模型") if __name__ == "__main__": main()
match_count = sum(1 for ans in human_answers if ans == model_answer)统计 10 位标注者中与模型答案完全一致的人数。return min(1.0, match_count / 3.0)按 VQA 规则归一化并封顶,3 人一致即 1 分。digit_tokens = [t for t in ocr_tokens if any(ch.isdigit() for ch in t)]先粗筛出含数字的文字 token,模拟“只会找数字”的朴素策略。if "几点关门" in question and digit_tokens:用关键词做最简单的语义匹配,但不看 token 的顺序与位置。if any(("打烊" in t or "不营业" in t) for t in ocr_tokens):检测否定语义词,判断店铺是否营业。return next(t for t in ocr_tokens if "22" in t)强模型会结合问题中的“关门”去挑含"22"的 token,而不是盲选第一个。total += acc逐题累加准确率,最后除以题目数得到整体分数。
常见误区
误区TextVQA 考的不就是文字识别吗?把 OCR 算法调准,考试分数自然就上去了。
正解TextVQA 考的是“读字 + 看图 + 推理”的完整闭环。OCR 只是把文字从像素变成字符串,模型还要判断哪段文字与问题相关、如何与视觉对象关联。现实中许多模型 OCR 结果很准,却因为把“面馆”当作“几点关门”的答案而失分——生字全认识,句子没读懂,照样不及格。
为何常见:TextVQA 名字里带"Text",且公开评测榜常与 OCR 技术并列出现,让人误以为它是纯粹的 OCR 指标。
误区TextVQA 上拿到 90% 准确率,说明模型读图推理已经超过人类了。
正解该指标的满分线是“3 位标注者一致”,本身是一个宽容的共识分数,不是严格的推理得分。人类在 TextVQA 上大约能做到 85% 左右,而 90% 的模型仍可能是在高频答案上“取巧”。分数只能说明模型与人类答案的重合度高,并不等于它真的“理解”了画面。
为何常见:人们习惯把数值排名直接等同于能力排名,忽略了指标本身的构造逻辑。
误区两万多张图、四万多道题,规模这么大,拿它来预训练视觉语言模型肯定够用。
正解TextVQA 的定位是评测基准,体量远远小于预训练语料;且题目集中在街景与日常场景的英文文字,存在明显的领域偏置。拿它训练容易过拟合“路牌题”,换到中文菜单、快递单、表格就失灵。正确用法是当作“期末考试”,而不是“教材”。
为何常见:看到“数据集 + 上万规模”就联想到训练,忽略了“出题”与“喂饭”的根本区别。
误区评测很简单啊,把现成的 VQA 模型在 TextVQA 测试集上跑一遍就行。
正解普通 VQA 模型没有专门的 OCR 文字输入通道,图像中的文字经缩放后变成“一团糊”,模型根本读不出来。要在 TextVQA 上得分,架构必须显式引入文字检测、OCR 特征与融合模块。这正是该基准倒逼模型架构升级的原因,也是它作为“试金石”的价值所在。
为何常见:人们默认深度学习模型是“通用函数”,忽略了输入表示设计对特定任务的决定性影响。
误区TextVQA 的答案都写在图上,把 OCR 文字拼接进问题,不需要看图像内容。
正解许多题目必须“字图联合”才能作答:问“哪个是今日特价菜”,需要把“今日特价”标签与旁边菜品对象对齐;问“店还开着吗”,要结合“营业中”与店内灯光。纯文本输入丢失了空间布局信息,答案容易张冠李戴。
为何常见:观察到“答案藏在文字中”的表象,就忽略了视觉上下文在定位与消歧中的关键作用。
面试题
Q1. TextVQA 基准的核心考察目标是什么?
- A.图像中的物体识别精度
- B.图像中文字的读取与理解← 正确答案
- C.图像生成的图像质量
- D.语音识别的准确率
答案:B。TextVQA 的定位正是补传统 VQA 的短板——读图里的字。它考的是场景文字的读取与理解,而非物体识别(那是传统 VQA 的强项),更与图像生成、语音识别无关。
Q2. TextVQA 的题目形式是什么?
- A.仅包含图像与标签
- B.仅包含文本段落
- C.图像加问题输出答案← 正确答案
- D.语音视频输出文本
答案:C。TextVQA 属于视觉问答,输入是一张图像和一个自然语言问题,输出是开放式短文本答案。它既不是纯图像分类,也不是纯文本任务,更与语音视频无关。
Q3. TextVQA 的问题主要围绕什么来设计?
- A.图像中的场景文字内容← 正确答案
- B.图像中的物体颜色
- C.图像拍摄的时间和地点
- D.随机生成的模板句子
答案:A。数据集构建时,人工提问者必须围绕图中真实出现的场景文字设计问题,确保“不读字就答不出”,这是 TextVQA 与普通 VQA 题库最本质的差异。
Q4. TextVQA 评测指标中,模型得分 = min(1, c/3),其中 c 指什么?
- A.模型输出答案的字符数
- B.十位标注者中一致人数← 正确答案
- C.图像中文字区域的数量
- D.问题中单词的总数
答案:B。c 是 10 位人工标注者中与模型答案完全一致的人数,即“多数人认可度”。它不关心答案长短,也不关心图上有多少文字、问题有多少单词。
Q5. 早期标准 VQA 模型在 TextVQA 上表现差,最主要的原因是什么?
- A.数据集图片数量太少
- B.模型缺少文字特征通道← 正确答案
- C.问题难度设置太高
- D.答案文本种类繁杂
答案:B。普通 VQA 模型没有为 OCR 文字设计显式的输入表示,图像中的字会被缩放成模糊像素,模型根本“看不见字”。这属于架构缺陷,而不是数据量、难度或答案种类的问题。
Q6. M4C 模型中,OCR token 的四类特征是按什么方式组合的?
- A.逐项相乘
- B.取均值处理
- C.逐元素相加← 正确答案
- D.随机选择
答案:C。M4C 将 FastText 词向量、字符 CNN、PHOC、检测框特征四路表示逐元素相加,得到携带语义、拼写、形状与位置的统一 token 向量。
Q7. 关于 TextVQA 的准确率公式,下列说法正确的是?
- A.必须与所有标注者完全一致才得分
- B.三位以上一致即得满分← 正确答案
- C.答案字数越多得分越高
- D.唯数值型答案能够得分
答案:B。公式 min(1, c/3) 中,c 达到 3 就封顶为 1 分。它不要求全部一致,不看字数,也不限定答案类型——文字、数字、符号都行。
Q8. TextVQA 对多模态模型评估的价值包括哪些?
- A.补充传统基准的读字短板← 正确答案
- B.提供文档理解参考指标← 正确答案
- C.完全替代人工评测体系
- D.推动场景文字应用评估← 正确答案
答案:ABD。TextVQA 补上了传统 VQA 对场景文字的盲区,其分数成为文档理解等任务的参考指标,也推动了票据、路牌等应用的落地评估。但它依赖人工标注答案,并不能替代人工评测体系。
Q9. 在 TextVQA 任务上,模型面临的挑战有哪些?
- A.场景文字识别鲁棒性问题← 正确答案
- B.文字视觉对象跨模态融合← 正确答案
- C.文字语义理解与推理能力← 正确答案
- D.图像文件压缩传输效率
答案:ABC。模型要过三关:看清字(OCR 鲁棒性)、读懂字(语义理解)、字图联动(跨模态融合)。图像文件的压缩传输属于工程问题,与 TextVQA 的推理能力无关。
Q10. 模型输出答案“22点”,10 位标注者中有 3 人写“22点”、2 人写“22:00“、3 人写”22时“、2 人写”十点”。该模型的准确率是多少?
- A.0.3 分
- B.0.5 分
- C.1.0 分← 正确答案
- D.0.8 分
答案:C。c = 与模型答案完全一致的标注者人数 = 3(写“22点”的 3 人)。得分 = min(1, 3/3) = 1.0。其余答案哪怕语义相同,只要字符串不一致就不计入 c——这正体现了“精确匹配”的评分特点。