Heidi Labs
Hugging FaceAI 领域最新发展约 11 分钟4,363 字

Palette:教小模型用你的设计语言制作幻灯片

本文目录

企业文章 发布于 2026 年 11 月 3 日

点赞 4

Praveen Venkateswaran(praveenv)· ibm-research Anupama Murthi(anupamamurthi)· ibm-research Hamid Adebayo(harmedox)· ibm-research

让前沿模型做一份幻灯片,你会得到一份不错的。要十份,它们就开始看起来雷同:同样雅致的默认样式、同样的自有风格、隐隐透出"AI 生成幻灯片"的样子。这本身没问题,直到你希望幻灯片看起来像你的模板。前沿模型有自己的固有风格,再怎么提示也无法阻止它们漂移回去。而且有时候内容是机密的,根本不能离开你的系统。

两点都指向一个你拥有的模型:开放权重(open weights)、运行在你自己的基础设施上、用你自己的设计语言训练。问题在于,小型开放模型——也就是你真正会自托管的那些——在这方面很差。它们做出的幻灯片是坏的:标题消失在背景里,文字跑出幻灯片,形状层层叠叠堆在一起。

Palette 验证一个赌注:一个小型开放权重模型,用你设计语言的合成数据训练,并由一套校验框架(harness)检查,能否与前沿系统竞争,同时让你保留对成果的所有权。我们微调了一个 20B 模型,让它像人一样制作幻灯片:设计师规划整份幻灯片,编码者绘制每一页。它的训练数据遵循 IBM 设计语言(IBM Design Language),在 PresentBench 上,在我们测量的三个领域中的两个排名第一。本文介绍我们如何合成数据、训练模型,并在其周围构建校验框架。

为什么幻灯片对小模型很难#

一页幻灯片看起来简单,但制作它要求模型做三件小模型不擅长的事。

它在看不见幻灯片的情况下进行布局。 模型不是"画"幻灯片;它写出代码,把每个元素放置在某个 x、y、宽度和字号上。一个 75 字符的标题在 56pt 下能否放进两行,是模型在脑中做的算术,而它只有在代码渲染之后才会发现算错了。小模型经常搞错,这就是形状重叠和文字跑出幻灯片的原因。

它同时做两类决策。 决定每页说什么、怎么展示(用图表还是表格?删掉什么?)是编辑判断。精确放置则是几何问题。单次生成必须在 10–20 页中同时完成两者,同时保持配色、字体和布局一致。

没有展示幻灯片如何制作的数据。 存在大量成品幻灯片,但没有设计选择背后的理由,也没有生成它们的代码。

像人一样构建:设计师加编码者#

没有人一遍就把幻灯片做完。你先决定故事(多少页、每页说什么、哪些用图表、哪些用表格),然后才构建每一页。Palette 以同样的方式拆分工作,分成两个由单个 LoRA 适配器承担的角色:

  • 设计师读取计划,写出结构化 JSON 简报:配色、字体系统,以及每页的布局、确切内容和简短的设计理由。
  • 编码者从简报中取出一页的规格,写出绘制它的 pptxgenjs JavaScript,并在前面附上推理过程。

现在每个角色只做一类决策:设计师负责编辑判断,编码者负责几何。两者之间的简报可读可编辑,因此人或代理可以修改某一页的布局,而不必重新生成整份幻灯片。而且因为每页的上下文在任何代码写出之前就已固定,编码者的调用可以并行运行,每页一个,这使编码阶段快了约 6–7 倍。

我们用 LoRA 而不是全量微调来训练适配器:它在一个有能力的基础模型之上教会一种格式和一项技能,而不扰乱基础模型已有的知识,并且让每次实验都变得便宜。一条经验:编码者的示例比设计师的示例长约 5 倍,所以朴素混合会让设计师训练不足,直到我们将其示例过采样 5 倍。

合成幻灯片及其推理#

没有公开的计划、设计决策和幻灯片代码语料库,所以我们用一个大开放教师模型生成了一份。每份幻灯片都从一份配方开始,配方设定其类型、长度、布局和任何用户指令,这样我们就能控制数据覆盖范围。计划从整齐的大纲到原始内容堆砌不等,这样模型学会删减和浓缩。我们生成了大约 1000 份幻灯片,涵盖约 10,000 页。

每个示例还带有其背后的推理,以反事实(counterfactual)的形式写出:轨迹会权衡一个替代方案,并说明为什么它被拒绝,这样模型学到的是选择背后的规则,而不只是选择本身。设计师对内容和形式进行推理。例如:

"四个季度的收入,其中有一个明显的上升趋势。我考虑过用表格,但这页的重点是趋势,而不是精确数字,所以柱状图能让人一眼看到。"

编码者对几何进行推理:

"标题有 62 个字符。在 44pt 下它会折成三行并撞到下方的图表,所以我把它设为 36pt,这能放进两行,并在图表上方留出空间。"

光有教师模型并不能让数据变好;围绕它的循环才能。每份合成的幻灯片都会被渲染,并由推理时校验框架所用的同一个检查器检查重叠和溢出。坏的页面会被修复,其推理会改写为同类的反事实,涵盖原布局错在哪里、修复为什么有效。检查器抓到的每个错误都会变成一个更好的训练示例。

最难的问题是忠实性。最糟糕的失败是一页包含输入中没有的事实,我们发现提示规则无法阻止它。如果简报要求一个 6×5 的表格,却只带三个要点,编码者就必须编造其余内容。

