ARTICLE DETAIL

资讯详情

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

Superlinked查询加权数学原理:搜索结果排序背后的权重算术

Superlinked查询加权数学原理:搜索结果排序背后的权重算术 Superlinked查询加权数学原理搜索结果排序背后的权重算术【免费下载链接】sieOpen-source inference server and production cluster for all the models your agent needs.项目地址: https://gitcode.com/GitHub_Trending/su/sieSuperlinked 是一款开源的语义搜索框架它的查询加权Query Weighting机制决定了多路搜索结果如何融合排序。本文从源码出发拆解 Superlinked 权重算术的三大核心公式——加权向量求和、L2 归一化、输入域聚合帮你彻底理解搜索排序背后的数学。Superlinked查询时间权重示意不同空间在查询时的权重设置一、权重从哪来每个空间一个权重参数在 Superlinked 中一次查询往往同时命中多个空间Space文本空间、数字空间、时间新近度空间、类别空间……每个空间各自产出一个向量而查询加权就是给每个空间的向量分配一个系数控制它对最终排序的贡献度。权重的默认值定义在 const.py 中DEFAULT_WEIGHT 1.0默认参与融合DEFAULT_NOT_AFFECTING_WEIGHT 0.0权重为 0 表示该空间完全不影响结果相当于被静默关闭当用户对某个空间的字段做看起来像looks like过滤时框架会通过 looks_like_filter_clause_weights_by_space.py 中的LooksLikeFilterClauseWeightBySpace把用户传入的权重绑定到具体空间上权重映射由 space_weight_map.py 的SpaceWeightMap统一管理未传权重时自动回落到默认值 1.0。Superlinked多路向量嵌入组合示意多空间向量如何参与融合二、核心公式①加权向量求和这是整个排序系统最重要的一步实现在 aggregation.py 的VectorAggregation类中。给定每个空间产出的向量 vᵢ 和对应权重 wᵢ聚合公式为V Σ (wᵢ · vᵢ)跳过权重为 0 的项再对 V 做 L2 归一化对应源码逻辑第 61–78 行先把负过滤位置替换为 0再乘以权重然后逐个累加。几个关键细节权重是逐分量缩放向量每个维度都乘以同一个 wᵢ相当于整体拉伸该方向的信号强度0 权重直接剔除weight 0的项根本不进入求和这正是该空间不参与排序的数学含义负过滤位保护所有参与聚合的向量若在同一维度都标记了负过滤聚合后该维度继续保留负过滤语义保证排除项不会被权重计算悄悄抹掉。三、核心公式②L2 归一化让权重可比较加权求和之后结果向量的模长会随权重大小而变化。Superlinked 在 normalization.py 中提供了完整的归一化工具箱归一化公式适用场景L2Norm除以 ‖v‖₂欧几里得范数向量聚合后的标准收尾步骤L1Norm除以 Σ|vᵢ|稀疏向量的鲁棒归一ConstantNorm除以固定常数需要保持绝对量纲的空间CategoricalNorm按类别数做期望最大值的归一类别相似空间对VectorAggregation而言L2 归一化是权重算术的关键一环它把不同权重大小产生的模长差异抹平使最终比较只保留方向信息。也就是说权重改变的是方向占比而不是距离尺度——这保证了不同空间的结果在余弦相似度下公平比较。四、核心公式③输入域聚合Min-Max 数字空间文本向量可以直接相加但数字空间的向量先被编码进了嵌入空间直接加权求和在语义上并不合理。Superlinked 的解法是InputAggregation见 aggregation.py反向解码用inverse_embed把每个空间的向量还原成原始数值 xᵢ在原始数值上做权重聚合三种模式可选加权平均x Σ(wᵢ·xᵢ) / ΣwᵢInputAvg用np.average实现取最小x min(xᵢ)InputMin取最大x max(xᵢ)InputMax重新嵌入把聚合后的数值 x 再次 embed 成向量参与后续流程。这就是为什么 Min-Max 数字空间可以表达价格在 100~500 之间这种带权区间约束——权重在数值域生效语义才正确。五、权重如何流到执行层DAG 节点权重表用户设置的权重不会直达向量而是先翻译成节点权重表。QueryWeightingquery_weighting.py负责把用户对某字段的权重映射到查询 DAG 中对应的嵌入节点 ID 上并以SPACE_WEIGHT_PARAM_NAME为键注入执行上下文。执行时weight_arithmetics.py 提供两个原子操作apply_vector_weight取出节点权重执行vector * weightget_weight_abs_sum对一组节点求权重绝对值之和用于需要归一化后权重的场景这一层设计让用户权重与 DAG 拓扑解耦同一个QueryWeighting映射既能服务查询也能被 NLQ自然语言查询复用——NLQ 场景下权重被限定为 -1/0/1 三档NLQ_WEIGHT_TYPE见 const.py语义分别是排除/忽略/包含。六、实践建议如何设置合理的权重起点从 1.0 开始所有空间等权是最中性 baseline用 0 做开关而不是删除空间权重 0 会优雅地跳过该空间方便 A/B 对比数字区间约束优先用 Min-Max 模式让权重在数值域生效权重只改变方向占比由于 L2 归一化兜底把全部权重翻倍不会改变排序调整的是空间之间的相对比例。小结Superlinked 的查询加权可以浓缩为三步算术加权向量求和 → L2 归一化 → 输入域聚合数值空间。权重 0 表示不参与、1.0 为默认参与配合 DAG 节点权重表把用户的一个浮点数变成最终排序结果的确定性影响。理解这套权重算术你就能精准调控多路语义搜索的融合行为。更多查询机制细节可参考官方文档 query_weighting 参考 与 查询子句概览。【免费下载链接】sieOpen-source inference server and production cluster for all the models your agent needs.项目地址: https://gitcode.com/GitHub_Trending/su/sie创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表