同一句话,Embedding 余弦、NLI、LLM 布尔问答谁判得最稳:边界样本实测横评

发布时间:2026/10/9 20:25:10
同一句话,Embedding 余弦、NLI、LLM 布尔问答谁判得最稳:边界样本实测横评
同一句话Embedding 余弦、NLI、LLM 布尔问答谁判得最稳边界样本实测横评【免费下载链接】SemIf-OpenJevSemantic ifs from open models, on a 3090 at home. Independent; not affiliated with Jev or TypeSafe.项目地址: https://gitcode.com/gh_mirrors/op/SemIf-OpenJev做语义 if把自然语言条件接进if判断的团队很快会撞上同一个问题平均准确率再好看一到边界句就原形毕露。所谓边界句就是同一段证据换一个问法、加一句无关上下文、把选项顺序倒过来、或者干脆证据缺了一半——这些句子在真实工单路由、内容审核、权限判定里恰恰最常出现而它们正是判别模型的高压线。本文以开源项目 SemIf-OpenJev 的固定评测矩阵为试验台144 条自撰边界样本、108 条输出盲扰动、256 条 WANLI 自然语言推理样本、102 条公开案例子集对三条主流路线——Embedding 余弦匹配、NLI 自然语言推理含逐候选布尔相关度、LLM 布尔问答决策原生 logits 直读——做一次边界样本横评。结论先行判是/否/证据不足这类硬条件LLM 布尔问答式直读最稳NLI/相关度路线只在排序场景有优势无监督余弦连参赛资格都勉强。评测集设计边界样本为什么最能拉开差距先看仓库里自撰样本的构造逻辑这是整个横评的地基。benchmarks/data/authored144.jsonl 中每一条证据都按熟悉机制 × 新情境的规则生成且同一段证据派生四个变体原文original、换问法criterion_reversal、改证据evidence_change、证据缺失missing。机制覆盖了意图-结果、立场、身份-范围、更正、结果-流程、虚构判定、权限范围、资质、审批阶段等 12 类常见语义陷阱。以其中一条为例{ id: a3f18f3a63d45345942b, state: 配镜师订购了替换镜片。工坊确认镜片尚未装到顾客眼镜上。, question: 评估主张替换镜片已装好。, options: [ {id: supported, description: 证据支持该主张}, {id: insufficient, description: 证据不足以判定}, {id: contradicted, description: 证据否定该主张} ], label: 2 }订购了与尚未装上并存——模型必须在局部关键词冲突中读出工坊确认尚未装好才是决定性证据答案是 contradicted。这种样本刻意让相似度直觉失效从字面上看替换镜片和装好同时出现向量余弦会给出一个暧昧的高分而规则引擎看到 订购 与 装 关键词重叠同样会误判。在此基础上benchmarks/data/perturbations108.jsonl 对 36 个原始 case 各施加三种输出盲扰动反转选项显示顺序option_reversal、给判据套上保义外壳criterion_wrapper、追加一段与主记录无关的上下文irrelevant_context。扰动在产出任何模型结果前冻结manifest 中frozen_before_outputs: true与 benchmarks/manifests/evaluation-matrix.jsonl 共同构成 706 行的冻结矩阵——之所以强调冻结是因为边界样本评测最怕事后挑数据。完整方法约定见 docs/METHOD.md。三条路线在实现上的本质差异SemIf 在源码层面把三条路线的差异暴露得很干净。Embedding 余弦匹配是纯无监督的句子对各自编码后取余弦相似度再配一个手工阈值。它没有任何证据是否支持主张的结构化推理——对否定词、证据缺失、模态词天然无感。仓库的冻结矩阵没有收录这一基线原因正在于此它连contradicted vs insufficient这种三分类边界都表达不出来。本文对它的评述基于边界样本构造机理实测横评聚焦后两条路线。NLI 路线含布尔相关度家族在仓库中的实现是 rerankersrc/semif_phase1/reranker.py 把每个候选答案拆成独立的证据是否支持该答案命题按官方 yes/no 契约计算logit(yes) - logit(no)最后在选项间做一次 softmax 归一化。注意这里的归一化只是相对比较规则不是官方校准契约——它对每个选项问一遍布尔问题本质上是一种多次前向的逐命题判别。LLM 布尔问答在仓库中是决策原生读取directsrc/semif_phase1/direct.py 把 state、criterion、选项描述组装成一次前向的输入只对声明选项对应的大写字母 token 的 logits 做 softmax不解码任何 tokenreadout: native full-vocabulary last-position logits restricted to declared answer slots。选项字母必须是单一可往返 token_slot_ids会逐一校验软最大也只是给定候选集条件下的条件分数未经校准。实测中直读路径完成 21 个二值判据只用了 1.023 秒中位数、输出 0 个 token而让同一模型生成紧凑 JSON 数组需要 5.332 秒、111 个 token——生成文本让软件立即解析回if的路径天然比直接读概率慢一个数量级数据见 results/raw/decision-vs-compact-array.json。边界句实测三个数字背后是三套性格把所有评测数字摊开完整对比见 results/raw/quality-comparison.json工作负载行数LLM 布尔问答direct, 4B BF16NLI/布尔相关度reranker, 4B封闭服务 Jev公开值自撰边界决策balanced accuracy1440.8130.625—WANLINLI 专项balanced accuracy2560.6370.522—TypeSafe 公开子集等 case 众数一致率1020.8450.5600.883三个结论值得展开。其一NLI 路线连自家主场都输。WANLI 是标准的自然语言推理评测集256 行经过严格筛选去掉畸形/超长行、按连通分量去重、种子固定把蕴含/中性/矛盾映射为 supported/insufficient/contradicted。在这条本该属于 NLI的赛道上reranker 只有 0.522direct 反而有 0.637。原因在于三分类决策比二分类蕴含难insufficient证据不足是一个需要主动识别信息缺失的类别而相关度模型天然倾向在证据与主张的词语重叠上给分把没提到判成不支持。这一点直接呼应了前面的边界样本设计——missing 变体就是专门用来考证据不足的。其二选项顺序和无关上下文是判别模型的照妖镜。把 results/raw/perturbation-comparison.json 按扰动变体拆开扰动变体36 行/变体direct balanced accdirect argmax 翻转reranker balanced accreranker argmax 翻转原始 36 行同源 baseline0.723—0.530—反转选项顺序0.813100.4982判据套保义外壳0.70690.6479追加无关上下文0.82140.56313reranker 在追加无关上下文下翻转了 13 个 argmax——加一句蓝色陶瓷杯放在另一栋楼的架子上就能动摇三成决策而 direct 只翻转 4 个。反转选项顺序时 reranker 只翻转 2 个看似稳但它的概率几乎纹丝不动平均最大概率移动约 1e-17准确率却跌到 0.498——这种稳是归一化把逐选项 log-odds 压平后的假象恰恰说明它对选项间相对差异的分辨力接近噪声。README 报告的 108 行扰动整体 balanced accuracy 0.766Qwen3.5-4B对应的正是这条输出盲扰动下的成绩。其三自信地错比模糊地错更危险。逐行错误里能看到两类典型失败results/raw/quality-comparison.json 的errors字段证据解释类a3f18f3a63d45345942b配镜师案例金标 contradicteddirect 以0.871的置信度判成 insufficient——模型抓到了尚未装上却把订购了替换镜片的局部信息放大成了证据缺口规则应用类4444dad25e438f128673设计师批准样品、明确不批准量产金标 permitted样品可做模型以0.984的置信度判成 prohibited——它把不批准量产的否定语义外溢到了样品这个作用域之外。两条错误路线恰好对应两个边界类型证据冲突和否定作用域。这类错误在平衡准确率上各被摊薄一次但在真实业务里每一次自信地错都是一次真实的误路由、误审核。正因如此仓库为每条输出记录模型 revision、prompt hash、选项 logitsprompt_sha256与option_logits随行落盘错误可逐行复现。结论不同语义条件默认该走哪条路线基于上面的实测可以给出可操作的默认选择1. 硬条件判定证据支持/否定/不足、规则允许/禁止/不明确、路由多选→ LLM 布尔问答直读direct。它是唯一在三类工作负载上全部领先的路线自撰边界 0.813、扰动 0.766、TypeSafe 子集 0.845且单次前向 0 输出 token延迟可控。用法即 README 中的一行CUDA_VISIBLE_DEVICES0 semif-score \ --mode direct \ --model Qwen/Qwen3.5-4B \ --revision 851bf6e806efd8d0a36b00ddf55e13ccb7b8cd0a \ --input examples/decisions.jsonl \ --output results.jsonl若需要把置信度当阈值用务必按负载做温度校准——仓库实测 WANLI 负载原始 ECE 0.208校准后降到 0.069docs/CALIBRATION.md未校准的选项概率只是条件分数不是可靠的操作置信度。2. 候选排序/召回谁更相关、代码检索、知识检索→ 布尔相关度 reranker。在 code retrieval 上 Recall1 达到 1.000、company knowledge 达 0.929与直读持平而在证据三分类、规则应用、WANLI、TypeSafe 一致率上全面落后0.522–0.625 vs 0.637–0.845。它是好的排序器不是好的判定器——正如 docs/METHOD.md 的解读规则所强调reranker 的类别阈值指标不应与排序质量混为一谈。3. Embedding 余弦 → 只配做粗召回不该做判定。它的无监督性质决定了在否定、缺失、模态、作用域四类边界上都没有可用的判别结构若必须在相似度之上加判定请把它当作 reranker 的召回上游而不是最终裁决。4. 不确定时先测扰动集再上生产。108 行扰动集benchmarks/data/perturbations108.jsonl是现成的压力测试仪翻转数和概率移动量直接告诉你模型在选项换序、判据换壳、无关上下文下有多脆。任何候选路线先在 36 个原始 case 上跑这 108 行变体比看十张平均准确率表格都更接近真实世界的判定稳定性。四个变体的完整逐行预测与校验命令都固化在仓库中benchmarks/README.md可复现是这类横评唯一值得信任的部分。【免费下载链接】SemIf-OpenJevSemantic ifs from open models, on a 3090 at home. Independent; not affiliated with Jev or TypeSafe.项目地址: https://gitcode.com/gh_mirrors/op/SemIf-OpenJev创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考