解决它的是参考幻灯片,而不是规则:修正参考能可靠地改变教师模型的输出,而添加规则很少有用。教师模型在提示中看到几份参考幻灯片,其模仿它们的程度远高于遵循指令。

用自然语言引导幻灯片#

用户常常希望对具体设计选择有更细粒度的控制:用图表而非表格、某个特定颜色、更深色的封面。Palette 让他们用指令(directives)提出这些要求,这些简短指令直接写在计划中,并用 [[ ]] 包裹:

## Rollout plan
- March: pilot with two teams
- May: security review complete
- July: rollout to all of engineering
- September: company-wide launch
- November: first adoption review
[[make this a timeline]]

设计师将每条指令构建进简报,编码者在绘制该页时遵循它。没有这条指令,模型会合理地把这些里程碑展示为表格;有了它,模型则绘制一条时间线。

模型遵循指令,是因为它被这样训练过。数据配方包含来自 12 个类别的指令,下面展示其中几个,每个类别用多种不同措辞表达,这样模型学到的是意图,而不是固定短语。

类别示例指令
布局(Layout)[[make this a timeline]](把这段做成时间线)
语气(Tone)[[be candid, no spin]](坦诚,不要粉饰)
受众(Audience)[[this is for the board]](这是给董事会的)
顺序(Order)[[lead with the ask]](先讲诉求)
省略(Leaving out)[[no pricing]](不要定价)
强调(Emphasis)[[highlight the headline number]](突出标题数字)

图 1。同一份计划在不带(左)和带有(右)[[make this a timeline]] 指令时的示意图。

构建检查与修复的校验框架#

即使是训练良好的模型,有时也会产出坏页面:标题与背景同色,或者两个框堆在一起。所以 Palette 不直接返回模型输出;每份幻灯片都会先经过一个校验框架。

图 2。设计师起草简报,编码者并行写出每页代码,校验框架在返回幻灯片之前检查和修复每一页。

首先,简单的规则修复已知错误,例如格式错误的颜色代码,否则它会把每一页都变成黑色。然后每一页被渲染和测量:几何检查器标记重叠、被裁剪或跑出幻灯片的文字。被标记的页面交给一个单独的编辑器模型,由它重写该页代码。

关键规则是:只有当检查器确认该页有所改善时,重写才会被保留;否则保留原始版本。这使得校验框架可以安全地用于每一份幻灯片。它能修复一页,但不能把一页变得更糟。

图 3。一次修复的示意图。生成时(左),每张卡片的标题堆叠在其描述之上;校验框架检测到重叠,并将卡片重排为 2×2 网格(右)。

为了衡量其效果,我们把每份 PresentBench 幻灯片生成一次,并在有和没有校验框架的情况下分别评分。在 131 份幻灯片中,校验框架平均提升 3.5 分。

评估#

我们在 PresentBench 上评估,它按五项标准为生成的幻灯片评分:基础、视觉设计、完整性、正确性和忠实度。PresentBench 提供的是源文档而不是计划,因此在这些运行中,由一个单独的前沿模型从文档起草每份计划,Palette 再根据该计划构建幻灯片。我们报告三个领域;基线数字来自 PresentBench 论文。

图 4。按领域划分的 PresentBench 得分。Palette(蓝色)对比 NotebookLM、Manus 1.6 和其他五个系统(灰色)。Palette 在经济学(Economics)和教育(Education)上排名第一,在演讲(Talk)上排名第三,在三领域均值上排名第二。

Palette 在结构化内容和数值准确性决定得分的领域表现最好,在经济学和教育上排名第一。在演讲领域,幻灯片是叙事和演讲驱动的,有两个闭源系统得分更高,Palette 位列第三。在三个领域上,它排名第二,落后 NotebookLM 1.1 分(59.7 对 60.8),领先其余所有系统——而且它只是一个 20B 的开放权重模型。

PresentBench 衡量一份幻灯片好不好,但不衡量它是否遵循特定的设计语言。我们不知道有哪个基准能做到这一点,这是我们希望帮助填补的空白。

下一步#

校验框架已经能计算廉价、可验证的信号:页面能否渲染、是否有东西重叠或溢出、每个事实能否追溯到简报。今天我们用它来在生成后修复输出。接下来,我们想用同样的检查作为强化学习的奖励,让模型从一开始就不犯这些错误。因为编码者一次只处理一页,每页都是一次短暂、可独立检查的 rollout,天然适合 GRPO 风格的训练。

我们还希望缩小图表密集的幻灯片的差距,办法是从源文档中提取图表(例如用 Docling),并用校验框架放置它们。我们还在探索一种更轻量的自带模板方式:从你现有的一两个 .pptx 文件中重新换肤输出,无需重新训练。

我们的收获#

构建 Palette 教会我们几种有效方法,它们自然可以推广到其他输出具有可用代码检查的结构的任务,从图表和示意图到 UI 布局:

  • 把推理放进数据里。 训练"为什么做出某个选择",包括被拒绝的方案,比只训练选择本身教得更多。
  • 先修正示例,再添加规则。 当教师模型出错时,我们的第一反应是给它的提示添加一条规则,而这很少有用。教师模型模仿参考幻灯片的程度远高于遵循指令,所以修正参考才真正改变了它的输出。
  • 让修复默认安全。 只有当修复可测量地有帮助时才保留它,这样的修复可以用于每一个输出。
  • 先构建检查器。 正是它让数据可信、让输出可以安全交付。