LSH︱python实现局部敏感哈希——LSHash(二)

关于局部敏感哈希算法,之前用R语言实现过,但是由于在R中效能太低,于是放弃用LSH来做相似性检索。学了Python发现很多模块都能实现,而且通过随机投影森林让查询数据更快,觉得可以试试大规模应用在数据相似性检索+去重的场景。

私认为,文本的相似性可以分为两类:一类是机械相似性;一类是语义相似性。 机械相似性代表着,两个文本内容上的相关程度,比如“你好吗”和“你好”的相似性,纯粹代表着内容上字符是否完全共现,应用场景在:文章去重; 语义相似性代表着,两个文本语义上的相似程度,比如“苹果”和“公司”的相似性,本篇不做这一讨论

之前写关于R语言实现的博客: R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(一,基本原理) R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(二,textreuse介绍)

机械相似性python版的四部曲: LSH︱python实现局部敏感随机投影森林——LSHForest/sklearn(一) LSH︱python实现局部敏感哈希——LSHash(二) 相似性︱python+opencv实现pHash算法+hamming距离(simhash)(三) LSH︱python实现MinHash-LSH及MinHash LSH Forest——datasketch(四) .

一、LSHash介绍

官方文档:https://github.com/kayzhu/LSHash

这个模块是python里面专门来实现LSH,比较特别的有:

  • 通过使用NumPy数组的计算将高维数据快速哈希。
  • 支持多哈希索引
  • 内置通常的距离函数/排名输出

安装

pip install lshash

.

1、主函数

LSHash(hash_size, input_dim, num_of_hashtables=1, storage=None, matrices_filename=None, overwrite=False)
  • hash_size:

二进制散列的长度。

  • input_dim:

输入变量的维度

  • num_hashtables = 1:

(optional)多索引查询时哈希表数量。

  • storage = None: Specify the name of the storage to be used for the index storage. Options include “redis”. 存储
  • matrices_filename = None:

文档存储,以.npz方式

  • overwrite = False:

是否覆盖原文件 .

2、函数:lsh.index(input_point, extra_data=None)

  • input_point:

输入

  • extra_data = None:

(optional) Extra data to be added along with the input_point. .

3、查询函数:lsh.query(query_point, num_results=None, distance_func=”euclidean”):

  • query_point:

The query data point is an array or tuple of numbers of input_dim.

  • num_results = None:

(optional) The number of query results to return in ranked order. By default all results will be returned.

  • distance_func = “euclidean”:

强调:这里的距离函数有,euclidean,true_euclidean,centred_euclidean,cosine,l1norm,hamming等多种。默认是euclidean 距离。

.

二、简单案例

>>> from lshash import LSHash

>>> lsh = LSHash(6, 8)
>>> lsh.index([1,2,3,4,5,6,7,8])
>>> lsh.index([2,3,4,5,6,7,8,9])
>>> lsh.index([10,12,99,1,5,31,2,3])
>>> lsh.query([1,2,3,4,5,6,7,7])
[((1, 2, 3, 4, 5, 6, 7, 8), 1.0),
 ((2, 3, 4, 5, 6, 7, 8, 9), 11)]

LSHash(6, 8),创建一个8维度,6-bits的哈希,初始化一下; lsh.index,数据载入的过程; lsh.query,查询。 这里可以选择自己喜欢的距离。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏racaljk

2018刑侦科推理试题

如果直接推理很难,还要不断试错。既然这样不如借助计算机暴力出结果(因为只有4^9=262144种情况,可以无脑秒出)。具体做法是

885
来自专栏数据结构与算法

1062. 计算曼哈顿距离

题目描述 给出平面上两个点的坐标(x1,y1),(x2,y2),求两点之间的曼哈顿距离。曼哈顿距离=|x1-x2|+|y1-y2|。 输入 一行四个空格隔开的实...

3077
来自专栏生信技能树

【直播】我的基因组73:在IGV看看indel是啥样子

前面我们特意用scalpel软件来找indel,期待它会有一些出彩的表现,当然我还没来得及比较它找到的INDEL跟GATK等工具区别在哪里,不过我们先在IGV里...

3679
来自专栏懒人开发

(11.3)James Stewart Calculus 5th Edition:The Integral Test and Estimates of Sums

上一节,有一些级数 可以通过一些简单的方法,求和 并且知道了,收敛的级数,是可以求和的 但是,对于具体的收敛或者发散的确认,具体求和还不太清楚 下面一起...

613
来自专栏小樱的经验随笔

利用向量积(叉积)计算三角形的面积和多边形的面积

利用向量积(叉积)计算三角形的面积和多边形的面积: 向量的数量积和向量积: (1)  向量的数量积 ? (1)  向量的向量积 两个向量a和b的叉积(向量积)可...

3009
来自专栏C语言及其他语言

【每日一题】蛇行矩阵

题号:1097 题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 输入 本题有多组数据,每组数据由一个正整数N组成。(N不大于100) 输出...

3258
来自专栏深度学习与计算机视觉

学习KNN(二)KNN算法手写数字识别的OpenCV实现

学习KNN(一) 图像分类与KNN原理 学习KNN(二)KNN算法手写数字识别的OpenCV实现 学习KNN(三)KNN+HOG实现手写数字识别 简介 在Ope...

3255
来自专栏图形学与OpenGL

附加实验1 Sierpinski三角形

    Sierpinski三角形是一种分形图形,它是递归地构造的。最常见的构造方法如下图所示:把一个三角形分成四等份,挖掉中间那一份,然后继续对另外三个三角形...

912
来自专栏Pulsar-V

OpenCV图像哈希计算及汉明距离的计算

OpenCV均值哈希与感知哈希计算,比对图像相似度,当计算出来的汉明距离越大,图像的相似度越小,汉明距离越小,图像的相似度越大,这种没有基于特征点的图像比对用在...

3084
来自专栏章鱼的慢慢技术路

解救小哈——DFS算法举例

1998

扫码关注云+社区