学习
实践
活动
专区
工具
TVP
写文章

腾讯词向量实战:通过Annoy进行索引和快速查询

上周《玩转腾讯词向量:词语相似度计算和在线查询》推出后,有同学提到了annoy,我其实并没有用annoy,不过对annoy很感兴趣,所以决定用annoy试一下腾讯 AI Lab 词向量。 学习一个东西最直接的方法就是从官方文档走起:https://github.com/spotify/annoy , Annoy是Spotify开源的一个用于近似最近邻查询的C++/Python工具,对内存使用进行了优化 照着官方文档,我在自己的机器上进行了简单的测试(Ubuntu16.04, 48G内存, Python2.7, gensim 3.6.0, annoy, 1.15.2),以下是Annoy初探。 安装annoy很简单,在virtuenv虚拟环境中直接:pip install annoy,然后大概可以按着官方文档体验一下最简单的case了: In [1]: import random In [2] 也就是说我的txt文件需要是 1 vec 2 vec 所以从一开始我就考虑避开这个坑,刚好gensim的相关接口支持得很好,另外gensim官方文档里也有一份关于Annoy的文档,引入了Annoy的接口

2.7K50

​我如何用Annoy和ThreadPool把相似度计算加速360倍

Annoy来进行加速。 下面看看Annoy自己的介绍: 看最后一句话: Annoy算法是Erik这个老哥,在Spotify的Hack Week期间,花了几个下午的时候开发的。 ,遂取名ANNOY~(纯属个人遐想,请勿当真) Annoy算法原理 一个有追求的programmer,除了知道有这么个算法外,一定还想了解一下它背后的原理,所以我花了一天阅读Annoy作者的博客,找到YouTube 为了确认,我查看作者Erik给出的一个示例代码(并非Annoy代码,Annoy使用C++写的,我还看不太明白,但作者为了展示Annoy算法的代码,也用python写了一个简单例子): 上述代码我画了一个图来表示 记得在不使用Annoy indexer的情况下,上面代码需要跑150小时!(我们不用去度假啦,健个身代码就跑完啦~)所以这个Annoy足足把速度加速了75倍!

17120
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何在Python中快速进行语料库搜索:近似最近邻算法

    这里我们将生成 lmdb 图和 Annoy 索引。 1. 首先需要找到嵌入的长度,它会被用来做实例化 Annoy 的索引。 2. 确保我们在当前路径中没有 Annoy 索引或 lmdb 图。 4. 将嵌入文件中的每一个 key 和向量添加至 lmdb 图和 Annoy 索引。 5. 构建和保存 Annoy 索引。 将我们的文件命名为 annoy_inference.py,得到下列依赖项: 现在我们需要在 Annoy 索引和 lmdb 图中加载依赖项,我们将进行全局加载,以方便访问。 用 get_item_vector(id) 获取 Annoy 对应的向量; 3. 用 a.get_nns_by_vector(v, num_results) 获取 Annoy 的最近邻。 主函数从命令行中启用 annoy_inference.py。 现在我们可以使用 Annoy 索引和 lmdb 图,获取查询的最近邻!

    73150

    教程 | 如何在Python中快速进行语料库搜索:近似最近邻算法

    这里我们将生成 lmdb 图和 Annoy 索引。 1. 首先需要找到嵌入的长度,它会被用来做实例化 Annoy 的索引。 2. 确保我们在当前路径中没有 Annoy 索引或 lmdb 图。 4. 将嵌入文件中的每一个 key 和向量添加至 lmdb 图和 Annoy 索引。 5. 构建和保存 Annoy 索引。 annoy import lmdb import argparse 现在我们需要在 Annoy 索引和 lmdb 图中加载依赖项,我们将进行全局加载,以方便访问。 确保你的 VEC_LENGTH 与嵌入长度匹配,否则 Annoy 会不开心的哦~ VEC_LENGTH = 50 FN_ANNOY = 'glove.6B.50d.txt.annoy' FN_LMDB 用 get_item_vector(id) 获取 Annoy 对应的向量; 3. 用 a.get_nns_by_vector(v, num_results) 获取 Annoy 的最近邻。

    91240

    玩转腾讯词向量:Game of Words(词语的加减游戏)

    上一篇文章《腾讯词向量实战:通过Annoy进行索引和快速查询》结束后,觉得可以通过Annoy做一点有趣的事,把“词类比(Word Analogy)”操作放到线上,作为AINLP公众号聊天机器人的新技能, 毕竟这是word2vec,或者词向量中很有意思的一个特性,刚好,Annoy也提供了一个基于vector进行近似最近邻查询的接口: get_nns_by_vector(v, n, search_k=-1 通过Annoy,我把这个服务做到线上,现在可以在AINLP公众号后台测试,结果看起来也还不错:“机场-飞机+火车=高铁站”: ? 当然,Annoy的topk最近邻结果是不完全精确的,有两个参数对查询结果影响较大:n_trees 和 search_k There are just two main parameters needed to tune Annoy: the number of trees n_trees and the number of nodes to inspect during searching search_k

    56520

    扫码关注腾讯云开发者

    领取腾讯云代金券