精华内容
下载资源
问答
  • Annoy算法

    2020-08-20 19:34:36
    快速计算距离Annoy算法原理及Python使用 海量数据相似查找系列2 – Annoy算法
    展开全文
  • Spark-Annoy(WIP) 在Apache Spark上构建 Index。 然后使用Annoy查询邻居。 注意 我在5分钟内使用100个节点构建了117M个64维向量的索引。 设置为; // version: 0.1.4 // spark.executor.instances = 100 // ...
  • annoy 安装

    2021-03-24 12:00:09
    annoy 安装 QS1: gcc 版本太低, 需要进行升级 参考: http://www.vpser.net/manage/centos-6-upgrade-gcc.html QS2:在安装的时候回遇到以下的情况,提示 “fatal error: Python.h: No such file or directory” ...

    annoy 安装

    QS1: gcc 版本太低, 需要进行升级
    参考: http://www.vpser.net/manage/centos-6-upgrade-gcc.html
    在这里插入图片描述

    QS2:在安装的时候回遇到以下的情况,提示 “fatal error: Python.h: No such file or directory”

    ERROR: Command errored out with exit status 1:
         command: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-8nik2grm/annoy_8d4a0092f225406a9a9d27f03a9146b5/setup.py'"'"'; __file__='"'"'/tmp/pip-install-8nik2grm/annoy_8d4a0092f225406a9a9d27f03a9146b5/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-__bt1mwd/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.6m/annoy
             cwd: /tmp/pip-install-8nik2grm/annoy_8d4a0092f225406a9a9d27f03a9146b5/
        Complete output (17 lines):
        running install
        running build
        running build_py
        creating build
        creating build/lib.linux-x86_64-3.6
        creating build/lib.linux-x86_64-3.6/annoy
        copying annoy/__init__.py -> build/lib.linux-x86_64-3.6/annoy
        running build_ext
        building 'annoy.annoylib' extension
        creating build/temp.linux-x86_64-3.6
        creating build/temp.linux-x86_64-3.6/src
        gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python3.6m -c src/annoymodule.cc -o build/temp.linux-x86_64-3.6/src/annoymodule.o -D_CRT_SECURE_NO_WARNINGS -march=native -O3 -ffast-math -fno-associative-math -DANNOYLIB_MULTITHREADED_BUILD -std=c++14
        src/annoymodule.cc:17:10: fatal error: Python.h: No such file or directory
           17 | #include "Python.h"
              |          ^~~~~~~~~~
        compilation terminated.
        error: command 'gcc' failed with exit status 1
        ----------------------------------------
    ERROR: Command errored out with exit status 1: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-8nik2grm/annoy_8d4a0092f225406a9a9d27f03a9146b5/setup.py'"'"'; __file__='"'"'/tmp/pip-install-8nik2grm/annoy_8d4a0092f225406a9a9d27f03a9146b5/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-__bt1mwd/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.6m/annoy Check the logs for full command output.
    

    sol, 进行安装
    yum install python-devel 但是需要注意 python的安装版本,跟你需要的是否一致,这个默认安装的是 python2

    Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos, subscription-manager
    
    This system is not registered with an entitlement server. You can use subscription-manager to register.
    
    Loading mirror speeds from cached hostfile
     * centos-sclo-rh: mirrors.aliyun.com
     * centos-sclo-sclo: mirrors.aliyun.com
    Package python-devel-2.7.5-90.el7.x86_64 already installed and latest version
    Nothing to do
    

    如果版本不一致,其实并不起作用。

    yum install python3-devel 这个是安装的python3的

    展开全文
  • ANNOY索引算法

    2021-09-03 14:02:39
    Annoy向量检索算法 官方包:https://github.com/spotify/annoy (gensim自带AnnoyIndexer) https://medium.com/@kevin_yang/ python 接口 pip install --user annoy AnnoyIndex(f, metric) #返回一个只读索引,...

    Annoy向量检索算法

    官方包:https://github.com/spotify/annoy
    (gensim自带AnnoyIndexer)
    https://medium.com/@kevin_yang/

    python 接口

    pip install --user annoy

    AnnoyIndex(f, metric) #返回一个只读索引,存储f维向量. Metric可以是 "angular", "euclidean", "manhattan", "hamming", or "dot".
    a.add_item(i, v) # 添加item i (非负整数) 和对应的向量. 会给分配max(i)+1的空间
    a.build(n_trees, n_jobs=-1) #生成一个由n_trees组成的森林。更多的树会有更高的精确度.生成之后,不能再添加别的item. n_jobs代表生成森林时的线程个数. n_jobs=-1代表使用所有的CPU核.
    a.save(fn, prefault=False) #保存索引
    a.load(fn, prefault=False) #加载索引文件。将会把所有数据加载到内存中 (using mmap with MAP_POPULATE). Default is False.
    a.unload() #unloads.
    a.get_nns_by_item(i, n, search_k=-1, include_distances=False) #returns the n closest items. During the query it will inspect up to search_k nodes which defaults to n_trees * n if not provided. search_k代表时间和准确率和速度的折中. include_distances为True将会返回两个item和distance
    a.get_nns_by_vector(v, n, search_k=-1, include_distances=False) #same but query by vector v.
    a.get_item_vector(i) #返回第i item的vector
    a.get_distance(i, j) #返回i和j的距离. NOTE: this used to return the squared distance, but has been changed as of Aug 2016.
    a.get_n_items() #返回索引的数据的个数
    a.get_n_trees() #返回索引的树的个数
    a.on_disk_build(fn) #prepares annoy to build the index in the specified file instead of RAM (execute before adding items, no need to save after build)
    a.set_seed(seed) #will initialize the random number generator with the given seed. Only used for building up the tree, i. e. only necessary to pass this before adding the items. Will have no effect after calling a.build(n_trees) or a.load(fn).
    
    注意:
    没有对值执行边界检查,因此要小心。
    使用归一化向量的欧几里德距离作为其角度距离,对于两个向量u,v等于sqrt(21-cos(u,v)))
    
    n_tree在构建期间提供,并影响构建时间和索引大小。值越大,结果越准确,但索引越大。
    search_k是在运行时提供的,会影响搜索性能。值越大,结果越准确,但返回时间越长。
    如果未提供search_k,它将默认为n*n_tree,其中n是近似最近邻的数目。
    否则,search_k和n_tree基本上是独立的,即如果search_k保持不变,n_tree的值不会影响搜索时间,反之亦然。
    基本上,考虑到您可以负担的内存量,建议将n_tree设置得尽可能大,并且考虑到查询的时间限制,建议将search_k设置得尽可能大。
    
    

    示例:

    def __init__(self):
    	self.index = AnnoyIndex(self.dim, 'angular')   # Length of item vector that will be indexed
    	for i in range(len(self.vectors)):
    	    self.index.add_item(i, self.vectors[i])
    	    
    	self.index.build(5) # 5 trees
    	self.index.save(annoy_path)
    	self.index.load(annoy_path) # super fast, will just mmap the file
    
    
    def search(self, input_v):
          input_shape = input_v.shape
          candidates = []
          for i in range(input_shape[0]):
              input_i = np.array(input_v[i,:]).reshape(-1,1)
              candi_ids_i = self.index.get_nns_by_vector(input_i, self.top_k, search_k=-1, include_distances=False)
    
              candi_i = []
              ids = set()
              for i in range(self.top_k):
                  id_i = self.id_lists[candi_ids_i[i]]
                  if candi_ids_i[i] in ids:
                      continue
                  vector_i = np.array(self.index.get_item_vector(candi_ids_i[i])).reshape(-1,1)
                  dis_i = cos_sim(input_i, vector_i)
                  candi_i.append((id_i, dis_i[0]))
                  ids.add(id_i)
              candidates.append(candi_i)
          return candidates
    

    C++接口

    #include “annoylib.h”.

    参考

    https://blog.csdn.net/lsp1991/article/details/78127754
    https://blog.csdn.net/lsp1991/article/details/78127754

    算法目标

    annoy 算法的目标是建立一个数据结构能够在较短的时间内找到任何查询点的最近点,在精度允许的条件下通过牺牲准确率来换取比暴力搜索要快的多的搜索速度。

    算法流程

    1: 建立索引

    Annoy的目标是建立一个数据结构,使得查询一个点的最近邻点的时间复杂度是次线性
    Annoy 通过建立一个二叉树来使得每个点查找时间复杂度是O(log n)

    看下面这个图,随机选择两个点,以这两个节点为初始中心节点,执行聚类数为2的kmeans过程,最终产生收敛后两个聚类中心点。这两个聚类中心点之间连一条线段(灰色短线),建立一条垂直于这条灰线,并且通过灰线中心点的线(黑色粗线)。这条黑色粗线把数据空间分成两部分。在多维空间的话,这条黑色粗线可以看成等距垂直超平面。
    在这里插入图片描述

    接下里在超平面分割后的字空间内按照同样的方法继续确定超平面分割字空间,通过这样的方法我们可以将子空间的从属关系用二叉树来表示:
    在这里插入图片描述

    然后再继续分割,继续重复上述步骤,直到子节点包含的数据点数不超过 K 个,这里我们取 K = 10。
    在这里插入图片描述

    通过多次递归迭代划分的话,最终原始数据会形成类似下面这样一个二叉树结构。二叉树底层是叶子节点记录原始数据节点,其他中间节点记录的是分割超平面的信息。Annoy建立这样的二叉树结构是希望满足这样的一个假设: 相似的数据节点应该在二叉树上位置更接近,一个分割超平面不应该把相似的数据节点分割二叉树的不同分支上。对应的二叉树结构如下所示:
    在这里插入图片描述

    2 查询过程

    通过上述步骤,我们建立了二叉树的结构用于表示上述点分布空间,每个节点都表示一个子空间,在点分布空间中接近的子空间在二叉树结构中表现为位置靠近的节点。

    这里有一个假设,如果两个点在空间中彼此靠近,任何超平面都不可能将他们分开。
    如果要搜索空间中的任意一个点,我们都可以从根结点遍历二叉树。
    假设我们要找下图中红色 X 表示的点的临近点:查找的过程就是不断看他在分割超平面的哪一边。
    从二叉树索引结构来看,就是从根节点不停的往叶子节点遍历的过程。通过对二叉树每个中间节点(分割超平面相关信息)和查询数据节点进行相关计算来确定二叉树遍历过程是往这个中间节点左孩子节点走还是右孩子节点走。
    通过以上方式完成查询过程。
    在这里插入图片描述

    3 存在问题

    但是上述描述存在两个问题:
    (1)查询过程最终落到叶子节点的数据节点数小于 我们需要的Top N相似邻居节点数目怎么办?
    (2)两个相近的数据节点划分到二叉树不同分支上怎么办?

    4 解决方法

    (1)如果分割超平面的两边都很相似,那可以两边都遍历;下面是是个示意图:
    在这里插入图片描述
    2) 建立多棵二叉树树,构成一个森林,每个树建立机制都如上面所述那样。多棵树示意图如下所示:
    在这里插入图片描述
    (3) 采用优先队列机制:采用一个优先队列来遍历二叉树,从根节点往下的路径,根据查询节点与当前分割超平面距离(margin)进行排序。

    5:合并节点

    每棵树都返回一堆近邻点后,如何得到最终的Top N相似集合呢?首先所有树返回近邻点都插入到优先队列中,求并集去重, 然后计算和查询点距离, 最终根据距离值从近距离到远距离排序, 返回Top N近邻节点集合。

    展开全文
  • python安装annoy

    2021-02-21 10:53:25
    python安装annoy debug解决 ERROR: Command errored out with exit status 1: ERROR: annoy-1.17.0-cp39-cp39-win_amd64.whl is not a supported wheel on this platform.

    目录

    报错的部分内容如下:ERROR: Command errored out with exit status 1:

    ERROR: annoy-1.17.0-cp39-cp39-win_amd64.whl is not a supported wheel on this platform.


    python安装annoy

    首先在终端:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple annoy --user   或者  pip install annoy时出现了报错

    报错的部分内容如下:
    ERROR: Command errored out with exit status 1:

    这里换个方法:先去网上安装个whl文件,再pip安装

    1. 确定自己的电脑是几位的,现在一般是64位机

    2. 去 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 找到对应版本的whl文件,其中cp37代表3.7版本,win32代表Windows系统32位机

    3. 安装对应版本的whl文件。可以放在自己\anaconda\Lib\site-packages\  文件夹下统一保存

    4. 下载对应的whl文件后,在cmd下进入whl所在的文件

    5.  

    6. 最后再输入pip install whl的文件全名进行安装就可以了。

    如果出现了报错:

    ERROR: annoy-1.17.0-cp39-cp39-win_amd64.whl is not a supported wheel on this platform.

    不是方法的问题,只是下载的whl和电脑python版本不匹配。换个whl文件试试就行了

     

    展开全文
  • centos7上安装annoy.pdf

    2021-09-13 14:19:35
    centos7上安装annoy.pdf
  • Annoy Annoy (Approximate Nearest Neighbors Oh Yeah) is a C++ library with Python bindings to search for points in space that are close to a given query point. It also creates large read-only ...
  • centos7上安装annoy

    千次阅读 2018-12-19 21:53:32
    检查信息: # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) # python -V Python 2.7.5 安装pip ...安装annoy ...# pip install annoy Collecting annoy Downloading http...
  • 安装python版本的annoy

    2021-09-09 19:38:54
    安装python版本的annoy 1.pip安装,失败 使用pip install annoy来安装python版本的annoy,但是报错如下 WARNING: Discarding ...
  • Annoy 近邻算法

    2019-03-22 10:40:00
    Annoy 随机选择两个点,以这两个节点为初始中心节点,执行聚类数为2的kmeans过程,最终产生收敛后两个聚类中心点 二叉树底层是叶子节点记录原始数据节点,其他中间节点记录的是分割超平面的信息 ...
  • annoy向量检索算法

    千次阅读 2019-12-11 11:37:06
    annoy 算法的目标是建立一个数据结构能够在较短的时间内找到任何查询点的最近点,在精度允许的条件下通过牺牲准确率来换取比暴力搜索要快的多的搜索速度。 二:算法流程 1:建立索引 Annoy的目标是建立一个数据...
  • annoy简单介绍 annoy是高维空间求近似最近邻的一个开源库。其官网介绍如下: Annoy (Approximate Nearest Neighbors Oh Yeah) is a C++ library with Python bindings to search for points in space that are close...
  • 安诺·迈克(AnnoyMyke) 安诺·迈克(Annoy Myke)
  • annoy-1.17.0-cp39-cp39-win32

    2021-08-19 10:18:42
    annoy-1.17.0-cp39-cp39-win32
  • annoy-1.17.0-cp38-cp38-win32

    2021-08-19 10:18:36
    annoy-1.17.0-cp38-cp38-win32
  • annoy-1.17.0-cp310-cp310-win32
  • python 安装annoy

    千次阅读 2020-03-24 21:57:11
    进入终端安装 pip install --user annoy 这个时候大概率会报错,报错信息大概是Microsoft visual c++ 14.0 is required。。。。 简单的解决办法: 链接:https://pan.baidu.com/s/1eJqG1DauBeLaz94O94bEQw 提取码...
  • annoy python3.6 离线安装包 annoy-1.15.2-cp36-cp36m-win_amd64
  • annoy-1.17.0-cp37-cp37m-win32
  • annoy-1.17.0-cp36-cp36m-win32
  • Annoy:Approximate Nearest Neighbors Oh Yeah HNSW:Hierarchcal Navigable Small World graphs KD Tree:K dimentional Tree LSH:Locality Sensitive Hashing Annoy Annoy 是 Spotify 开源的高维空间求近似最近...
  • annoy-1.17.0-cp38-cp38-win_amd64
  • annoy-1.17.0-cp310-cp310-win_amd64
  • 预编译好的python3.7+window10下的annoy包;可以避开安装VC++14.0。 应该直接解压到site-packages下就能用了~
  • annoy-1.17.0-cp37-cp37m-win_amd64
  • annoy-1.17.0-cp36-cp36m-win_amd64
  • Annoy(Approximate Nearest Neighbors Oh Yeah)是一个 C++ 库,带有 Python 绑定,用于搜索空间中靠近给定查询点的点。 它还创建了大型只读基于文件的数据结构,这些数据结构被映射到内存中,以便许多进程可以共享...
  • Python——annoy的安装&如何安装包

    千次阅读 2020-12-03 23:54:03
    Python——annoy的安装 目标:在不同操作系统中安装annoy,用于从海量文本中快速查找出相似的Top N 文本。 背景:Annoy是高维空间求近似最近邻的一个开源库。GitHub:Annoy源码,本文主要谈如何在Windows、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,718
精华内容 687
关键字:

annoy