想象一下,你让一个 AI 描述一张你家客厅的照片。模型自信地回答: “有一辆红色的复古摩托车停在咖啡桌旁。”你再次看向照片。根本没有摩托车,只有一盆红色的盆栽。

这种现象被称为 幻觉 (Hallucination) 。 这是当今大型视觉语言模型 (LVLM) 面临的最持久、最危险的问题之一。虽然这些模型在谈论图像方面已经变得非常出色,但它们有一个坏习惯,那就是凭空捏造——虚构物体、识别错颜色,或者描述根本不存在的关系。

对于涉足多模态 AI 领域的学生和研究人员来说,解决幻觉问题是实现可信度的“圣杯”。如果我们不能信任 AI 告诉我们图片里究竟有什么,我们当然也就不能信任它去驾驶汽车或分析医疗 X 光片。

在这篇文章中,我们将深入探讨一篇引人入胜的研究论文,题为 “Pelican: Correcting Hallucination in Vision-LLMs via Claim Decomposition and Program of Thought Verification” (Pelican: 通过主张分解和思维程序验证修正视觉大模型中的幻觉) 。 研究人员提出了一个结构化的、逻辑驱动的框架,充当视觉模型的严格事实核查员。读完本文,你将了解 Pelican 如何拆解复杂的句子,编写自己的 Python 代码来核查事实,并显著降低 AI 对图像撒谎的频率。

让我们以此解构如何将一个爱产生幻觉的 AI 变成一个可靠的观察者。

问题所在: 视觉模型通过什么产生幻觉?

在解决问题之前,我们需要先了解它。LVLM (如 LLaVA、mPlug-OWL 或 InstructBlip) 的工作原理是将视觉特征 (来自图像) 投影到与文本相同的“嵌入空间”中。这使得大型语言模型 (LLM) 能够像看到单词一样“看到”图像标记。

然而,这种融合并不完美。幻觉通常源于几个关键问题:

  1. 数据偏差 (Data Bias) : 模型可能在其训练数据中看过成千上万张包含电视的“客厅”照片。因此,当它现在看到一个客厅时,即使没有电视,它也可能会猜测那里有一台。
  2. 肯定偏差 (Yes-Bias) : 模型被训练得要乐于助人。如果你问: “红色的车在树旁边吗?”,模型在统计上倾向于回答“是”以取悦用户,而忽略了视觉证据。
  3. 定位能力弱 (Weak Grounding) : 模型可能知道狗长什么样,但它可能难以准确指出狗的 位置,或者难以区分“左边的狗”和“右边的狗”。

现有的解决方案通常涉及在海量数据集上进行训练或使用强化学习 (RLHF) 。虽然这些方法有所帮助,但它们既昂贵,又没有解决 *主张 (Claim) * (“有一只猫”) 与 *证据 (Evidence) * (像素) 之间的根本脱节。

Pelican 登场: 一个用于验证的框架

研究人员介绍了 Pelican , 这是一个旨在充当事后“编辑”的框架。Pelican 不是重新训练整个模型,而是获取 LVLM 的输出,并将其通过一个严格的验证流程。

如果把标准的 LVLM 比作一个有时会忘乎所以的创意作家,那么 Pelican 就是坐在隔壁桌的严格事实核查员,要求每一个形容词和名词都有证据支持。

四步架构

Pelican 分四个不同的阶段运行。为了给你一个高层次的路线图,请看下面的架构概览。

Figure 1: Overview of Pelican. Given an image (I) and a question (q), the pipeline transforms the answer into a claim, creates a visual table, decomposes the claim, uses Python code to verify it, and synthesizes a final verdict.

Figure 1 所示,该过程始于 LVLM 对问题 (q) 生成答案 (a)。Pelican 将这些组合成一个单一的“主张” (Claim, C) 。例如,如果问题是“谁在骑自行车?”,答案是“一个女人在骑自行车”,那么主张就变成了: “图像中骑摩托车的人是一个女人。”

让我们逐步了解用于验证此主张的四个步骤。

第 1 步: 视觉表 (The Visual Table)

Pelican 的第一个创新之处在于,它不相信 LVLM 能再次“看”清图像。相反,它依赖于专门的、“狭义”的 AI 工具——具体来说是像 YOLO 和 Grounding-DINO 这样的目标检测器。

视觉表 步骤中,Pelican 扫描图像以识别主张中提到的有形物体。它构建一个结构化数据表 (具体来说是 Python 中的 Pandas 数据框) ,其中列出了:

  • 检测到的物体 (例如,“Motorcycle”) 。
  • 边界框坐标 (它在哪里) 。
  • 置信度分数。

