做二十四点时,前两步算错了,后面再努力也很难回到正路。普通的逐字生成也有类似限制。模型选定第一个推理步骤,接下来往往只能顺着它继续。思维树给了另一种组织办法。模型一次保留几个可能的中间状态,评估以后再往前走,必要时可以回退。

2023 年 NeurIPS 论文用 Tree of Thoughts 这个名字描述该方法。这里的“思维”是能够承担中间步骤的一段文字,不一定只是单个 Token。系统先生成候选,再对当前状态评分或投票,留下值得继续的分支。

树的价值来自分支和回退

思维链通常展开一条路径。思维树把生成、评估和搜索拆开,因此能同时看几条路。作者的代码提供广度优先与深度优先的实现。二十四点和创意写作示例使用广度优先,迷你填字示例使用深度优先。搜索方式和提示要跟着任务改,套一段固定提示无法通用。

论文在二十四点上报告了一个很大的差距。GPT-4 使用思维链时解出 4%,思维树设置达到 74%。这个数字不能离开该任务、提示和当时的模型来使用。作者仓库后来重现同一组轨迹时得到 69%,并把差异归因于解码的随机性。一个抢眼的百分比,离稳定的产品结果还有距离。

多留分支就会多付调用费

每个节点都可能需要模型生成几个候选,再额外评估。保留的分支越多,树越深,调用次数和等待时间一般都会增加。评估器若分不清好坏,有用分支仍可能早早被剪掉。

作者仓库把这些选择直接做成参数。生成阶段可以按样本得到相互独立的候选,也可以让模型顺序提出下一步。评估阶段可以给每个状态估值,也可以把一组状态放在一起投票。每步还要决定保留几个状态。参数一多,复现实验就不能只记一句“用了思维树”,至少要留下分支数、深度、评估次数和选择规则。

中间状态能不能检查,决定树有没有意义。二十四点的状态可以写成剩余数字,错误算式很快能排除。开放式商业建议没有唯一目标,模型对候选的评分很容易受文风影响。此时多分支可能只是生成几份相近文案,再让另一次模型调用挑一份。

这类办法适合解空间可列出、中间状态可检查、早期决定会影响后续的任务。排班、规划和约束较多的组合题比普通问答更有理由试。一句就能回答的问题,先生成一棵树只会多花钱。

试用可以从很小的搜索开始。一层只生成两个候选,保留一两个分支,为总节点数设上限。同时保存普通单次回答的结果,比较正确率、调用次数和耗时。多出的搜索没有改好结果,就该把树砍回一条路。

还要把失败轨迹留下。答案错了以后回看,问题可能出在候选里从没出现正确路,也可能出在评估器把好路删了。两种情况要改的地方不同。前者要改善生成提示或增加候选,后者要修改评分标准或接入能验证中间状态的程序。

参考资料