深入理解嵌入向量(Embeddings)与相似度度量标准
向量数据库,其存储的核心对象都是嵌入向量(Embeddings),检索的唯一依据也是向量之间的相似度度量(Similarity Metrics)。然而,许多初学者在不理解底层数学原理的情况下混用距离度量方式,往往导致检索召回率极低或耗费了不必要的计算资源。
本文将为您揭开 Embeddings 的本质,并深入剖析余弦相似度、内积和欧氏距离的异同与最佳实践。
1. 什么是嵌入向量(Embeddings)?
在数学上,嵌入向量是一个将高维离散的语义对象(例如一个单词、一句话、一张图或一段音频)映射到低维连续实数空间的密集实数向量(Dense Vector)。
例如,OpenAI 的新一代文本嵌入模型 text-embedding-3-small 可以把一段文本转化为一个 $1536$ 维的浮点数数组。这个数组并不是杂乱无章的,而是捕捉了文本的语义特征。两个在语义上相似的实体,在这个高维空间中的相对距离会非常短。
2. 三大主流相似度度量标准
向量数据库通常提供三种距离度量计算方式,它们在数学公式及应用场景上有着明显的区别:
2.1 欧氏距离(L2 / Euclidean Distance)
计算多维空间中两个点之间的直线距离。
- 数学公式:
$$D(x, y) = \sqrt{\sum_{i=1}^n (x_i - y_i)^2}$$ - 特点:距离越小说明越相似。欧氏距离受向量的**绝对长度(幅值)**影响极大。如果两个文档语义相同但其中一个长度是另一个的数倍,导致其向量长度不同,欧氏距离可能会非常大。
- 适用场景:常用于图像检索、声纹匹配等对物理量绝对大小敏感的场景。
2.2 余弦相似度(Cosine Similarity)
计算两个向量夹角的余弦值。
- 数学公式:
$$\text{Similarity}(x, y) = \frac{x \cdot y}{|x| |y|} = \frac{\sum x_i y_i}{\sqrt{\sum x_i^2} \sqrt{\sum y_i^2}}$$ - 特点:余弦值范围在 $[-1, 1]$ 之间。夹角为 0 时余弦值为 1(完全相同),夹角为 90 度时余弦值为 0(正交,无关联)。它只关注方向上的相似度,而忽略向量的长度。
- 适用场景:NLP 文本相似度检索、推荐系统、情感分析。
2.3 内积(Inner Product / Dot Product)
计算两个向量对应元素乘积的和。
- 数学公式:
$$\text{Similarity}(x, y) = x \cdot y = \sum_{i=1}^n x_i y_i$$ - 特点:如果向量没有经过归一化,内积值范围是无界的。内积同时受方向和向量长度影响。
- 适用场景:在大规模工业检索中,内积通常是最受欢迎的度量方式,但前提是必须进行归一化(L2 Normalization)。
3. 为什么向量归一化(Normalization)是黄金定律?
如果我们将所有的 Embedding 向量在存入数据库前,全部执行 L2 归一化(即使得向量的模长 $|x| = 1$),我们会得到一个神奇的数学简化:
当 $|x| = 1$ 且 $|y| = 1$ 时,余弦相似度公式简化为:
$$\text{Similarity}(x, y) = x \cdot y = \text{内积}$$
这意味着:归一化后,余弦相似度在数值上完全等同于内积!
归一化的性能优势:
- 计算速度翻倍:计算内积仅需要执行一次乘加累加(FMA)指令,而计算余弦相似度则需要计算开平方根和除法(极其耗费 CPU 时钟周期)。
- 对硬件更友好:SIMD(单指令多数据)和 GPU 架构能够以极高的吞吐量运行向量乘加运算,从而大幅提升 QPS。
因此,在向量数据库的日常开发中,**“先归一化,再选内积(IP)作为度量标准”**是业内公认的最佳实践。
本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。



暂无评论
还没有人评论过本文,快来发表你的高见吧!