这为什么重要?语言模型是概率性的;它们预测下一个单词。Pandas 数据框是确定性的;它包含硬数据。通过将图像内容转换为结构化表格,Pelican 创建了一个可靠的参考点,不受语言生成的随意性影响。

第 2 步: 主张分解 (Claim Decomposition)

“红色的汽车停在高大的树后面” 这样的复杂句子很难一次性验证。它包含多个断言:

  1. 有一辆车。
  2. 这辆车是红色的。
  3. 有一棵树。
  4. 这棵树很高。
  5. 车在树的后面。

Pelican 使用 LLM 将主要主张分解为 子主张 (Sub-Claims) 。 这些是基于“一阶谓词”的逻辑原子单元。

研究人员定义了特定的谓词,例如:

  • Exists(object) (存在(物体))
  • Color(object) (颜色(物体))
  • Position(object1, object2) (位置(物体1, 物体2))
  • Count(object) (计数(物体))

这种分解将句子转化为逻辑链。至关重要的是,这个链条可以可视化为一个 计算图 (Computational Graph)

Figure 2: Computational graph representation of the generated sub-claims with predicates as the node and edges defined by their dependencies.

Figure 2 完美地阐释了这个概念。注意逻辑是如何流动的。我们从 Exists(dog, Yes) 开始。

  • 如果狗存在,我们可能会分支去检查它的位置: Position(dog, left)
  • 只有在确认了左边那只特定的狗 之后,我们才检查它的颜色。

这种图结构确保了验证是高效的。如果第一个节点 (Exists) 返回 False,我们就不需要浪费时间检查颜色了。该主张已经被推翻了。

第 3 步: 思维程序 (PoT) 验证

这可以说是 Pelican 框架中最具创新性的部分。

在传统方法中,如果你想验证像“车是红色的吗?”这样的子主张,你可能会问另一个 AI 模型,“车是红色的吗?”但这会导致回到我们最初面临的幻觉风险中。

Pelican 使用 思维程序 (Program of Thought, PoT) 。 Pelican 不是要求文本回答,而是提示 LLM 编写 Python 代码 来回答问题。

为什么是 Python?

  • 工具: Python 可以原生调用外部工具。Pelican 提供了诸如 iou() (交并比,用于检查两个物体是否重叠) 或 grounded_vqa() (用于针对特定图像裁剪区域提问) 等函数。
  • 逻辑: Python 完美地处理逻辑 (ifelsefor 循环) 。文本生成器很难处理复杂的逻辑。
  • 数据操作: 还记得第 1 步中的视觉表吗?Python 可以无缝地与该 Pandas 数据框交互。

中间变量 (\(v\)) 的力量

先前工作中的一个主要问题是 定位 (Grounding) 。 如果一张图片有三辆车,而主张是“左边的车是红色的”,标准模型可能会搞混要看 哪一辆 车。

Pelican 引入了 中间变量 。 在分解阶段,它将特定变量分配给特定实例。

  • 它可能将 $car_left 定义为在坐标 [0, 0, 50, 50] 处检测到的物体。
  • 然后 Python 代码运行 get_color($car_left)

这种精确的引用确保了验证过程在整个推理链中始终“锁定”在正确的物体上。Python 代码显式过滤视觉表,以找到对应于所讨论物体的特定行。

第 4 步: 综合验证合成

一旦 Python 代码执行,它将返回“证据”。

  • *问题: * 有人吗? -> *代码输出: * False (Count = 0)。
  • *问题: * 有摩托车吗? -> *代码输出: * True。

最后,Pelican 将原始主张、分解逻辑和代码执行结果 (证据) 反馈给 LLM。这一步就是“法官”。

LLM 审查证据。如果代码说“人”的“Count = 0”,但主张是“一个女人在骑自行车”,LLM 会发现矛盾。然后它输出一个决定: Incorrect (不正确)

至关重要的是,Pelican 还会生成一个 重写 (Rewrite) 。 它修正幻觉,将“一个女人在骑摩托车”转变为“有一辆摩托车,但没有人骑它。”

实验结果: 它真的有效吗?

理论听起来很扎实,但 Pelican 在实践中表现如何?研究人员在 MMHal-BenchGAVIEMME 等高难度基准测试中,对比了几种最先进的 LVLM 来测试该框架。

定量成功

让我们看看数据。

