LEANN 中的归一化嵌入支持 LEANN 现在能够自动检测归一化嵌入模型,并为实现最佳性能而设置合适的距离度量。 什么是归一化嵌入? 归一化嵌入是 L2 范数等于 1 的向量(即单位向量)。这些嵌入经过优化,更适合计算余弦相似度,而非最大内积搜索(MIPS)。由于归一化向量的长度恒为 1,余弦相似度等价于点积,因此在归一化空间中,余弦相似度和点积排序结果一致,但使用余弦距离(1 - 余弦相似度)作为度量能确保 HNSW 等近似最近邻算法的正确性和效率。
LEANN 现在能够自动检测归一化嵌入模型,并为实现最佳性能而设置合适的距离度量。
归一化嵌入是 L2 范数等于 1 的向量(即单位向量)。这些嵌入经过优化,更适合计算余弦相似度,而非最大内积搜索(MIPS)。由于归一化向量的长度恒为 1,余弦相似度等价于点积,因此在归一化空间中,余弦相似度和点积排序结果一致,但使用余弦距离(1 - 余弦相似度)作为度量能确保 HNSW 等近似最近邻算法的正确性和效率。
当您使用归一化嵌入模型创建一个 LeannBuilder 实例时,LEANN 将:
distance_metric="cosine""mips" 或 "l2"),则显示警告所有 OpenAI 文本嵌入模型均为归一化:
text-embedding-ada-002text-embedding-3-smalltext-embedding-3-large所有 Voyage AI 嵌入模型均为归一化:
voyage-2voyage-3voyage-large-2voyage-multilingual-2voyage-code-2所有 Cohere 嵌入模型均为归一化:
embed-english-v3.0embed-multilingual-v3.0embed-english-light-v3.0embed-multilingual-light-v3.0from leann.api import LeannBuilder # Automatic detection - will use cosine distance builder = LeannBuilder( backend_name="hnsw", embedding_model="text-embedding-3-small", embedding_mode="openai" ) # Warning: Detected normalized embeddings model 'text-embedding-3-small'... # Automatically setting distance_metric='cosine' # Manual override (not recommended) builder = LeannBuilder( backend_name="hnsw", embedding_model="text-embedding-3-small", embedding_mode="openai", distance_metric="mips" # Will show warning ) # Warning: Using 'mips' distance metric with normalized embeddings...
像 facebook/contriever 这样的模型以及其他非归一化的 sentence-transformers 模型(如 all-MiniLM-L6-v2、bge-base-en 等),默认将继续使用 MIPS,这对它们来说是最优选择。这些模型的输出向量未经过 L2 归一化,因此最大内积搜索能更准确地反映语义相关性。
如果对归一化嵌入使用了错误的距离度量,可能会导致:
在归一化嵌入空间中,MIPS 与余弦相似度等价,但 HNSW 索引对距离函数的单调性和范围敏感。使用 mips 距离度量时,HNSW 会将内积视为“距离”,而内积值越大表示越相似,这与 HNSW 默认的“距离越小越相似”假设相冲突,可能导致索引构建或查询行为异常。
有关此问题的更多详细信息,请参阅我们位于 embedding detection code 中的分析。该代码可自动处理归一化嵌入及 MIPS 距离度量相关问题。
免责声明:
本文档采用基于机器的 AI 翻译服务进行翻译。尽管我们力求准确,但请注意,自动翻译可能存在错误或不准确之处。应以原文语言版本的文档作为权威依据。如需获取关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。