更新 faiss 索引中的元素

Nil*_*lou 5 python word-embedding faiss

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

  1. 有没有更好的方法将单词与其向量联系起来?
  2. 我可以更新 faiss 中的第 n 个元素吗?

小智 7

你可以两者都做。

  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类型。