Annoy小结以及在自然语言处理方面的应用

距离公式

  1. Euclidean distance(欧式距离)
    欧式距离

  2. Taxicab geometry (曼哈顿距离)
    曼哈顿距离

  3. Cosine similarity(余弦距离)
    余弦距离

  4. Hamming distance(汉明距离)
    在信息论中,两个等长字符串之间的汉明距离是相应符号不同的位置数。换句话说,它测量将一个字符串转换为另一个字符串所需的最小替换数,或可能将一个字符串转换为另一个字符串的最小错误数。
    例如:
    “karolin” and “kathrin” is 3.
    “karolin” and “kerstin” is 3.
    “kathrin” and “kerstin” is 4.
    1011101 and 1001001 is 2.
    2173896 and 2233796 is 3.

  5. Dot product(点积)
    点积

annoy API说明

  • AnnoyIndex(f,metric)创建一个索引对象,用以读写和保存vector,f为vertor的dimension,metric为距离的度量标准:“angular”, “euclidean”, “manhattan”, “hamming”, “dot”
  • a.add_item(i,v)用于给索引添加向量v,i(任何非负整数)是给向量v的表示。
  • a.build(n_trees,n_jobs = -1)建立n_trees树的森林。查询时,树越多,精度越高。调用build之后,不能再添加任何项目。n_jobs指定用于构建树的线程数。n_jobs = -1使用所有可用的CPU内核。
  • a.save(fn,prefault = False)将索引保存到磁盘并加载(请参阅下一个函数)。保存后,不能再添加任何项目。
  • a.load(fn,prefault = False)从磁盘加载(映射)索引。如果prefault设置为True,它将把整个文件预读到内存中(使用带有MAP_POPULATE的mmap )。默认值为False。
  • a.unload()卸载。
  • a.get_nns_by_item(i,n,search_k = -1, include_distances = False)返回第i 个item的n个最近邻的item。在查询期间,它将最多检查search_k个节点(如果未提供,则默认为n_trees * n个)。search_k为您提供了更好的准确性和速度之间的运行时权衡。如果将include_distances设置为True,它将返回一个包含两个列表的2元素元组:第二个包含所有对应的距离。
  • 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之间的距离。。
  • a.get_n_items()返回索引中的项目数。
  • a.get_n_trees()返回索引中的树数。
  • a.on_disk_build(fn)指定文件而不是RAM中建立索引(在添加项目之前执行,在建立之后无需保存)
  • a.set_seed(seed)将使用给定的种子初始化随机数生成器。仅用于构建树,即仅在添加项目之前需要传递它。调用a.build(n_trees)或a.load(fn)后将无效。

官网示例

from annoy import AnnoyIndex
import random

f = 3
t = AnnoyIndex(f, 'angular')  # 创建一个索引对象,用以读写和保存vector
for i in range(10):
    v = [random.gauss(0, 1) for z in range(f)]  # v表示索引i的vector,维度为3
    print("索引:{}".format
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值