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 或合成)→符号提取→迭代程序生成与评估。
关键设计¶
-
选择性程序合成(Selective Synthesis):
- 功能:在实例级别决定用 CoT 还是程序合成
- 核心思路:设计 10 个判据让 LLM 自评(如形式化难度、执行成功概率、逻辑鲁棒性),生成置信度向量 \(S(x) = (p_1(x),\ldots,p_{10}(x)) \in [0,1]^{10}\),通过逻辑回归分类器做最终决策
- 设计动机:实验发现非算法性任务用 PoT 几乎总是生成平凡代码(等价于 CoT 但多了一次 Python 调用),直接跳过更好
-
无规约的程序搜索:
- 功能:在没有测试用例或任务规约的情况下迭代改进程序
- 核心思路:设计评估器 \(E\) 检查程序的结构属性——非平凡性(不硬编码)、语法正确、类型正确、无占位符。生成→评估→反馈→重新生成,最多 \(k\) 轮
- 设计动机:传统程序合成依赖 IO 样例或逻辑规约,但单实例推理没有这些;通过检测常见失败模式(硬编码、语法错误等)作为替代规约
-
符号化输入提取:
- 功能:将非结构化数据(文本、图像)转为结构化 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 推理有实际指导意义
相关论文¶
- [NeurIPS 2025] FractalBench: Diagnosing Visual-Mathematical Reasoning Through Recursive Program Synthesis
- [NeurIPS 2025] Program Synthesis via Test-Time Transduction
- [ACL 2025] Program Synthesis Benchmark for Visual Programming in XLogoOnline Environment
- [ICCV 2025] TikZero: Zero-Shot Text-Guided Graphics Program Synthesis
- [NeurIPS 2025] CoRe: Benchmarking LLMs' Code Reasoning Capabilities through Static Analysis Tasks