更新faiss索引中的元素

问题描述 投票:0回答:4

我正在使用

faiss indexflatIP
来存储与某些单词相关的向量。我还使用另一个列表来存储单词(列表中第 n 个元素的向量是 faiss 索引中的第 n 个向量)。我有两个问题:

  1. 有没有更好的方法将单词与其向量联系起来?
  2. 我可以更新faiss中的第n个元素吗?
python word-embedding faiss
4个回答
4
投票

两者都可以。

  1. 有没有更好的方法将单词与其向量联系起来?

致电

index.add_with_ids(vectors, ids)

某些索引类型支持方法

add_with_ids
,但扁平索引不支持。

如果在平面索引上调用该方法,您将收到错误

add_with_ids not implemented for this type of index

如果您想使用具有平面索引的 ID,则必须使用

index2 = faiss.IndexIDMap(index)

  1. 我可以更新faiss中的第n个元素吗?

如果您想更新某些编码,请先删除它们,然后使用

add_with_ids

再次添加它们

如果不先删除原始ID,就会出现重复,搜索结果会变得混乱。

要删除 ID 数组,请调用

index.remove_ids(ids_to_replace)

注意:ID 必须为

np.int64
类型。


2
投票

您可以使用

add_with_ids
方法来添加具有整数 ID 值的向量,我相信这也将允许您更新特定向量 - 但您将需要在外部构建某种向量 ID 映射和管理的附加层Faiss 的,因为否则不支持它。我以前做过这个,但不是很有趣。

如果您愿意接受 Faiss 替代品,我建议您考虑一下 Pinecone。它会为您管理一切,因此您只需使用其

upsert
方法插入(id,向量)对,然后要更新向量,您只需
upsert
具有相同 ID 的新向量即可。设置可能需要 5-10 分钟,本指南解释了如何


1
投票

faiss只是一个安算法库,不能用于数据持久化和管理

github上有一些开源的矢量数据库,它们也许可以帮助你。比如 milvus、vespa 等等

milvus 是星星最多的一个

https://milvus.io

https://github.com/milvus-io/milvus


0
投票

似乎您正在手动管理单词及其嵌入。我们正在构建一个开源矢量数据库,以使您的工作更轻松:https://github.com/epsilla-cloud/vectordb,尝试一下,让我们知道您的感受

© www.soinside.com 2019 - 2024. All rights reserved.