尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SemIf Phase 1 方法全解:用开放模型实现无生成读取的类型化语义决策,冻结评估矩阵与形状匹配基准

SemIf Phase 1 方法全解:用开放模型实现无生成读取的类型化语义决策,冻结评估矩阵与形状匹配基准 【免费下载链接】SemIfSemantic ifs from open models, on a 3090 at home. Independent; not affiliated with Jev or TypeSafe.项目地址https://gitcode.com/gh_mirrors/op/SemIf点击查看免费下载SemIf前身 OpenJev是一套独立的开源研究项目目标是验证一个核心假设接受非结构化状态state加运行时定义的自然语言决策并返回类型化分数typed scores且成本足够低以嵌入普通软件——这一能力能否用开放模型复现。本文基于仓库的 docs/METHOD.md 方法论文档逐节拆解其 Phase 1 的方法论骨架Direct 与 Reranker 两套对照系统、706 行冻结评估矩阵、108 行扰动协议、浏览器模型阶梯与 37×21 形状匹配基准并同步给出源码级的实现证据。读完本文你将掌握这套评估体系的度量口径、数据选择协议、计时边界与解释规则能够在自己的决策场景中复现或移植其中的方法。研究问题复现的是“接口模式”不是 Jev 本身Phase 1 的目标非常克制测试开放、无生成读取generation-free readout是否能复现 Jev 公开声明的有用部分。Jev 是 TypeSafe 的封闭服务用于运行时定义的语义决策SemIf 复现的是它的接口模式接受非结构化状态 运行时定义的自然语言决策返回类型化分数并不复现 Jev 未公开的模型或训练过程。这一点在项目 README.md 与 METHOD.md 中被反复强调是整个方法论的边界前提。所谓“无生成读取”是指模型只进行一次原生前向传播直接读取声明选项declared option对应的 logit不解码任何 token、不生成答案句子、不做 JSON 修复、没有解码循环。这种设计让决策延迟只取决于一次前向而不取决于生成序列的长度——这是 SemIf 速度收益的根本来源。两套对照系统Direct 单 token 读取与 Reranker 相关性契约METHOD.md 定义了两种系统分别对应两类开源模型的“原生”输出形态。Direct system冻结提示词 固定大写答案 tokenDirect 系统冻结 Qwen3.5-4B输入为state criterion 2~16 个带描述的选项执行一次原生前向仅对固定大写答案 token 的 logits 做 softmax不解码任何 token。源码层面这套逻辑完整落在 src/semif_phase1/core.py系统提示词DIRECT_SYSTEMcore.py固定为Apply the supplied criterion to the supplied evidence. Choose exactly one listed option. Respond with only its uppercase letter, with no explanation or reasoning.字母表LETTERS ABCDEFGHIJKLMNOP16 个字母限定了选项数上限 2~16与 METHOD.md 一致validate_row()强制校验id/state/question/options字段、选项 ID 唯一性、state 必须是非空字符串/对象/数组且为有限 JSON 兼容数据。direct_messages()将输入序列化为{evidence: ..., criterion: ..., options: [{letter: A, description: ...}, ...]}的 JSON payload 拼入 user 消息。打分管线在 src/semif_phase1/direct.py_slot_ids()逐字母验证tokenizer.encode(letter)恰好是一个可往返的单 tokenround-trip token且各槽位 token 不冲突否则直接报错——这保证了 logit 读取的语义安全encode_prompt()用apply_chat_template(..., enable_thinkingFalse)构造提示词并校验“提示词 字母”的 token 化边界不改变answer boundary changes tokenization即拒绝_forward()传入use_cacheFalse若模型支持logits_to_keep则只保留最后位置 logitslogits_to_keep1最终取logits[:, -1, :]对槽位 logits 执行softmax(selected)core.py输出结果附带prompt_sha256、prompt_versiondirect-options-v1、模型元数据、readout描述以及probability_status: conditional option score; uncalibrated as decision confidence——后者直接呼应 METHOD.md 的解释规则见后文。Reranker systemyes/no 契约 log-odds 归一化Reranker 系统遵循 Qwen3-Reranker-4B 的原生 yes/no 契约。每个候选答案被构造成独立的 query/document 相关性命题系统对每个选项计算logit(yes) - logit(no)再对这些 log-odds 在选项间做 softmax。METHOD.md 特别强调最后这一步归一化是 SemIf 自定的比较规则不属于上游 reranker 的校准契约——即输出值只在“相对比较”语义下有效。实现位于 src/semif_phase1/reranker.py提示词PREFIX/SUFFIX模拟官方 reranker 格式Judge whether the Document meets the requirements based on the Query and the Instruct provided. Note that the answer can only be yes or no.正文按Instruct/Query/Document拼接_answer_ids()校验yes/no均为 distinct 单 token且与 tokenizer 的convert_tokens_to_ids一致确保“官方 yes/no token 契约”不被破坏score_pair_batch()把多个 (row, option) 对打包成一个原生 batch左填充到等宽、attention_mask区分一次前向得到所有选项的no/yeslogits计算odds selected[:, 1] - selected[:, 0]即logit(yes) - logit(no)最终softmax(log_odds)得到选项间概率readout字段注明native yes/no log-odds per option, normalized only for relative comparisonprobability_status为relative option compatibility; uncalibrated as categorical probability。此外reranker 会根据provenance.experiment自动切换指令code-rag/company-brain使用检索指令RETRIEVAL_INSTRUCTION其余使用决策指令DECISION_INSTRUCTION——与评估矩阵中的任务类型对应。冻结评估矩阵706 行、四大来源、多套度量口径METHOD.md 的核心纪律是冻结提示词、ID、标签、任务语义、修订revision、度量全部在完整 reranker 输出被评估之前锁定。本地完整矩阵共706 行构成如下来源行数用途项目自撰Project-authored144证据解释、规则应用、候选选择含原始与缺失证据案例WANLI256外部自然语言推理校验TypeSafe 公开评估子集10220 个可用案例上的分布/参考一致性Every 公共实验室产物204判断网格、检索、公司知识、组合动作策略精确的评估 ID 全部提交在 benchmarks/manifests/source-selection.jsonl562 行含 WANLI 部分任务矩阵清单见 benchmarks/manifests/evaluation-matrix.jsonl706 行含 family、group_id、task_type、state/question 字符数等字段。度量口径不把异质任务压成一个准确率数字METHOD.md 明确反对“一刀切”聚合硬标签任务报告全分母准确率full-denominator accuracy缺失/无效/未解析输出一律计为失败、平衡准确率、宏 F1以及适用时的 NLL/Brier并给出source-group bootstrap 区间检索类任务Every 的 code-rag、company-brain报告查询排序指标Recall1TypeSafe 行比较分布使用equal-case macro——先按案例求模式一致率、再跨案例等权平均避免问题更多的案例主导结果。度量实现在 benchmarks/evaluate.pybasic()计算 accuracy/balanced_accuracy/macro_f1summarize()额外产出 risk-coverage 曲线、10 桶 reliability bins、NLL/Brier 及其_valid_distributions_only变体、1000 次 source-group bootstrap 的 95% 区间seed 217paired_comparison()按 family 分层做配对 bootstrap 比较两套系统的平均 family 平衡准确率差异。文件顶部 docstring 与evaluate()的limitations字段反复强调所有 gold 行都计入准确率包括 missing/invalid/unparsed原生决策无概率不会伪造 one-hot 分布。WANLI 子集修订、洗牌与三分类映射WANLI 部分使用固定修订61c95318fd71c55b6ba355d76253254615f387ec选择协议是排除格式错误、超过 4,000 字符的行以及触及 pilot-training 来源的组件剩余 ID 排序后以seed 291607洗牌选取 86 entailment / 85 contradiction / 85 neutral 行合计 256且每个连接的前提/pair-ID 组件最多取一行语义映射premise → statehypothesis → criterionentailment/neutral/contradiction → supported/insufficient/contradicted。这一点在 benchmarks/manifests/source-selection.jsonl 中得到印证每条记录的upstream字段都带revision、seed_id、source_id、splitfamily均为evidence_interpretation选项为contradicted/insufficient/supported三值的排列。TypeSafe 102 行hash 校验快照 outcome-blind 轮询TypeSafe 比较是本地可对齐的 102 个公共行而不是其宣传的 711 行聚合也不是实时 Jev 端点运行发布的 Jev、Opus、Sol 值是从公共记录中读取的。原始第三方 fixture 被排除在本候选之外。提取协议读取四个本地提供、哈希验证的*-cases.js快照仅保留已发布、成功运行的 Choice/Noul 节点且具有一个明确无歧义的 document/question 绑定、有发布的参考答案、参考分布 argmax 唯一选择过程对结果盲outcome-blind按 workflow、case、primitive 轮询桶内按哈希 ID 排序Score primitives 与 tied targets 被排除在 102 行比较之外所有映射与原始实验数据均可从直接链接的实验 JSON 与源归档获取。扰动协议output-blind 的三类稳定性变体 缺失证据群体为了检验决策对无关表面变化是否稳定METHOD.md 定义了 36 个自有原始案例的扰动协议每个案例生成 3 个**输出盲output-blind**变体option_reversal反转显示选项顺序同时保留语义 ID标签随选项 ID 重映射criterion_wrapper用保义措辞包裹 criterion如加前缀 “Using only the supplied evidence, decide the following criterion: …”irrelevant_context追加一段与任务无关的自有上下文“无关的蓝色陶瓷杯放在另一栋楼的架子上”。加上一个独立的36 行缺失证据missing-evidence群体用于测试系统在证据缺失时是否选择insufficient。稳定性度量在按语义选项 ID 对齐概率后进行。生成器见 benchmarks/build_perturbations.pyVARIANTS (option_reversal, criterion_wrapper, irrelevant_context)变体 ID 由sha256(f{base_id}/{kind})[:20]派生provenance.kind标记为project_owned_output_blind_perturbationmanifest 中显式写入frozen_before_outputs: True以固化“输出前冻结”的纪律。产出数据为 benchmarks/data/perturbations108.jsonl36×3108 行与 benchmarks/data/perturbations108-manifest.json。浏览器模型阶梯同一冻结提示词下的三模型对照浏览器阶梯browser model ladder在 144 自撰、108 扰动、102 选定 TypeSafe 行上用相同的冻结提示词和原生 BF16 最后位置选项 logit 评分器评估三个模型Qwen3-0.6B、MiniCPM5-2B、Qwen3.5-4B。度量口径与边界METHOD.md 明确给出TypeSafe 模式一致率先在 20 个源案例内各自平均再跨案例等权平均equal-case macro浏览器产物是独立固定的 GGUF 量化Q8_0 / Q4_K_M浏览器 smoke 计时从页面发起每个操作后开始模型文件从本地 SSD 提供以排除互联网传输时间一次成功的 smoke 要求模型加载、warmup、每个显示选项的有限 logits、以及生成路径generated path完成它不建立完整的量化质量或便携延迟。三个模型沿用了相同的 Direct 打分管线见 src/semif_phase1/direct.py只是后端换成 WebGPU/量化推理。质量结果见 docs/RESULTS.md以平衡准确率看Qwen3.5-4BQ4_K_M在自撰 144 行上 0.813、扰动 108 行上 0.766TypeSafe 子集模式一致率 0.845作为对照TypeSafe 发布的 Jev 在该 102 行子集上为 0.883——注意这是“发布记录读数”而非本地实时运行。形状匹配系统基准37×21777 的重复上下文决策这是 METHOD.md 中最强调“边界”的部分自有的 37 状态 × 21 固定二元标准 fixture共777 个决策每个状态约 8,000 字符专门练习重复上下文计算。它匹配了公开 Every/Jev 演示的计数几何同样形状的 37 状态 21 标准但不复现其未公开的文档、token 长度、硬件、API 路径或模型。因此结论是“系统测量systems measurement”不是与 Jev 的头对头基准。四种执行路径Direct fresh逐行全新 batch-one 打分一次前向一行Serial suffix一个状态 prefill 一次串行复用缓存逐条打分见 src/semif_phase1/serial.py 的SerialPrefixScorer_state_prefix()从 chat template 中抽取确定性的证据前缀首次_cached_forward预填充并保存past_key_values之后每条决策copy.deepcopy(cache)出独立分支再跑 suffix全程logits_to_keep1只取末位置 logitsParallel shared一个状态 prefill 一次后多个 suffix 分支并行前向见 src/semif_phase1/shared.py 的score_shared()构造左填充/掩码/位置 ID 布局CUDA 上用cache.reorder_cache复制分支并配合logits_to_keep只计算选定位置MPS 上则退化为独立 batch-1 循环Native reranker每个二元决策把状态重复两次构造两个独立的 yes/no 选项对并用普通对批量pair batching打分。计时范围与结果计时环境为一台 RTX 3090、warm-loaded BF16 模型计时区域包括提示词构造、tokenization、传输、前向传播、CPU 读取排除模型加载与结果文件写入。该口径在 benchmarks/shape777.py 的timing_scope字段中逐字固化脚本还会输出相对 fresh 模式的argmax_flips与最大概率差。README.md 记录的实测结果同一 owned 37×21 负载执行路径决策/秒777 决策总耗时Fresh direct 打分2.33333.1 sSerial prefix 复用10.7572.3 sParallel suffixes20.0338.8 sNative reranker1.86417.3 s值得注意的诚实声明快速复用路径是实验性的——BF16 执行相对 fresh 打分改变了 777 个 argmax 中的 5~6 个。fixture 见 benchmarks/data/shape777.jsonlreranker 运行器见 benchmarks/shape777_reranker.py原始计时与逐行预测提交在 results/raw/shape777-direct.json 及其predictions.jsonl。解释规则四条不可越界的结论纪律METHOD.md 用四条规则约束一切结果解读这也是评估体系的“红线”强制的类型化输出仍可能语义错误——logit 读取保证输出形态是类型化的但不保证语义正确对允许 token 的 softmax 是“以提供的备选为条件”的——它不是校准的操作置信度。这正是 direct.py 输出字段probability_status: conditional option score; uncalibrated as decision confidence的由来prefix-cache 加速是实现结果不是关于 Jev 披露架构的证据——复用速度只能归因于本实现与硬件不能外推到上游系统reranker 预期在排序上最强其分类阈值指标accuracy 等不应与排序质量混为一谈。这解释了为什么 README.md 的通用决策基线表中Direct logits 在多类决策任务上普遍优于 reranker而 reranker 在检索 Recall1 上同样达到 1.000。补充置信度校准与复现路径METHOD.md 聚焦方法骨架而置信度层面的“校准”由 docs/CALIBRATION.md 承接per-workload 温度缩放温度 T 单调因此不改变 argmax 与已提交的准确率只移动置信度。实现见 benchmarks/calibrate.py纯 numpy、CPU 离线运行、不加载模型用黄金分割搜索最小化平均 NLL 拟合单个标量 T并报告 group-disjoint 的 out-of-fold 校准authored 原始 ECE 0.068 → 校准后 0.038T1.23WANLI 0.208 → 0.069T2.50Every 0.050 → 0.047T1.71。完整的端到端复现精确环境、固定命令、扰动与验证步骤见 docs/REPRODUCE.md运行入口为semif-scoreCLI模式--mode direct|serial|shared、模型修订固定、--input examples/decisions.jsonl输入 schemaid/state/question/optionsstate可为非空 JSON 对象或数组在 README.md 的 Input 一节有完整示例。小结SemIf Phase 1 方法论的可取之处在于它把“复现接口模式”这一有限目标执行到了纪律级评估矩阵在输出前冻结、扰动变体对输出盲、计时范围与排除项逐字固化、TypeSafe 对照明确标注“102 行可对齐子集”而非“711 行聚合”并用四条解释规则守住结论边界。对于想在自己的软件里嵌入“运行时定义的语义决策”的工程团队docs/METHOD.md 与仓库中的 benchmarks/evaluate.py、src/semif_phase1/direct.py 共同构成了一份可复用的“如何严谨地度量一个无生成决策读取器”的参考实现。赞分享【免费下载链接】SemIfSemantic ifs from open models, on a 3090 at home. Independent; not affiliated with Jev or TypeSafe.项目地址https://gitcode.com/gh_mirrors/op/SemIf点击查看免费下载相关推荐SemIf 实战指南用开放模型在本地 GPU 上实现语义化 if——直接从类型化选项读取概率的运行时决策方案SemIf 实战指南用开放模型在本地 GPU 上实现语义化 if——直接从类型化选项读取概率的运行时决策方案 导读 SemIf前身 OpenJev是一Data-Science-For-Beginners 数据科学生命周期用 Pandas 完成“Analyzing”阶段的探索性数据分析实战指南Data Science For Beginners 数据科学生命周期用 Pandas 完成“Analyzing”阶段的探索性数据分析实战指南 本篇指南基于MemPalace 小模型评估框架model_eval深度解析用可复现的基准矩阵为 ≤4B 本地模型选型MemPalace 小模型评估框架model_eval深度解析用可复现的基准矩阵为 ≤4B 本地模型选型 本文基于 MemPalace 仓库中的 benc人工智能AI 应用RAGAgent 记忆MCP 服务本地部署创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表