ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Clef-Flash 如何把 logits 变成概率?Prior 余弦相似度、Joint Logits 与残差门控三项融合完整源码分析

Clef-Flash 如何把 logits 变成概率?Prior 余弦相似度、Joint Logits 与残差门控三项融合完整源码分析 Clef-Flash 如何把 logits 变成概率Prior 余弦相似度、Joint Logits 与残差门控三项融合完整源码分析【免费下载链接】clef-flash项目地址: https://ai.gitcode.com/hf_mirrors/Cloudflare/clef-flashClef-Flash 是 Cloudflare 开源的 9B 多模态决策模型它读入一段状态文本、JSON、图片或视频和一组带选项的问题在一次前向传播内为每个问题的每个允许选项输出一个 logit再对每个问题单独做 softmax就得到所有选项的概率。没有自由文本生成也没有输出解析。本文带你用源码视角搞清楚这三个 logit 从哪里来又是如何被 Prior 余弦相似度、Joint Logits 和残差门控融合成最终概率的。一、先看懂 Clef-Flash一次前向每题每个选项一个 logit普通的语言模型是一个 token 一个 token 地吐字Clef-Flash 的思路完全不同——README.md 里给出的输出定义非常直白Output:one logit per allowed option for each question. Apply a softmax per question to get probabilities.也就是说模型内部被拆成两个部分组件对应文件作用骨干网络含视觉编码器model-00001-of-00004.safetensors 等 4 个分片、config.json把输入读成隐藏状态Joint Schema 头joint_head.safetensors、joint_head_config.json把隐藏状态变成每题每选项的 logits头部的超参数在 joint_head_config.json 中一目了然主干隐藏维度 4096头内部降到 1024 宽2 层证据路由 4 层 Transformer 解码16 个注意力头。全部核心逻辑集中在 joint_schema_model.py 的JointSchemaHead类里。二、logits 的总账prior 门控 × joint在深入三个部件之前先看最终拼装公式。joint_schema_model.py#L455-L457 只有两行代码却是全文的总账logit prior sigmoid(residual_gate) * jointprior余弦相似度先验来自选项词向量与问题锚点的直接匹配joint联合打分来自证据路由后的选项向量与字段向量的相似度 一个 MLP 残差项residual_gate一个可学习的标量参数joint_schema_model.py#L337初始化时sigmoid(0) 0.5决定 joint 部分以多大的音量参与最终 logit。训练完成后每个选项的 logit 就是这三者的融合结果对同一问题的所有选项做 softmax概率就出来了。下面逐个拆解。三、Prior 余弦相似度用选项自己的词向量直接打分第一路信号叫Priorjoint_schema_model.py#L433-L439。它的直觉很简单答案往往就藏在题目里。发票是否逾期这类问题正确答案的选项文本与问题文本在语义空间里天然靠近所以可以先用一次余弦相似度打底。具体做法分三步构建锚点anchor把该问题的隐藏状态均值question_vector与序列最后一个 token 的全局向量global_vector相加并归一化得到这个方向的参考轴L433-L436提取选项词向量lexical对每个选项的原始 token直接取骨干网络输出嵌入表中对应 token 的向量并取平均L379-L383再归一化得到lexical_anchor相似度 × 可学习温度prior prior_scale * (lexical_anchor · anchor)其中prior_scale exp(clamp(prior_logit_scale, maxlog100))——一个上界 100 倍的可学习缩放防止先验项失控。 注意这里的prior_logit_scale、joint_logit_scale、residual_gate三个标量参数L335-L337都在 joint_head.safetensors 里被训练出来是模型自己学会分配信任的旋钮。四、Joint Logits证据路由 字段向量的联合打分第二路信号Jointjoint_schema_model.py#L440-L454承担理解的角色比余弦先验重得多分两条线索汇合1️⃣ 选项向量被证据路由加工每个选项先用三类信息拼成查询向量选项所在文本段的隐藏状态、选项词向量、所属问题的向量L388-L398。然后所有选项一起穿过 2 层EvidenceRoutingLayerL242-L278——这是一种交叉注意力结构选项作为 query去翻阅整条输入序列的 memory骨干的全部隐藏状态相当于让每个选项把状态里与己相关的证据摘出来。2️⃣ 字段向量field融合全局信息问题向量、各选项的路由摘要按相似度 softmax 加权、全局向量、问题类型嵌入noul/choice/score相加L415-L420再经 4 层 Transformer 解码层继续从 memory 中取材得到最终的field向量。3️⃣ 相似度 残差项joint joint_scale * cosine(field, option) residualcosine是字段向量与选项向量的余弦相似度residual则由一个 MLPresidual_scorer计算——它的输入是把 field 与 option 四种特征拼接原始、逐元素乘积、绝对差L443-L452专门用来捕捉余弦相似度表达不了的细微差异。joint_scale同样是上界 100 的可学习温度L453。五、残差门控让模型自己决定听谁的把前两路合起来的 joint_schema_model.py#L455-L457 就是文章标题里的残差门控logit prior sigmoid(residual_gate) * joint这是一个很克制的设计prior 永远全额生效相当于保底——即使训练不充分模型至少具备题目里找答案的能力joint 通过 sigmoid 门控进入门控值是训练出来的如果数据支持更强的联合推理训练会把它推向 1让复杂打分占主导门控初值 0 使训练起点稳定在先验 一半联合的折中位置。可以把它理解成残差学习的思想把强模型joint当作在先验prior基础上的残差修正量再用门控控制修正幅度。六、从 logits 到概率对每个问题单独 softmax最后的转换发生在推理层而不是模型内部。以 SystemOne 接口为例joint_schema_model.py#L564-L571probabilities question_logits.float().softmax(-1).tolist()每个问题独立归一化softmax 只作用在同一问题的选项组内-1维所以状态是 paid 还是 overdue的概率加起来为 1不同问题之间互不干扰随后systemone_answer把概率翻译成业务答案noul题返回 true 的概率choice题返回概率最高的选项及置信度score题则对分数做期望值概率加权求和。这也解释了为什么 Clef-Flash 的输出可以直接用于下游风控或路由概率是结构化的、可比较的而不是需要二次解析的文本。七、关键文件速查 内容文件三项融合与 softmax 全部源码joint_schema_model.py头部超参数2 路由层 4 解码层joint_head_config.json头部权重含三个门控/温度标量joint_head.safetensors骨干网络Qwen3.5-9B 分片权重model-00001-of-00004.safetensors ~ model-00004-of-00004.safetensors、model.safetensors.index.json骨干配置4096 隐藏维度等config.json分词器与图像/视频处理器tokenizer.json、processor_config.json、chat_template.jinja一句话总结Clef-Flash 的 logit 余弦先验题目词向量打地基 sigmoid 门控 × 联合打分证据路由后的深度理解每问题 softmax 后即为最终概率——三条线一次前向零文本生成。【免费下载链接】clef-flash项目地址: https://ai.gitcode.com/hf_mirrors/Cloudflare/clef-flash创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表