当前位置: 首页 > 工具软件 > Annoy > 使用案例 >

快速索引词向量-annoy

仉宸
2023-12-01

annoy 是 高维空间求近似最近邻的框架,速率快,轻便实用。
GitHub地址:https://github.com/spotify/annoy

配合腾讯词向量,可以快速查找语义接近的向量:

tencent_annoy_index = AnnoyIndex(self.size,metric='angular') #存储
tencent_annoy_index.add_item(index, query_vector) #添加向量
tencent_annoy_index.get_nns_by_vector(query_sentence, 10) #查找前n个最近的向量

常规使用方法

直接安装: pip install annoy
API:

AnnoyIndex(f, metric) f 向量维度,metric 距离度量方式,取值 “angular”, “euclidean”, “manhattan”, “hamming”, or “dot”. 计算angular是使用的sqrt(2(1-cos(u,v)))这个公式,用的欧几里得距离。euc = sqrt(2(1-cos))。

a.add_item(i, v) 添加元素 i 和向量 v

a.build(n_trees, n_jobs=-1) n_trees是森林的树数目,值越大结果越精确,n_jobs 进程数,默认-1使用所有的CPU。build调用之后,就不能再添加元素了。

a.save(fn, prefault=False) 保存到本地

a.load(fn, prefault=False) 从本地读取,prefault是预先读入内存,默认为False.

a.unload() 清除加载内容

a.get_nns_by_item(i, n, search_k=-1, include_distances=False) 返回n个最近元素。在查询过程中,它将检查search_k个节点,如果没有提供,默认为n_trees * n。search_k给了一个速度和准确率的折中。include_distances设为True,会提供一个由两个列表组成的二元组,第二个列表包含所有相关的距离。

a.get_nns_by_vector(v, n, search_k=-1, include_distances=False)结果一样,不过是通过向量v来查询。

a.get_item_vector(i) 返回索引i对应的向量

a.get_distance(i, j) 返回元素i和j的距离,squared distance

a.get_n_items() 返回元素数量

a.get_n_trees() 返回树数目

a.on_disk_build(fn) 指定在除了RAM之外的其他文件上构建索引(在添加元素之前执行)

a.set_seed(seed) 在构建树之前可以指定随机数,这里面主要有两个参数需要调,n_trees和search_k,一个是构建时的参数,一个是搜索时的参数。

参考:annoy解读

 类似资料: