1. 为什么更新嵌入函数必须重建向量数据库?
在自然语言处理(NLP)和语义搜索应用中,文本嵌入模型(Text Embedding Model)扮演着关键角色。它负责将文本转换为高维向量表示,这些向量捕获了文本的语义信息。而向量数据库(如ChromaDB)则存储这些向量,并提供高效的相似度检索功能。
1.1 嵌入函数与向量的强绑定关系
嵌入函数(Embedding Function)实际上是一个数学映射,它将文本从自然语言空间转换到向量空间。这个映射过程不是随机的,而是基于特定的模型架构和训练数据学习得到的。因此,不同嵌入函数生成的向量具有以下三个关键特性:
-
维度特性:每个嵌入函数输出的向量维度是固定的。例如:
- ONNX MiniLM-L6-v2模型生成384维向量
- BERT-base-chinese模型生成768维向量
- OpenAI的text-embedding-ada-002模型生成1536维向量
-
语义空间特性:即使两个模型输出的向量维度相同,它们所定义的语义空间也可能完全不同。比如,在一个模型中"苹果"可能更接近"水果",而在另一个模型中可能更接近"手机品牌"。
-
数值分布特性:不同模型对输出向量的归一化处理方式不同。有的使用L2归一化,有的使用层归一化,导致向量数值分布存在差异。
1.2 混用不同嵌入向量的后果
当我们在同一个向量集合中混用不同嵌入函数生成的向量时,会出现以下问题:
-
维度不匹配:直接导致相似度计算无法进行。例如,尝试计算384维向量和768维向量之间的余弦相似度在数学上就是不可能的。
-
语义不一致:即使维度相同,不同模型编码的语义信息也不兼容。这会导致检索结果完全偏离预期,返回不相关的内容。
-
相似度失真:由于数值分布不同,相似度计算结果会失去可比性。原本应该相似的文本可能计算出很低的相似度分数。
重要提示:这种现象不仅存在于ChromaDB中,而是所有向量数据库(包括Pinecone、Milvus、Weaviate等)的通用特性。因为问题的本质在于嵌入模型本身的特性,而非特定数据库的实现。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 实际操作:如何安全更新嵌入函数
2.1 标准更新流程
当需要更换嵌入函
