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

栏目: Python · 发布时间: 6年前

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

最近,我一直在研究在 GloVe 词嵌入中做加减法。例如,我们可以把「king」的词嵌入向量减去「man」的词嵌入向量,随后加入「woman」的词嵌入得到一个结果向量。随后,如果我们有这些词嵌入对应的语料库,那么我们可以通过搜索找到最相似的嵌入并检索相应的词。如果我们做了这样的查询,我们会得到:

我们有很多方法来搜索语料库中词嵌入对作为最近邻查询方式。绝对可以确保找到最优向量的方式是遍历你的语料库,比较每个对与查询需求的相似程度——这当然是耗费时间且不推荐的。一个更好的技术是使用向量化余弦距离方式,如下所示:

想要了解余弦距离,可以看看这篇文章:http://masongallo.github.io/machine/learning,/python/2016/07/29/cosine-similarity.html

矢量化的余弦距离比迭代法快得多,但速度可能太慢。是近似最近邻搜索算法该出现时候了:它可以快速返回近似结果。很多时候你并不需要准确的最佳结果,例如:「Queen」这个单词的同义词是什么?在这种情况下,你只需要快速得到足够好的结果,你需要使用近似最近邻搜索算法。

在本文中,我们将会介绍一个简单的 Python 脚本来快速找到近似最近邻。我们会使用的 Python 库是 Annoy 和 Imdb。对于我的语料库,我会使用词嵌入对,但该说明实际上适用于任何类型的嵌入:如音乐推荐引擎需要用到的歌曲嵌入,甚至以图搜图中的图片嵌入。

制作一个索引

让我们创建一个名为:「make_annoy_index」的 Python 脚本。首先我们需要加入用得到的依赖项:

最后一行里非常重要的是「vector_utils」。稍后我们会写「vector_utils」,所以不必担心。

接下来,让我们丰富这个脚本:加入「creat_index」函数。这里我们将生成 lmdb 图和 Annoy 索引。

1. 首先需要找到嵌入的长度,它会被用来做实例化 Annoy 的索引。

2. 接下来实例化一个 Imdb 图,使用:「env = lmdb.open(fn_lmdb, map_size=int(1e9))」。

3. 确保我们在当前路径中没有 Annoy 索引或 lmdb 图。

4. 将嵌入文件中的每一个 key 和向量添加至 lmdb 图和 Annoy 索引。

5. 构建和保存 Annoy 索引。

我已经推断出 argparse,因此,我们可以利用命令行启用我们的脚本:

添加主函数以启用脚本,得到 make_annoy_index.py:

现在我们可以仅利用命令行启用新脚本,以生成 Annoy 索引和对应的 lmdb 图!

写向量Utils

我们在 make_annoy_index.py 中推导出 Python 脚本 vector_utils。现在要写该脚本,Vector_utils 用于帮助读取.txt, .bin 和 .pkl 文件中的向量。

写该脚本与我们现在在做的不那么相关,因此我已经推导出整个脚本,如下:

测试 Annoy 索引和 lmdb 图

我们已经生成了 Annoy 索引和 lmdb 图,现在我们来写一个脚本使用它们进行推断。

将我们的文件命名为 annoy_inference.py,得到下列依赖项:

现在我们需要在 Annoy 索引和 lmdb 图中加载依赖项,我们将进行全局加载,以方便访问。注意,这里设置的 VEC_LENGTH 为 50。确保你的 VEC_LENGTH 与嵌入长度匹配,否则 Annoy 会不开心的哦~

有趣的部分在于「calculate」函数。

1. 从 lmdb 图中获取查询索引;

2. 用 get_item_vector(id) 获取 Annoy 对应的向量;

3. 用 a.get_nns_by_vector(v, num_results) 获取 Annoy 的最近邻。

再次,这里使用 argparse 来使读取命令行参数更加简单。

主函数从命令行中启用 annoy_inference.py。

现在我们可以使用 Annoy 索引和 lmdb 图,获取查询的最近邻!

代码

本教程所有代码的 GitHub 地址:https://github.com/kyang6/annoy_tutorial


以上所述就是小编给大家介绍的《如何在Python中快速进行语料库搜索:近似最近邻算法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Starfish and the Spider

The Starfish and the Spider

Ori Brafman、Rod A. Beckstrom / Portfolio Hardcover / 2006-10-05 / USD 24.95

Understanding the amazing force that links some of today's most successful companies If you cut off a spider's leg, it's crippled; if you cut off its head, it dies. But if you cut off a st......一起来看看 《The Starfish and the Spider》 这本书的介绍吧!

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具