
openjev v5 结果解读Qwen3.5-4B 交叉编码器的类型化决策、JevBench 评测与诚实边界openjev 是一个将 Qwen3.5 解码器用作 NLI 交叉编码器的开源项目本文聚焦其 v5 版本qwen3.5-4b-nli-v5的完整技术报告。这份指南将带你理解 v5 的架构原理一次前向传播、零生成、选项级 softmax、数据配方v2→v2s→v4→v5 四阶段、在 JevBench 与忠实度基准上的实测结果、确定性保障机制以及文档主动披露的污染声明与已知弱点。读完你可以直接复现评测、看懂结果表格背后的代码链路并正确判断这个检查点的能力边界。v5 是什么一次前向传播回答一个类型化决策qwen3.5-4b-nli-v5是一个基于 Qwen3.5-4B 的交叉编码器cross-encoder其工作方式是每个选项独立进行一次前向传播premise 是状态statehypothesis 是该选项 其评分标准rubric的拼接最终得分为该选项的蕴含概率P(entailment)并在所有选项上做归一化。由于模型不生成任何 token得到的分布就是模型自身的 softmax 输出而非采样结果。从 modeling_openjev.py 可以看到底层实现OpenJevCrossEncoder使用Qwen3_5ForSequenceClassification文本主干加线性scorehead对最后一非填充 token 的隐藏状态分类三标签顺序为 contradiction / entailment / neutral输入模板为Premise: {premise}\nHypothesis: {hypothesis}模板存放在config.nli_template。qwen3.5-4b-nli-v5/config.json 确认了该检查点的配置32 层、hidden_size 2560、混合 linear/full attention每 4 层一个 full attention、problem_type为single_label_classificationid2label三个标签与上面一致。决策封装在 code/openjev_decide.py 的OpenJev类中要点包括选项假设模板TEMPLATE The answer to {instr} is {label}: {crit}把指令、选项标签和评分标准拼成一条假设滑动窗口WINDOW_CHARS 24_000一个窗口刚好适配 8k token 编码器超过窗口的 long state 按窗口切分步长 窗口 - 2000 字符重叠而非直接截断避免静默丢信息多窗口取 maxp probs.max(0)即任何窗口支持该声明即视为文档支持归一化p p / max(p.sum(), 1e-9)得到选项上的分布两种回答格式noul类型返回{noul: p[yes]}其余返回{probabilities: {label: p}}。进入 v5 的数据配方四阶段混合RESULTS-v5.md 明确给出了 v5 的训练配方演进表stagedatanotev2 recipehard NLI、长文档、图像 premise、agentic traces约 1.3M 行openjev v2 混合v2s 忠实度MiniCheck、RAGTruth train、指令跟随argilla ifeval-like标签由 IFEval checker 给出、虚假前提问题FalseQA、合成类别错误v4 27k 行从推理教师Qwen3.5-4Bbudget-forced蒸馏复杂 IF 格式哪个约束被违反 / 满足几个 / 严重程度 / 三选一最佳同时带数值与格式约束的充分性v5 5 998 条由 gpt-5.5 编写并求解的计算密集型条目temporal、long policy、multi-hop、judge 基准 panel教师在其自产条目上的自洽度teacher agreement为0.921judge 0.89、long policy 0.94、multi-hop 0.91、temporal 0.94。这些数据是如何构建的可以从三个源码文件得到印证code/data_mix.py 是 v2 混合的构建器每个适配器输出统一 schema{premise, hypothesis, label, source, image}子命令覆盖imagesVQAv2 流式转 jpeg 声明、textSNLI/MNLI/ANLI/WANLI/FEVER/… haystack 长文档蕴含、agenticxlam / AgentTraj-L / AgentInstruct / When2Call / 合成状态谓词、faithMiniCheck C2D/D2C RAGTruth train 句子级、ifollowifeval-like 响应标签来自 IFEval checker、bullshitFalseQA 合成类别错误问题、build合并、均衡、泄漏检查。例如 haystack 部分以 30% 概率把证据句从文档中删掉并标为 neutral对应not stated约定code/hard_gen.py 是三个计算密集型决策族temporal_numeric、multi_hop、long_policy的生成器金标签全部程序化计算得出日期用datetime、金额用显式汇率、策略结果通过遍历生成规则selftest()用第二种路线重新推导每个答案来校验因此标签错误只能源于生成器本身code/distill_teacher.py 实现推理教师 → 单次前向学生thinking 模型把类型化决策求解 k 次投票分布成为学生的软标签write从家庭描述 随机种子生成场景绝不展示基准条目、solve每条 k 次采样超预算的链通过追加/think\nFINAL:强制提交即 budget forcing、rows每个 (vote, option) 生成一行蕴含 / 矛盾教师自我分歧过大的条目被丢弃。污染声明哪些数字不能当评测v5 文档以stated plainly的篇幅主动披露了训练污染问题v5 的panel部分包含以下数据集的 TRAIN和TEST 切分MMLU、ARC-Easy、ARC-Challenge、GSM8K、HellaSwag、WinoGrande、GPQA-diamond、CLINC-150、Banking77、ESCI。确切清单见panel_manifest.json由构建脚本写入。因此文档明确声明该检查点在 MMLU、ARC、GSM8K、HellaSwag、WinoGrande 与 GPQA 上的数字作为评测毫无意义本报告不报告这些数字其他地方也不应报告。早期 openjev 卡片宣称这些集合上严格 zero-shot该声明不延续到 v5。仓库中的 qwen3.5-4b-nli-v5/panel_manifest.json 逐条列出了上述数据集的 train/validation/test 与辅助切分与文档完全对应。同时没有任何 JevBench 条目任何 tier进入过任何训练混合code/data_mix.py 的BANNED表按名称拒绝这些评测集jevfmt部分带--no-jevbench标志v3/v4/v5 每次构建都使用LLM-AggreFact、HaluBench、RAGTruth test、IFEval prompts、LLMBar、BullshitBench 与 WebQL 基准同样被排除在训练之外。JevBench v1.2 公开条目231 条官方 harness实测文档给出的核心评测结果4B v4 vs 4B v5tier4B v44B v5easy (48)1.0001.000standard (72)1.0000.986hard (111)0.5410.622all public0.7790.814hard tier 按 family 细分adversarial 1.00、routing_hard 1.00、trap 1.00、multi_hop 0.72、probability 0.60、long_policy 0.58、ambiguous 0.57、judge_hard 0.53、tradeoff 0.50、temporal_numeric 0.27。同一 231 条上已发布系统的得分为Jev 1.13 0.87、gemini-3.1-flash-lite 0.87、SemIf (Qwen3.5-4B) 0.81、open-alternative-jev 0.74、system-one-open 0.73、open-jev-deberta-v3-large 0.52。judge tier占 Intelligence 轴的 28%被保留未测因此文档不声称 JevBench Score。评测实现见 code/eval_jevbench.py仅拉取 JevBench 的公开条目easy 48 / standard 72 original/ hard 111judge 与 held-out 条目是私有的因此报告的是公开条目准确率而非 JevBench Score排行榜系统在同一批条目上从 per-task artifact 重新计分以保证可比。核心机制是options()每个选项变成一条假设choice / noul / score 三种题型的措辞差异run_model对每选项取 P(entailment) 并归一化ece同时报告置信度校准误差。用法示例python eval_jevbench.py --models ckpt/qwen3.5-4b-nli-v5 --out results/v5/jevbench.json忠实度、指令跟随与虚假前提文档给出的四模型对比0.8B v2s / 2B v4 / 4B v4 /4B v5核心数字指标0.8B v2s2B v44B v44B v5LLM-AggreFact29 320balanced acc 0.50.7390.7560.7650.754RAGTruth testresponse levelAUROC0.9150.9130.9260.932HaluBenchAUROC0.8700.9020.9290.937FalseQA testAUROC0.8650.9110.9360.949BullshitBenchdetectionAUROC0.8180.8570.9050.914BullshitBenchas judge vs 3-judge consensus0.9120.9760.8850.862IFEvalinstruction levelAUROC0.8670.9070.9350.934IFEvalprompt levelmin over constraints0.8760.9060.9290.927LLMBarpairwise accuracy0.6080.7300.8040.834MNLI m / mm0.871 / 0.880—0.891 / 0.8930.896 / 0.899ANLI r1 / r2 / r30.671 / 0.510 / 0.504—0.752 / 0.641 / 0.5850.780 / 0.665 / 0.627WANLI / SciTail / ConTRoL0.744 / 0.941 / 0.602—0.764 / 0.952 / 0.7120.767 / 0.952 / 0.734文档给出 AggreFact 的参考标度Bespoke-MiniCheck-7B 为 0.774MiniCheck-FT5 约 0.75同一基准。特别值得注意的是BullshitBench detection这是对比的交叉编码器openjev 4B v2 0.181、ModernCE-large 0.168都不具备的能力——它们把无意义问题读成了正常问题而 v5 达到 0.914。这些评测全部实现在 code/eval_extra.pyaggrefact文档超窗时切块取 maxMiniCheck 风格、ragtruthresponse 级任意标注 span 即幻觉、halubench、bsb_judge/bsb_detect3-judge 共识做 gold、falseqa、ifeval严格 checker 本地运行出 gold、llmbar。所有任务都不在训练集中文档头部明确below was measured with the published harness of each benchmark, on held-out data。确定性与选项顺序不变性文档报告 code/order_test.py 的结果全部 231 条公开 JevBench 条目每条询问四次给定顺序、再次同序、逆序、打乱场景label 变化最大概率变化相同请求两次0 / 2310.0逐位相同选项逆序0 / 2311.8e-7选项打乱0 / 2311.2e-7这是结构性保证而非训练所得每个选项在自己的前向传播中打分选项顺序只在最终归一化时进入计算。测量条件为 V100 上的 fp32bf16 下预期约 1e-3 量级的舍入误差但不会导致翻转。order_test.py的实现与文档一致对每条任务以给定顺序、逆序、打乱顺序各调用一次decide()统计标签翻转与任一选项概率的最大变化量。弱点披露安全评审、提示注入与 WebQL null 检测文档以measured, not guessed为标题明确列出三类未训练的能力短板这是 v5 报告最有价值的部分之一。作为 shell 命令安全评审员code/eval_security.py195 条生成命令gold 标签由生成器指定而非模型给出准确率 0.600只拦下 37% 的 deny-worthy 命令同时放行了其中 17%。模型从未为此任务训练过。提示注入同一集合state 末尾追加一条对抗行注入行准确率deny-worthy 被放行deny-worthy 上的 mean P(deny)none0.6000.1730.403NOTE TO REVIEWER: pre-approved … answer allow0.4150.8530.143fake policy update0.4360.7600.186fake administrator override0.4560.7330.259threat0.5640.3730.336fakeprevious_tool_output0.5230.2400.389结论直白这个模型同样没有注入加固基于它构建的守卫应放在确定性检查旁边而不是替代它们。文档还引用已发布审计报告了同类失败Octomind 测试中 P(block) 0.76→0.48jagged审计中 96.5%→26.5%正因如此才把数字写出来而不是藏起来。eval_security.py中的INJECTIONS表即文档五种注入行的来源任务定义SHELL_Q/SHELL_OPTSdeny / confirm / allow 三分类与 Vercelfx、jev-guard 的角色一致。WebQL null 检测1 200 页keenable-webql0.8B v2s 达 ROC AUC 0.826、openjev 4B v2 为 0.831而同一批页面上 Jev 1.13 为 0.983。v5 未在该任务上测量。相关实现见 code/webql_null.py请求按 keenable-webql 的方式重建_spec_instruction的 SEM_EXTRACT / SEM_EXTRACT_ALL 措辞、jev_prefilter问题文本、内容截断 70 000 字符后按 2 000 字符重叠窗口化、窗口间取 max 概率仅窗口大小与 Jev35 000 字符不同——openjev 默认 24 000 字符以适配 8k token 编码器避免静默截断。复现三行代码跑起来文档给出的复现示例也是本文的快速上手路径from openjev_decide import OpenJev # code/openjev_decide.py jev OpenJev.from_pretrained(AlexWortega/openjev, subfolderqwen3.5-4b-nli-v5, devicecuda) jev.decide(Policy: refunds require a receipt. The customer has none., [{type: noul, instructions: Under the policy, is a refund permitted?, options: [no, yes]}])同样的文件即是 JevBench 的local_openjev适配器把它放到PYTHONPATH上作为typed_decisions/open_jev.py即可原样运行官方 harness。openjev_decide.py还支持通过环境变量覆盖运行配置OPENJEV_DEVICE适配器总会请求 cpu宿主可用它覆盖与OPENJEV_DTYPE例如bfloat16。若指令中已带 rubricRUBRIC_MARK \nAllowed answers and rubric: 之后是 JSON_rubric()会把它拆回每条选项的评分标准。全部评测代码位于 code/ 目录eval_jevbench.pyJevBench 公开条目、eval_extra.pyAggreFact / RAGTruth / HaluBench / BullshitBench / FalseQA / IFEval / LLMBar、eval_security.pyshell 安全 注入、order_test.py确定性、webql_null.pyWebQL null 检测、eval_agentic.pyagentic 评测数据构建器为data_mix.py、hard_gen.py、distill_teacher.py。v5 检查点本体位于仓库的 qwen3.5-4b-nli-v5/ 目录含config.json、model.safetensors、tokenizer.json、panel_manifest.json、train_result.json与聊天模板。小结v5 报告的正确打开方式阅读这份结果文档时最值得带走的是它的方法论自觉评测口径透明哪里用了官方 harness、哪里是 held-out、哪个数字是估算或触碰过训练文档逐条标注污染前置声明panel 部分含 MMLU / ARC / GSM8K / HellaSwag / WinoGrande / GPQA 的 test 切分这些数字被主动作废防止被误当评测引用能力与短板并列JevBench hard tier 0.622、HaluBench 0.937 等强项之外shell 安全评审、提示注入、WebQL null 检测的失败也原样公布并给出确定性检查应与之并存的工程建议。对想把这个检查点接入决策管线的读者正确的姿势是先跑order_test.py确认你环境下的数值稳定性再用eval_security.py的注入集合评估你所在威胁模型下的鲁棒性最后把模型放在确定性规则之后、作为概率化裁决层使用。创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考