选择距离指标(余弦、L2、点积)
了解何时选择余弦距离、L2(欧几里得)距离或点积距离,以及大多数嵌入模型为何偏好余弦距离。
选择距离指标(余弦、L2、点积) 是 CoddyKit 上的免费 AI Agents 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Agents 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Agents 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
三种常见度量
向量数据库允许您选择距离度量。最常见的三种是:
- 余弦相似度 —— 向量之间的夹角
- 点积 —— 一个向量在另一个向量上的投影
- 欧几里得距离(L2) —— 直线距离
余弦
范围:-1 到 1。数值越高,越相似。
import numpy as np
def cosine(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))点积
范围:从负无穷到正无穷。数值越高,越相似。
def dot(a, b):
return np.dot(a, b)
# Equivalent to cosine when both vectors are unit-normalized.欧几里得距离(L2)
范围:0 到正无穷。数值越低,越相似。
def l2(a, b):
return np.linalg.norm(np.array(a) - np.array(b))应该使用哪一种?
对于文本嵌入,通常约定如下:
- OpenAI text-embedding-3 —— cosine(向量已预先归一化)
- Cohere —— cosine
- 句子转换器 / BGE —— 通常使用 cosine,请查看模型卡片
如果不确定,请使用 cosine。
归一化后点积等于余弦
如果 |a| = |b| = 1,那么 cos(a,b) = a . b。点积更快(无需除法)——生产系统通常会对预先归一化的向量使用 dot。
何时使用 L2
一些研究模型(较旧的 Sentence-BERT 变体、图像嵌入)使用 L2 距离进行训练,使用该距离时表现更好。请始终查看模型卡片。
为什么这对索引很重要
索引结构(HNSW、IVF、FAISS)是针对 SPECIFIC 度量构建的。建立索引后更改度量,通常意味着从头重建索引。
Setting Metric in Pinecone
from pinecone import ServerlessSpec
pc.create_index(
name='docs',
dimension=1536,
metric='cosine', # or 'dotproduct' or 'euclidean'
spec=ServerlessSpec(cloud='aws', region='us-east-1')
)Setting Metric in Qdrant
from qdrant_client.models import VectorParams, Distance
client.create_collection(
collection_name='docs',
vectors_config=VectorParams(size=1536, distance=Distance.COSINE)
)系统之间的度量不一致
如果之后使用交叉编码器重新排序,它会有自己的分数尺度。请先进行归一化,不要将不同度量混入单个复合分数中。
可视化差异
对于两个单位向量:
- cos = 1,L2 = 0 -> 相同
- cos = 0.5,L2 ~ 1 -> 相关
- cos = 0,L2 ~ sqrt(2) -> 正交
- cos = -1,L2 = 2 -> 相反
预先归一化一次
在摄取时进行归一化成本很低(只需一次除法)。这样可以锁定与 cosine / dot 的兼容性,并避免之后对每个 query 进行归一化。
vec = vec / np.linalg.norm(vec)默认度量
对于 OpenAI 文本嵌入,默认使用哪种距离度量?
回顾
文本使用 cosine。预先归一化一次,使用点积提升速度。在创建索引时设置度量——之后更改意味着重建索引。
常见问题解答
「选择距离指标(余弦、L2、点积)」课时是免费的吗?
是的 — 「选择距离指标(余弦、L2、点积)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。
「选择距离指标(余弦、L2、点积)」这节课中我会学到什么?
了解何时选择余弦距离、L2(欧几里得)距离或点积距离,以及大多数嵌入模型为何偏好余弦距离。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Agents 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「选择距离指标(余弦、L2、点积)」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Agents 课中编写并运行代码吗?
能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Pinecone、Weaviate、Qdrant:对比
- 混合搜索的元数据筛选
- 更新和删除向量
- 选择距离指标(余弦、L2、点积)