DimensionError llm data_error ai_generated true

chromadb.errors.DimensionError:插入的嵌入维度(512)与集合维度(768)不匹配

chromadb.errors.DimensionError: Inserted embedding dimension (512) does not match collection dimension (768)

ID: llm/embedding-dimension-mismatch-insert

其他格式: JSON · Markdown 中文 · English
85%修复率
88%置信度
1证据数
2024-03-15首次发现

版本兼容性

版本状态引入弃用备注
chromadb==0.4.22 active
chromadb==0.5.0 active
sentence-transformers==2.2.2 active
openai==1.12.0 active

根因分析

用于插入的嵌入模型生成的向量维度与创建集合时使用的模型维度不同,通常是由于切换了嵌入模型或使用了不同输出维度的模型。

English

The embedding model used for insertion produces vectors of a different dimensionality than the model used when creating the collection, often due to switching embedding models or using a model with a different output dimension.

generic

官方文档

https://docs.trychroma.com/usage-guide#creating-collections

解决方案

  1. 删除现有集合并使用相同的嵌入模型重新创建,该模型将用于所有插入。例如,在 ChromaDB 中:`client.delete_collection("my_collection"); collection = client.create_collection(name="my_collection", embedding_function=current_embedding_function)`
  2. 如果必须保留现有集合,请使用新模型重新嵌入所有现有文档并重新插入。使用脚本遍历所有文档,调用 `embedding_model.encode(doc)` 并更新到集合中。
  3. 创建集合时显式设置嵌入函数维度:`collection = client.create_collection(name="my_collection", metadata={"hnsw:space": "cosine"}, embedding_function=current_embedding_function)` 并验证 `collection.metadata['dimension']` 是否与您的模型输出匹配。

无效尝试

常见但无效的做法:

  1. 95% 失败

    Padding distorts the vector space and ruins retrieval accuracy; the collection's distance metrics expect all vectors to have the same semantic dimensionality.

  2. 80% 失败

    ChromaDB infers dimension from the first inserted embedding; if the first insert uses the wrong model, the same mismatch occurs again.

  3. 90% 失败

    Reshaping changes the data layout but not the semantic content; distance computations become meaningless and retrieval degrades to random.