Table 1: Results on hallucination (MMHal-Bench, GAVIE) and visual understanding (MME) benchmarks. Pelican shows consistent improvements across all metrics.

Table 1 展示了全面的比较。你应该注意以下几点:

  • Hal-Rate (幻觉率) : 越低越好。看 MMHal-Bench 这一列。当应用 Pelican 时 (带有复选框 \(\checkmark\) 的行) ,幻觉率显着下降。例如, InstructBlip 的幻觉率从 0.74 降到了 0.51 。 这是错误率的大幅减少。
  • MME Score (MME 得分) : 这衡量的是感知和认知能力。越高越好。Pelican 持续提高了总分。对于 mPlug-OWL , 得分从 471 跃升至 611

研究人员还将 Pelican 与其他专门的“幻觉修正”工具进行了比较,特别是 WoodpeckerVolcano

Table 2: Results compared against Woodpecker and Volcano. Pelican achieves the best scores (bolded) and lowest hallucination rates.

Table 2 所示,Pelican 优于竞争对手。在 MMHal-Bench 上,Pelican 获得了 3.04 的分数,而 Volcano 为 2.44 , Woodpecker 为 1.73 。 Pelican 的幻觉率为 0.38 , 明显低于 Woodpecker 的 0.66

这表明,Pelican 结合视觉表与基于 Python 逻辑的方法,比仅仅要求另一个 LLM“复查”工作 (这大致就是 Woodpecker 所做的) 要稳健得多。

定性分析

数字固然好,但眼见为实。让我们看看 Pelican 修正幻觉的实际例子。

Figure 3: An illustration of hallucination in LVLMs. Three examples showing how LLaVA models hallucinate and how Pelican corrects them.

Figure 3 展示了三个截然不同的案例:

  1. 左图 (椅子) : 模型可能对椅子的风格或颜色产生了幻觉。
  2. 中图 (桌子) : 这个场景很杂乱。模型经常幻想出额外的笔记本电脑或数错数量。Pelican 的“视觉表”在这里特别有用,因为它依赖于目标检测器来计算数据框中的行数,而不是通过文本进行猜测。
  3. 右图 (情侣) : 模型可能误解了互动 (例如,声称他们拿着眼镜) 。

在所有这些案例中,基线模型 (LLaVA v1.5 和 v1.6) 都失败了。Pelican 成功识别了主张与视觉证据之间的不匹配,并生成了修正后的回答。

为什么这很重要?

Pelican 的意义不仅仅在于在排行榜上获得更高的分数。它代表了我们在思考“神经符号 (Neuro-symbolic) ”AI 方式上的转变。

目前的深度学习是“神经”的——它依赖于庞大的概率网络。它富有创造力、直观,但不精确。“符号”AI (如逻辑和代码) 是精确的、刚性的,但是可验证的。

Pelican 是两者的混合体。它使用神经网络 (LVLM) 来理解自然语言和图像的混乱世界,但它使用符号逻辑 (Python 代码、谓词、数据框) 来核查事实。

关键要点

  1. 分解是关键: 你无法一次性验证一个复杂的段落。你必须将其分解为原子的“真/假”陈述 (谓词) 。
  2. 验证时代码 > 文本: 要求 AI 用 Python 代码“思考”比要求它用句子“思考”能产生更准确的结果,因为代码强制执行逻辑一致性。
  3. 中间变量解决定位问题: 要修复幻觉,你必须确切知道你在谈论 哪个 物体。Pelican 使用变量 (\(v\)) 来跟踪特定的物体实例,防止模型混淆不同的物体。
  4. 工具胜过直觉: 有时,你只需要一把尺子。通过将“计数”或“计算 IoU”等任务分流给确定性的 Python 函数,Pelican 避免了神经网络的模糊数学。

结论

幻觉仍然是视觉语言模型广泛应用的一大障碍。然而,像 Pelican 这样的框架向我们表明,解决方案可能不仅仅是“更大的模型”。解决方案可能是 更好的架构

通过强制模型展示其工作过程——分解主张、创建数据表并编写代码来证明其断言——Pelican 引入了标准端到端模型中所缺失的问责层。它创造了一个不仅仅是猜测真相,而是利用逻辑和证据积极寻找真相的系统。

随着我们的前行,我们可以期待看到更多这种“系统 2”思维方法 (缓慢、逻辑、深思熟虑) 被整合到大型语言模型快速、直观的“系统 1”世界中。Pelican 就是这种结合卓有成效的杰出典范。