简介:本文深入解析一种面向“直接判断”任务的模型架构设计原理,围绕空值感知、排列不变性与选项可扩展性三大结构特性,阐述决策型模型如何从候选集合整体出发,通过对称聚合与共享评分规则,输出稳定的选择、概率或分数,并探讨其底层机制、工作流程与技术边界。
在大规模语言模型的应用谱系中,存在一类被长期忽视但数量庞大的请求形态:从一组文档中找到相关证据、判断某项条件是否成立、按照给定标准给出评分。这类请求的共同特征在于——用户最终需要的不是一段流畅的长文本,而是一个明确、可靠、可复用的判断结果。
传统生成式模型的处理范式是“自回归地逐 token 生成”,最终输出一段自然语言。对于上述判断型任务,这种范式存在天然的低效:模型需要先生成大量推理文本,再从文本中解析出真正的答案。而判断本身可能只需要一个选项编号、一个概率值或一个连续分数。
面向这一需求,一种被称为“原生 System One 架构”的设计思路被提出。其核心主张是:将决策本身作为模型设计的起点,而非生成过程的副产品。模型直接输出选择、概率或分数,跳过冗长的推理文本生成环节,同时在结构层面保证判断的稳定性与一致性。
本文将围绕这一架构背后的通用技术原理展开,重点解释三个关键结构特性——空值感知、排列不变性、选项可扩展性——它们分别解决什么问题、底层如何实现、模块之间如何协作,以及在实际使用中的边界与常见误区。
如果仅仅把“直接输出答案”理解为“把生成目标从长文本改成短标签”,那问题就被大大简化了。真实的决策场景会暴露出三个更深层的结构性挑战。
假设用户需要办理退款,而系统只提供了“修改地址”“查询物流”“重置密码”三个候选操作。即便模型通过某种打分机制选出其中得分最高的一个,这个选项也未必能解决用户的问题。“最好的选项”不等于“合适的选项”。
如果模型被强制要求在三选一中给出答案,它就会产生一个看似明确但实际错误的判断。这类错误的危害在于:它伪装成了确定性输出,下游系统难以察觉。
同一组候选,从 A、B、C 排列改为 C、A、B,它们在语义上并没有任何变化。但许多模型对输入位置高度敏感:选项换序后,模型可能仍然选择“第二个选项”,而不是“同一个候选对象”。
真正需要关心的不是模型是否选择了相同的位置索引,而是它是否仍然选择了同一个答案。这要求模型对候选集合的排列具有不变性。
在实际系统中,候选可能是十几个标签,也可能是上千份文档。如果模型架构为每个候选预留固定的输出符号位,那么当候选数量增长时,模型就需要扩展输出空间,甚至需要通过多轮淘汰逐步缩小范围。
这种设计在大候选场景下会带来显著的工程代价:推理轮次增加、延迟上升、误差累积。
这三个挑战指向同一个结论:决策型模型需要一套不同于生成型模型的结构性设计原则。
在展开架构细节之前,需要先明确三个基础概念。
候选集合:模型需要从中做出判断的一组对象。它可以是标签、文档、政策条款、评分等级等。候选集合是决策任务的输入主体,而不是生成任务的上下文。
评分函数:对每个候选对象赋予一个分数或概率的映射。在决策型架构中,评分函数通常对所有候选共享同一套参数与计算规则。
对称聚合:一种对候选集合的处理方式,其输出不依赖于候选的排列顺序,只依赖于候选自身的身份与内容。对称聚合是排列不变性的数学基础。
理解这三个概念之后,就可以进入架构层面的拆解。
从通用原理角度,一个面向直接判断的模型架构可以拆解为以下模块:
| 模块 | 职责 |
|---|---|
| 输入编码层 | 将用户问题与候选集合分别编码为向量表示 |
| 候选表示层 | 为每个候选生成独立的语义表示,不依赖其在列表中的位置 |
| 共享评分层 | 对每个候选应用同一套评分规则,输出分数或概率 |
| 空值判断层 | 独立判断“是否存在可接受的候选” |
| 聚合输出层 | 在候选之间进行对称聚合,输出最终选择、概率或分数 |
| 缓存复用层 | 保留候选计算结果,支持问题变化时的复用 |
其中,空值判断层与共享评分层是区别于传统生成架构的两个关键设计。
结合上述模块,一次决策请求的处理流程可以按以下步骤展开。
系统接收两类输入:用户问题(或判断条件)与候选集合。二者在编码阶段被分离处理。用户问题编码为条件向量,候选集合中的每个元素独立编码为候选向量。这种分离确保了候选表示不依赖于它在列表中的位置。
每个候选对象经过编码后得到一个语义表示。关键约束是:编码过程对候选的排列顺序不敏感。也就是说,无论候选以何种顺序输入,同一个候选得到的表示应当一致。这通常通过共享编码参数与位置无关的池化方式实现。
在打分之前,系统先执行一次独立的判断:当前候选集合中是否存在可接受的候选。这一步与“候选之间谁更好”是分开的。
用伪代码表示其逻辑:
可接受性 = 空值判断(问题向量, 候选集合表示)如果 可接受性 == False:输出 null否则:进入候选评分流程
这种分离设计的价值在于:模型不会因为“必须给出一个答案”而强行选择一个不合适的候选。没有合适答案,也是一种答案。
对于每个候选,系统应用同一套评分规则,计算其与问题的匹配程度。由于评分规则在所有候选之间共享,新增候选不需要扩展任何固定的答案符号空间。
for 候选 in 候选集合:分数[候选] = 评分函数(问题向量, 候选表示)
在得到所有候选的分数后,系统进行对称聚合。聚合结果不依赖于候选的排列顺序,只依赖于候选的分数集合。最终输出可以是:
文档、政策条款和评分标准往往比用户问题更稳定。系统可以保留这些候选的计算结果,在问题变化或候选重新组合时继续使用。当前请求的判断仍然重新执行,但候选表示的计算可以被复用。
排列不变性的核心在于:候选表示与打分过程都不能引入位置相关的参数。具体来说:
满足这些条件后,同一组候选无论以何种顺序输入,每个候选得到的分数不变,最终判断也不变。
需要强调的是:排列不变性并不要求模型输出相同的“位置索引”,而是要求它输出相同的“候选身份”。这是两个容易混淆的概念。
空值感知的关键在于将决策问题分解为两个独立的子问题:
这两个子问题如果耦合在一起,模型就容易被“最高分候选”误导。分离之后,模型可以先判断“是否存在合适答案”,再决定是否输出 null。这种设计在候选集合与用户需求不匹配时尤为重要。
选项可扩展性意味着:模型不需要为每个候选分配固定的输出符号位。评分函数对每个候选独立应用,新增候选只需增加一次前向计算,而不需要重新训练输出层或扩展符号空间。
在候选数量达到上千时,这种设计可以直接处理完整集合,而不必依赖多轮淘汰。多轮淘汰的问题在于:每一轮都可能引入误差,且轮次增加会带来延迟上升。
缓存复用的前提是:候选表示与问题表示在计算上是可分离的。如果候选表示的计算不依赖当前问题,那么候选表示就可以被缓存。当问题变化时,只需要重新计算问题表示与评分,而不需要重新计算所有候选表示。
这种机制在文档检索、政策匹配等场景中具有明显的效率优势。
回到此前的退款场景。候选集合为:修改地址、查询物流、重置密码。用户问题是:办理退款。
按照上述流程:
如果候选集合中包含“申请退款”选项,空值判断为 True,则进入评分流程,选出最匹配的候选。
这个例子说明了空值感知的实际价值:它避免了在错误候选集合上做出看似确定的错误判断。
误区一:排列不变性等于输出相同位置索引。 实际上,排列不变性要求的是输出相同候选身份,而不是相同位置。
误区二:空值输出意味着模型失败。 空值输出是一种有效的判断结果,它表示当前候选集合中不存在合适答案。
误区三:选项可扩展性意味着模型可以处理无限候选。 可扩展性指的是不需要扩展输出符号空间,但计算资源仍然随候选数量增长。
误区四:缓存复用会降低判断准确性。 缓存复用的是候选表示,当前请求的判断仍然重新执行,因此不会降低准确性。
原生 System One 架构的核心思想,是将决策从生成过程中剥离出来,作为模型设计的起点。它通过空值感知解决“没有合适答案”的问题,通过排列不变性解决“换序改变判断”的问题,通过选项可扩展性解决“候选增长带来的工程代价”问题,并通过缓存复用提升稳定候选的利用效率。
这些结构特性并非某一任务的专门技巧,而是不同决策任务共同需要的底层能力。理解这些机制的原理与边界,有助于在文档检索、条件判断、标准评分等场景中,更合理地设计和使用决策型模型。