You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带权重的向量相似度计算方法咨询

加权向量相似度计算方案

针对你需要为向量不同维度赋予差异化权重的场景,最适配现有余弦相似度逻辑的方案是加权余弦相似度——通过对向量各维度元素先乘以对应权重,再执行常规的余弦相似度计算,从而放大重要维度对相似度结果的影响。以下是具体实现思路和修改后的代码:

核心思路

  1. 定义与向量维度匹配的权重数组,权重值越高,对应维度在相似度计算中的占比越大;
  2. 将目标向量和所有对比向量的每个元素与对应权重相乘,得到加权后的向量;
  3. 对加权后的向量执行常规的归一化和余弦相似度计算即可。

修改后的代码实现

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

# 待对比目标向量
propuesto = np.array([20, 85, 10, 10])

# 对比向量集合
vector_b1 = np.array([31, 83, 22, 88.5])
vector_b2 = np.array([25.4, 114.07, 18.2, 346.68])
vector_b3 = np.array([26.9, 85, 20.9, 123.87])
vector_b4 = np.array([25.7, 87.6, 20.96, 458.8])
vector_b5 = np.array([28.6, 71.4, 28.9, 690.5])
vector_b6 = np.array([30.2, 148.9, 26.33, 317.58])
vector_b7 = np.array([25.1, 87.8, 0, 0])
vector_b8 = np.array([32.4, 158.9, 23.33, 160.14])
vector_b9 = np.array([23, 89.4, 17.99, 561])
vector_b10 = np.array([16.64, 36.7, 27.8, 526])
vector_b11 = np.array([40, 85, 10, 10])

# 转换为矩阵格式
matriz_b = np.array([vector_b1, vector_b2, vector_b3, vector_b4, vector_b5, vector_b6, vector_b7, vector_b8, vector_b9, vector_b10, vector_b11])

# 定义各维度权重(按业务需求调整,数值越大对应维度越重要)
weights = np.array([0.5, 1.0, 0.3, 0.2])  # 示例:第二个维度权重最高

# 对向量应用权重:每个元素乘以对应维度的权重
propuesto_weighted = propuesto * weights
matriz_b_weighted = matriz_b * weights

# 归一化加权后的目标向量
vector_a_norm = propuesto_weighted / np.linalg.norm(propuesto_weighted)

# 归一化加权后的对比矩阵
matriz_b_norm = matriz_b_weighted / np.linalg.norm(matriz_b_weighted, axis=1, keepdims=True)

# 计算加权余弦相似度
similitudes = cosine_similarity([vector_a_norm], matriz_b_norm)

# 输出相似度结果
for i, similitud in enumerate(similitudes[0]):
    print(f"与向量B{i + 1}的加权相似度: {similitud:.4f}")

额外说明

  • 权重无需预先归一化,只需保证权重为正数即可,业务上直接按相对重要性设置数值;
  • 若不想依赖sklearn库,可手动实现加权余弦相似度公式:
    def weighted_cosine_similarity(a, b, weights):
        a_weighted = a * weights
        b_weighted = b * weights
        dot_product = np.dot(a_weighted, b_weighted)
        norm_a = np.linalg.norm(a_weighted)
        norm_b = np.linalg.norm(b_weighted)
        return dot_product / (norm_a * norm_b)
    

内容的提问来源于stack exchange,提问作者Miguel JV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:10:30