一句话定义:组合泛化(Compositional Generalization)指模型把已经学会的若干"零件"——词、规则、技能——按训练时没见过的新方式拼起来,依然能给出正确答案的能力。
人类在这方面几乎是本能。小孩学会了"红色""蓝色""往左""往右",你说"把蓝色积木放到右边",他不用再学一遍。语言本身就是有限词汇加有限语法,拼出无限句子,所以我们能听懂从没听过的话。
模型不一定。打个比方:它像个只会照菜谱做菜的厨师。见过"炒菜",也见过"加糖",但从没见过"炒一道加糖的菜",就可能手足无措;又或者把"甜"这个属性和"汤"死绑在一起——因为它记住的是整体搭配,而不是"甜味"这个可以拆下来、装到别的菜上的零件。乐高也一样:用红积木搭过房子、用蓝积木搭过桥,不等于拿到红积木就会搭桥。
难点在于"拆不开"。模型内部常把"红色""方块""移动"揉成一团统计共现,而不是抽成独立变量再按规则组合。数据里见过的组合被记住,没见过的组合只能靠插值去猜,表现常常明显变差。
和相邻概念的区别:
| 概念 | 关心的问题 |
|---|---|
| 一般泛化(generalization) | 同类型的新样本,比如又一张猫的照片 |
| 组合泛化 | 零件都单独见过,但拼法没见过 |
| 系统性(systematicity) | 语言学角度:语言能力本该天然可组合 |
| 零样本 / 少样本(zero-/few-shot) | 强调没见过,但不一定要求"重新组合" |
实际意义。做模型的人:别只做同分布(in-distribution)测试,要有意留出"组合留出集"(compositional split)——例如训练里只有 A 动作配 B 宾语、C 动作配 D 宾语,测试就考 A 配 D;数据增强也要刻意制造零件重组。用模型的人:不要默认"它会的两项技能加起来一定都会",复杂任务先拆步骤、给几个示例、把规则写清楚,往往比指望它自己拼更稳;验收时专门试几个没出现过的组合,比刷一堆同类问题更能暴露短板。
