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

如何计算单个图像embedding与一组图像embedding的余弦相似度距离?

单图像embedding与embedding组的距离计算方法

你使用的TensorFlow内置余弦相似度接口本身支持批量计算,仅需做简单的维度适配即可实现1对N的计算,无需循环逐个计算,执行效率更高。

核心逻辑

余弦相似度的计算支持TensorFlow的广播机制,只需将形状为(1028,)的单个embedding扩展为(1, 1028)的二维张量,即可直接和形状为(5,1028)的embedding组做批量运算,输出结果为长度为5的数组,对应单张图和组内每张图的相似度/距离值。

代码实现

基于Keras CosineSimilarity接口的实现

import tensorflow as tf
from tensorflow.keras import metrics

# 输入处理:如果你的embedding group是Python列表,先转为TF张量
embedding_single = tf.convert_to_tensor(Embedding_1) # 形状(1028,)
embedding_group = tf.convert_to_tensor(Embedding_Group) # 形状(5, 1028)

# 给单个embedding增加批次维度,形状变为(1, 1028)
embedding_single_expanded = tf.expand_dims(embedding_single, axis=0)

# 批量计算余弦相似度,axis=1指定在特征维度计算
cosine_similarity = metrics.CosineSimilarity(axis=1)(embedding_single_expanded, embedding_group)

# 如需得到余弦距离,用1减去相似度即可(相似度范围[-1,1],距离范围[0,2])
cosine_distance = 1 - cosine_similarity

手动实现版本(更易自定义调整)

如果不想依赖Keras的Metrics接口,也可以用基础算子直接实现:

# 对两个张量做L2归一化
norm_single = tf.nn.l2_normalize(embedding_single_expanded, axis=1)
norm_group = tf.nn.l2_normalize(embedding_group, axis=1)

# 点积计算得到余弦相似度,结果和接口实现完全一致
cosine_similarity = tf.reduce_sum(tf.multiply(norm_single, norm_group), axis=1)

注意事项

  • 如果你的embedding组规模非常大(比如万级以上),建议配合TensorFlow的矩阵运算优化能力,不要用Python循环逐对计算,性能差距可达百倍以上
  • 注意区分余弦相似度和余弦距离的取值范围,避免后续相似度排序时逻辑搞反

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:06:05