更新 faiss 索引中的元素
Update an element in faiss index
我正在使用 faiss indexflatIP
来存储与某些词相关的向量。我还使用另一个列表来存储单词(列表中第 n 个元素的向量是 faiss 索引中的第 n 个向量)。我有两个问题:
- 是否有更好的方法将单词与其向量相关联?
- 我可以更新 faiss 中的第 n 个元素吗?
faiss只是ann算法库,不能用于数据持久化和管理
github 上有一些开源的矢量数据库,它们也许能帮到你。比如 milvus、vespa 等等
milvus 是 star 最多的
您可以使用 add_with_ids
方法添加具有整数 ID 值的向量,我相信这也可以让您更新特定向量 - 但您需要构建某种添加层 vector-ID Faiss 之外的映射和管理,因为它不被其他方式支持。我以前做过这个,但不是很有趣。
如果您对 Faiss 替代品持开放态度,我建议您研究一下 Pinecone。它为您管理一切,因此您只需使用它们的 upsert
方法插入您的 (id, vector) 对,然后更新向量您只需 upsert
具有相同 ID 的新向量。设置可能需要 5-10 分钟,这 guide explains how.
两者都可以。
- Is there a better way to relate words to their vectors?
致电index.add_with_ids(vectors, ids)
有些索引类型支持 add_with_ids
方法,但平面索引不支持。
如果您在平面索引上调用该方法,您将收到错误 add_with_ids not implemented for this type of index
如果要使用扁平索引的ID,必须使用index2 = faiss.IndexIDMap(index)
- Can I update the nth element in the faiss?
如果你想更新一些编码,先删除它们,然后用add_with_ids
重新添加它们
如果不先删除原始 ID,就会出现重复 ID,搜索结果也会一团糟。
要删除 ID 数组,请调用 index.remove_ids(ids_to_replace)
注意事项:ID 必须是 np.int64
类型。
我正在使用 faiss indexflatIP
来存储与某些词相关的向量。我还使用另一个列表来存储单词(列表中第 n 个元素的向量是 faiss 索引中的第 n 个向量)。我有两个问题:
- 是否有更好的方法将单词与其向量相关联?
- 我可以更新 faiss 中的第 n 个元素吗?
faiss只是ann算法库,不能用于数据持久化和管理
github 上有一些开源的矢量数据库,它们也许能帮到你。比如 milvus、vespa 等等
milvus 是 star 最多的
您可以使用 add_with_ids
方法添加具有整数 ID 值的向量,我相信这也可以让您更新特定向量 - 但您需要构建某种添加层 vector-ID Faiss 之外的映射和管理,因为它不被其他方式支持。我以前做过这个,但不是很有趣。
如果您对 Faiss 替代品持开放态度,我建议您研究一下 Pinecone。它为您管理一切,因此您只需使用它们的 upsert
方法插入您的 (id, vector) 对,然后更新向量您只需 upsert
具有相同 ID 的新向量。设置可能需要 5-10 分钟,这 guide explains how.
两者都可以。
- Is there a better way to relate words to their vectors?
致电index.add_with_ids(vectors, ids)
有些索引类型支持 add_with_ids
方法,但平面索引不支持。
如果您在平面索引上调用该方法,您将收到错误 add_with_ids not implemented for this type of index
如果要使用扁平索引的ID,必须使用index2 = faiss.IndexIDMap(index)
- Can I update the nth element in the faiss?
如果你想更新一些编码,先删除它们,然后用add_with_ids
如果不先删除原始 ID,就会出现重复 ID,搜索结果也会一团糟。
要删除 ID 数组,请调用 index.remove_ids(ids_to_replace)
注意事项:ID 必须是 np.int64
类型。