UniProbe: A Learnable Token-Level Hallucination Detector for Large VLMs using Multi-Structural Internal Representations
Dvir Samuel, Guy Bar-Shalom, Fabrizio Frasca, Ethan Fetaya, Yftah Ziser, Gal Chechik, Haggai Maron
cs.CV, cs.LG
2026-08-11
UniProbe 把冻结 VLM 的一次前向传播建成图,用 1600 万参数探针做 token 级幻觉检测;流式拦截把物体幻觉降 55%,延迟仅 1.06 倍。
视觉语言模型(LVLM)描述图片时会编造图里没有的东西:多出来的人物、不存在的物体、错误的属性。要把幻觉治理落地,定位到 token 是前提,知道哪几个词是编的,才能定点干预,不必整段重写。
现有做法分三条路,各有各的问题。全量微调(HaloDet、Whitehead 等)要更新几十亿参数,贵,还有把原模型改坏的风险。外挂验证器(HalLocalizer)再跑一个多模态模型去比对图文,看不到生成过程,推理成本也翻倍。第三条路从模型内部取信号,但大多把 hidden states 摊平成特征向量再做分类,图像 patch 的二维排布、响应 token 的先后顺序、注意力里编码的跨模态关系,全部被压没了。
UniProbe 走第三条路,但不摊平:把冻结模型一次前向传播留下的计算迹,当作一张有结构的图来读。
先从主干的一层中间层取两样东西:每个位置的 hidden state,和头平均的注意力矩阵。读出层按 backbone 用验证集选,选出来的都在网络中部,比如 GLM-4.1V 第 20 层、LLaVA-1.5 第 14 层;越靠近输出层,表征越专注预测下一个词,接地信号反而变弱。
然后建图。节点有三类:全部响应 token、按被响应注意的程度挑出的 top 图像 patch 和 top query token,图像节点额外携带自己的二维位置编码。边就是注意力:每个响应 token 在图像、query、前文响应三个来源里各保留最强的一条边,权重取注意力值,边数有上界。
读图的网络很小,两个交替块,每块依次跑三个模块:
线性头最后给每个 token 一个幻觉概率。整个检测器隐藏宽度 256,约 1600 万可训练参数,8 个 epoch、单张 H100 训完。交替结构是核心设计:消融里单模块各有信号(51.8 到 56.9 F1),但幻觉证据分散在三种结构里,联合建模才到 63.2。
部署侧有两个变体。流式版把双向 GRU 换成单向,解码时逐 token 打分,概率超过阈值 0.70 就拒收重采样,幻觉在生成时就地修掉。自适应版解决一个实际错配:检测器在多模型混合的标注上训练,上线却要监控宿主模型自己的自由生成,不同模型幻觉方式系统性不同,存在训练与部署的分布漂移。做法是拿 500 张 Objects365 图让宿主模型自己写 caption,用 CHAIR 自动标注幻觉物体,再微调检测器。这一步把流式检测的物体 F1 从 32.6 拉到 63.8。
| 设置 | 指标 | UniProbe | 最强基线 |
| MHALO,GLM-4V | token 级 F1 | 63.2 | 59.1(HaloDet,全量微调) |
| MHALO,Qwen-3-VL | token 级 F1 | 61.7 | 55.4(HaloDet) |
| POPE,LLaVA-1.5 | AUC | 90.0 | 75.0(Token Grounding) |
| COCO 自生成 caption | CHAIRi/CHAIRs | 8.2/16.6 | 13.1/27.4(HaloDet+自适应) |
几个背景数:零样本让 GPT-4o 做 token 级定位只有 40.6 F1IoU,Claude-4.8-Opus 43.9;此前所有检测器在 POPE 上卡在 69 到 75 AUC,外挂和手工特征都一样。延迟是这套方案的卖点:流式护栏 1.06 倍 vanilla 延迟,HaloDet 1.30 倍,VCD 2.00 倍;后处理打分模式也只要 1.15 倍。
幻觉降了,内容没被砍:护栏后 caption 保留 95.4% 词数(143.7 对 150.7),正确物体覆盖 2.14 对 2.23,SPICE 升到 0.222(vanilla 0.214),还消掉了普通解码产出的 6 条空 caption。2000 次人评判断里 55% 选它的产出,PAS 拿 30%,HaloDet 拿 15%,排序与自动指标一致。
给开源 VLM 挂一个不碰权重的幻觉护栏,代价 6% 延迟,这是工程上可以直接采纳的比例。训练成本也低:1600 万参数、单卡 H100,与微调整个 backbone 差着数量级。冻结主干加读中层计算迹这套思路也不限于幻觉检测,任何「模型内部已经知道但没说好」的任务都可能套用。
适用条件同样明确:要拿到 hidden states 和 attention,闭源 API 用不了;每个 backbone 要单独训一个 readout。
作者自述三条:需要白盒访问;逐主干单独训练;跨主干迁移留作未来工作。
读下来另有几点要留意。CHAIR 系指标只覆盖物体存在性一类幻觉,属性、关系、计数类错误在流式评估里没有对应读数。阈值 0.70 是论文能给的最激进口,自己也报告了收紧到 0.40 会多降 36% CHAIRi 但误删 12% 的正确提及,部署时这个旋钮要按场景重调。自适应依赖 Objects365 的物体标注,对开放域长回答的迁移没有验证。对边扰动的鲁棒性倒是有数据:F1 只在 62.4 到 63.2 之间波动。