把决策模型用作低成本的第一层标注
决策模型用一次前向计算为每个选项打分,不生成任何文本。在选项不多的题目上,它可以在 LLM 之前充当第一层标注。
决策模型用一次前向计算回答一道固定选项的题目,为每个选项返回一个概率,不需要生成任何文本。在只有少数几个选项的单选题上,可以把它用作标注级联的第一层,把它没把握的条目交给 LLM,并在一份盲态人工样本上认证它的阈值,因为它在答错的输入上也可能保持很高的置信度。
决策模型是一种分类器,它接收一段文本和一组带类型的问题,为每个答案返回一个概率。它不生成文本,所以写不了提示词、理由或规则。Laya 就是这类开放模型之一。它的模型卡列出了一个基于 ModernBERT-large 编码器、有 4.21 亿参数、采用 Apache 2.0 许可证的英文检查点,以及一个有 3.22 亿参数的多语言检查点。/v1/systemone API 通过 HTTP 提供同类答案,来源可以是托管的 Jev、OpenJev 或 Laya 自己的服务器。
第一层在哪里省钱
标注级联按顺序尝试模型,通常从最便宜的到能力最强的,只有当前模型不够有把握时才把条目往下传。当语料中简单条目占比很大时,一个能有把握地标好这些条目的便宜模型,会给 LLM 留下更少、更难的剩余部分。节省多少取决于这个占比,所以在据此做计划之前,请先在你自己的数据上测量它。
决策模型适合做第一层,因为它一次计算就能回答所有选项,所以一道有五个标签的题目只需一次前向计算,不生成任何文本。它输出的概率就是置信度分数,所以不需要追问,也不需要重复采样。它还能在 CPU 上运行。模型卡报告,在预先加载检查点的情况下,CPU 上每个请求耗时 193 到 464 毫秒,英文检查点在 T4 GPU 上耗时 39.5 毫秒。
Laya 已报告的局限
以下局限中有四条来自 Laya 的模型卡,第五条关于评分量表,来自 Potato 的文档:
- 选项很多时。 在 Banking77 意图基准上,模型卡报告 Laya 在 77 个标签上的准确率为 0.425,而 Jev 在 72 个标签上为 0.870。各选项共享一个固定的 token 预算,所以很长的标签列表会互相挤占。Potato 的文档还指出,在有 11 个或更多选项的题目上,Laya 会警告其温度超出范围,并对温度进行截断。
- 英文检查点遇到其他文字。 模型卡报告,英文检查点在高棉文文本上的准确率为 0.000,置信度却是 0.952。置信度阈值无法发现模型很有把握的错误。
- 零样本准确率。 模型卡报告,基础检查点在其带类型决策基准上的零样本表现接近随机水平,为 0.362,而随机基线为 0.318,多数类基线为 0.461;模型卡称 Laya 是“一个用来专门化的快速基座,而不是零样本决策引擎”。
- 原始校准。 模型卡报告,
laya出厂时置信度偏高,平均期望校准误差为 0.466,在你自己的数据上重新拟合温度后降到 0.081。校准程度因领域而异,所以在别人数据上选定的阈值不能照搬。 - 评分量表。 Potato 的文档发现,在
likert和slider方案上,无论题目怎么措辞,Laya 的分数几乎都跟不上量表。
综合这些局限,宜把决策模型限定在只有少数几个选项的单选题上,并使用其检查点训练时所用的语言。它的阈值要根据你自己语料上的人工标签来选定。
Potato 中的决策模型
Potato 2.11 为决策模型新增了两种端点类型。laya 在 Potato 进程内运行 Laya,需要 decision 附加依赖,即 pip install 'potato-annotation[decision]',它会引入 torch 和 transformers。systemone 连接任何提供 /v1/systemone API 的服务器,只需要一个 base_url。两者都适用于 radio、select、likert 和 slider 方案;如果把其中一个设为标注 multiselect、片段或自由文本方案,Solo Mode 不会启动。
在标注引擎中,决策模型是一个放在级联第一位的 decision 来源。下面这段摘自 Potato 随附的文本示例,它把 Laya 放在一个小型 Ollama LLM 之前,并以 Potato 默认的 90% 置信度、对照 10% 的错误目标来认证这一组合:
labeling_engine:
enabled: true
sources:
- id: laya
kind: decision
endpoint_type: laya
model: convaiinnovations/laya
options:
device: cpu
- id: llm
kind: llm
endpoint_type: ollama
model: llama3.2:3b
base_url: http://localhost:11434
max_tokens: 200
cascade: [laya, llm]
contracts:
- id: accuracy
kind: selective_risk
schema: sentiment
error: 0.1
confidence: 0.9引擎在一份盲态人工样本的一半上选定 Laya 的置信度阈值,在另一半上检验它,所以阈值来自你的语料,而不是来自模型卡。在样本的 dev 那一半为 Laya 定下阈值之前,LLM 会标注每一个条目。此后,LLM 只会看到 Laya 没把握的条目,外加校准样本。
在该示例 README 记录的那次运行中,LLM 用的是 Gemma 12B,Laya 的阈值始终没有定下来,所有被接受的标签都由 LLM 给出,所以在指望第一层之前,请先在你自己的语料上测量它的贡献。由于引擎会分别检验每一层被接受的标签,像高棉文那样很有把握的失败,只要认证样本覆盖了这类输入,就会作为错误出现在样本中。distributional 契约还可以使用 Laya 的完整概率向量,这适合标注者意见分歧的主观问题。
在 Solo Mode 中,决策模型放在 labeling_models 里,并作为 confidence_routing 的第一层。Solo Mode 还需要在 revision_models 下设置一个生成式模型,因为决策模型写不了它的修订循环所产出的提示词和规则。
在完整运行之前测试决策模型
在让整个语料经过决策模型之前,先在几十个你已经标注过的条目上运行它。Solo Mode 的 Try on 10 items 按钮针对提示词做的就是这件事;在引擎中,先运行 potato label run 再运行 potato label status,就能看到每一层的阈值还需要多少标签,以及哪个来源产生了错误。认证失败的一层什么也不接受,它会把高于自身阈值的条目交给人,而不是交给 LLM,这就把人工标签预算花在了 LLM 本来可能标好的条目上。如果决策模型这一层一直认证失败,就把它从级联中去掉。
延伸阅读
- 标注引擎配置:
decision来源的每一个选项 - 用一份盲态人工样本认证 LLM 标签:对照盲态样本认证阈值
- Solo Mode:单个专家使用的置信度路由