ChromaDB 如何处理固定维度的嵌入

了解 ChromaDB 如何管理固定维度的嵌入,以及在使用不同嵌入模型时如何确保兼容性。
2025年3月13日
chromadb嵌入向量数据库
引言
ChromaDB 是一款强大的向量数据库,专为语义搜索和相似性检索而设计。其核心功能之一是能够存储和查询固定维度的嵌入。在本文中,我们将探讨 ChromaDB 如何处理固定维度的嵌入,维度为何重要,以及在使用不同嵌入模型时如何确保兼容性。
了解固定维度的嵌入
嵌入是文本、图像或其他数据类型在高维空间中的数值表示。嵌入的维度指的是其向量表示中的元素数量。例如,流行的 all-MiniLM-L6-v2
模型生成的嵌入具有 384 个维度。
在 ChromaDB 中,每个集合都强制要求存储在其中的所有嵌入具有固定的维度。这确保了一致性,并使得相似性搜索操作更加高效。
固定维度为何重要
- 一致性:固定维度确保集合中的所有向量在进行相似性计算(例如余弦相似度或欧几里得距离)时具有兼容性。
- 性能:ChromaDB 使用 HNSW 等索引算法,这些算法依赖固定维度的向量来进行高效的最近邻搜索。
- 模型兼容性:不同的嵌入模型会生成不同维度的向量。ChromaDB 要求集合中的所有嵌入与创建集合时使用的模型的维度相匹配。
ChromaDB 如何强制执行固定维度
在 ChromaDB 中创建集合时,维度由你指定的嵌入模型决定。例如:
import chromadb
from chromadb.utils.embedding_functions import SentenceTransformerEmbeddingFunction
# 使用 384 维度的模型初始化嵌入函数
embedding_fn = SentenceTransformerEmbeddingFunction()
# 创建具有固定维度的集合
client = chromadb.Client()
collection = client.create_collection(
name="my_collection",
embedding_function=embedding_fn
)