站务组讨论组合泛化:模型已经能执行若干基础规则,面对这些规则的新组合时,是否仍能正确工作。单项能力全部通过,不自动保证复合任务通过;反过来,复合任务失败也不能立即证明某个基础规则完全不会。

可以从人造规则系统开始。例如定义“翻转”表示把一列符号逆序,“替换”表示按给定映射改变符号,再要求先翻转后替换。应先分别验证每种操作,再测试操作顺序、新符号和更长组合。规则及答案均由测试者明确给定,尽量减少常识知识差异带来的干扰。

关键是把新组合与新基本元素区分开。训练或示例中没有出现某种组合,但各个操作都已充分解释,这是组合泛化;若连操作本身都没定义清楚,失败可能只是任务说明不足。评测应记录哪些元素、哪些配对以及哪些嵌套深度在示例中出现过,不能只说“题目没见过”。

操作顺序尤其值得检查。某些操作可交换次序,先做哪一个答案都一样,这样的题不能检验顺序理解。应选择至少一组交换顺序会得到不同结果的操作,并人工确认参考答案。还应避免答案偶然不变,例如对称符号列经过翻转仍相同,会让错误流程也得到正确输出。

分析结果时可按组合长度、顺序变化和嵌套结构分组,记录错误第一次发生在哪一步。长组合更容易失败,可能来自中间状态保存、执行步骤遗漏或规则混淆,不宜用一个总成功率概括。若允许调用程序,还应明确测的是模型独立执行,还是模型正确编排工具,两者是不同能力。

组合测试不必一味追求极长题目。少量经过设计的可交换与不可交换对照,往往比随机堆叠操作更有诊断意义。通过后还应换一套符号和规则描述检查迁移,防止模型只适应了表面模板。报告时说明测试覆盖的规则范围,不把局部成功外推到任意复杂任务。

讨论问题:
1. 你会如何构造“顺序错了也不会碰巧答对”的题?
2. 组合失败更常出现在规则选择还是中间状态保存?
3. 使用工具时,组合能力的评分边界如何定义?