首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新faiss索引中的元素

更新faiss索引中的元素
EN

Stack Overflow用户
提问于 2022-03-26 12:10:28
回答 3查看 1.6K关注 0票数 2

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

  1. 有没有更好的方法把单词和它们的向量联系起来?
  2. 我能更新faiss中的第n个元素吗?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-19 15:04:22

你可以两者兼得。

  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,搜索结果将被搞乱。

若要删除ID数组,请调用index.remove_ids(ids_to_replace)

Nota :ID必须是np.int64类型的。

票数 3
EN

Stack Overflow用户

发布于 2022-03-28 06:23:28

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

在github上有一些开源矢量数据库,它们可以帮助您。比如milvus,vespa,等等

milvus是拥有最多星星的人

https://milvus.io

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

票数 1
EN

Stack Overflow用户

发布于 2022-03-28 18:32:42

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

如果你对Faiss的替代品持开放态度,我建议你研究一下皮尼酮。它为您管理一切,所以您只需使用它们的upsert方法插入( ID,向量)对,然后更新向量,只需使用相同的ID来更新新向量。设置这个指南解释了可能需要5-10分钟。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71627943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档