本页面介绍了如何在提供的矢量距离函数中进行选择 来衡量向量嵌入之间的相似度。
从生成式 AI 中生成嵌入后, Spanner 数据,您可以使用矢量 距离函数。下表介绍了矢量距离函数 。
函数 | 说明 | 公式 | 与以下对象的关系: 增加相似度 |
---|---|---|---|
点积 | 计算角度 \(\theta\) 的余弦乘以相应矢量幅度的乘积。 | \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) | 提高 |
余弦距离 | 余弦距离函数用一 (cosine_distance() = 1 - cosine similarity ) 减去余弦相似度。余弦相似度用于测量两个向量之间 \(\theta\) 角度的余弦。
|
1 - \(\frac{a^T b}{|a| \cdot |b|}\) | 减少 |
欧几里得距离 | 测量两个矢量之间的直线距离。 | \(\sqrt{(a_1-b_1)^2+(a_2-b_2)^2+...+(a_N-b_N)^2}\) | 减少 |
选择相似度度量
根据是否所有向量嵌入都已归一化,您可以 确定使用哪个相似度度量来查找相似度。标准化的 向量嵌入的大小(长度)正好为 1.0。
此外,如果您知道训练模型时使用的距离函数, 使用该距离函数测量向量与矢量之间的相似度, 嵌入。
标准化数据
如果您的数据集中的所有向量嵌入都已归一化,那么这三个
函数提供相同的语义搜索结果。从本质上讲,虽然每个
函数会返回不同的值,这些值的排序方式也相同。时间
嵌入已经过标准化处理,DOT_PRODUCT()
通常是计算能力最强的
但在大多数情况下,这种差异微乎其微。但是,如果您的
应用对性能要求很高,DOT_PRODUCT()
或许可以帮助您
性能调整。
非标准化数据
如果您的数据集中的向量嵌入未归一化,
那么将 DOT_PRODUCT()
用作距离在数学上是不正确的
函数,因为点积作为函数不测量距离。取决于
如何生成嵌入以及首选搜索类型,
COSINE_DISTANCE()
或 EUCLIDEAN_DISTANCE()
函数会生成
搜索结果的主观上优于另一个功能。
使用 COSINE_DISTANCE()
或 EUCLIDEAN_DISTANCE()
进行的实验
以确定哪种方法最适合您的用例。
不确定数据是标准化数据还是非标准化数据
如果您不确定数据是否经过标准化,而您想要使用
DOT_PRODUCT()
,我们建议您改用 COSINE_DISTANCE()
。
COSINE_DISTANCE()
与 DOT_PRODUCT()
类似,内置了标准化。
使用“COSINE_DISTANCE()
”衡量的相似度介于 -1
到 1
之间。1 条结果
接近 0
表示这些向量非常相似。
后续步骤
- 详细了解如何通过查找 k 最近邻来执行矢量搜索。
- 了解如何将嵌入导出到 Vertex AI Vector Search。
- 详细了解 GoogleSQL
COSINE_DISTANCE()
、EUCLIDEAN_DISTANCE()
和DOT_PRODUCT()
函数。 - 详细了解 PostgreSQL
spanner.cosine_distance()
、spanner.euclidean_distance(), and spanner.dot_product()
函数。