跳转至

Once Upon an Input: Reasoning via Per-Instance Program Synthesis

会议: NeurIPS 2025
arXiv: 2510.22849
代码: https://github.com/adaminsky/pips
领域: 多模态VLM
关键词: 程序合成, LLM推理, 代码生成, 神经符号, 多步推理

一句话总结

提出 PIPS(Per-Instance Program Synthesis),通过实例级别的程序合成与结构化反馈迭代改进,结合置信度度量动态选择直接推理或程序合成,在30个基准上将调和平均准确率提升8.6%。

研究背景与动机

领域现状:LLM 在零样本推理方面已有长足进步,Chain-of-Thought (CoT) 和 Program-of-Thought (PoT) 等方法进一步提升了多步推理能力

现有痛点:现有实例级程序合成方法(如 PoT)面临三个核心挑战: - 开放域问题:不知道什么时候该用程序、什么时候该用 CoT,非算法性问题(如情感理解)强行生成代码会产生平凡程序(硬编码答案) - 无任务规约:没有正确程序行为的规范来指导搜索,导致超过 50% 的 PoT 输出是平凡程序 - 非结构化输入:程序需要结构化输入,但推理问题通常是非结构化的文本或图像

核心矛盾:PoT 生成的代码中超过 50% 是硬编码答案、6.3% 有语法错误、11.5% 返回类型错误

切入角度:在实例级别做三件事——(1)决定用不用程序、(2)用结构反馈迭代改进程序、(3)先提取符号化输入再生成程序

方法详解

整体框架

PIPS 将推理问题解为 \(y = P(c(x))\),其中 \(c\) 将原始输入映射为结构化符号输入,\(P\) 是可执行程序。流程:置信度评估→(选择 CoT 或合成)→符号提取→迭代程序生成与评估。

关键设计

  1. 选择性程序合成(Selective Synthesis)

    • 功能:在实例级别决定用 CoT 还是程序合成
    • 核心思路:设计 10 个判据让 LLM 自评(如形式化难度、执行成功概率、逻辑鲁棒性),生成置信度向量 \(S(x) = (p_1(x),\ldots,p_{10}(x)) \in [0,1]^{10}\),通过逻辑回归分类器做最终决策
    • 设计动机:实验发现非算法性任务用 PoT 几乎总是生成平凡代码(等价于 CoT 但多了一次 Python 调用),直接跳过更好
  2. 无规约的程序搜索

    • 功能:在没有测试用例或任务规约的情况下迭代改进程序
    • 核心思路:设计评估器 \(E\) 检查程序的结构属性——非平凡性(不硬编码)、语法正确、类型正确、无占位符。生成→评估→反馈→重新生成,最多 \(k\)
    • 设计动机:传统程序合成依赖 IO 样例或逻辑规约,但单实例推理没有这些;通过检测常见失败模式(硬编码、语法错误等)作为替代规约
  3. 符号化输入提取

    • 功能:将非结构化数据(文本、图像)转为结构化 JSON 输入
    • 核心思路:用 LLM 推断临时 schema,提取实体、属性和关系,作为程序的显式输入 \(c(x)\)
    • 设计动机:PoT 生成的无输入程序必须要么硬编码数据、要么用代码处理原始图像(如 12.7% 用 OpenCV/Pillow 处理图像),两者都很脆弱

损失函数 / 训练策略

无需训练,完全是推理时的提示工程和迭代反馈机制。

实验关键数据

主实验

模型 指标 (HMean) PIPS PoT CoT 提升
Gemini-2.0-Flash 全部30任务 20.8 12.2 11.4 +8.6% vs PoT
GPT-4.1-mini 全部30任务 - - - +0.8% vs PoT
o4-mini 全部30任务 - - - +5.7% vs PoT
Gemini-2.0-Flash 算法性任务 显著领先 - - +15.9%

消融实验

配置 HMean Accuracy
PIPS (完整) 20.8%
PIPS (无 switch) 18.3% (-2.5%)
PIPS-0 (无 switch, 无迭代) 12.9% (-7.9%)
PIPS-0 (无 switch, 无符号, 无迭代) 4.3% (-16.5%)

关键发现

  • 即使在 k=0(不用评估器)时,PIPS 也比 PoT 高 5.6%,说明符号提取本身就很重要
  • 置信度开关在 24.8% 的关键样本上正确率 65.3%,带来 2.2% 的绝对提升
  • 平凡程序减少 75.6%,语法错误减少 86.8%
  • 在多模态任务(CLEVR、Leaf)上,PIPS 从不使用 OpenCV/Pillow,而 PoT 有 12.7% 这样做

亮点与洞察

  • 实例级别的方法选择是一个被忽视的重要问题:同一任务集中不同实例的"算法性"差异很大,一刀切不行
  • 结构化反馈循环的设计聪明:不需要测试用例,仅通过静态/动态分析检查代码质量,这是一种通用的程序改进信号
  • 符号提取解耦感知与推理:这个思路非常有价值,可以迁移到任何需要 LLM 处理结构化数据的场景

局限与展望

  • 置信度开关依赖 LLM 自评,自评能力随模型不同差异大
  • 符号提取可能丢失信息(特别是视觉任务中的细粒度空间关系)
  • 迭代会增加延迟和成本,尤其是 k 较大时
  • 对于纯创意/主观性问题,CoT 和程序合成都不适用

相关工作与启发

  • vs PAL/FCoT:它们用固定的每任务程序,不适应实例变化;PIPS 在实例级别生成程序
  • vs Code Interpreter (CI):CI 是代理式的,成本更高但灵活性不如 PIPS 的针对性设计
  • 这篇论文的符号提取思路可以应用到多模态推理中,先把图像内容结构化再用程序处理

评分

  • 新颖性: ⭐⭐⭐⭐ 首次系统性解决实例级程序合成的三大挑战
  • 实验充分度: ⭐⭐⭐⭐⭐ 30个基准,3个前沿LLM,分析极为详细
  • 写作质量: ⭐⭐⭐⭐⭐ 问题分解清晰,实验设计严谨
  • 价值: ⭐⭐⭐⭐ 对 LLM 推理有实际指导意义

相关论文