局部敏感哈希(Locality Sensitive Hashing)

linbojue
• 阅读 0

局部敏感哈希索引(Locality-Sensitive Hashing,LSH)是一种用于高维数据检索的技术,特别适用于近似最近邻搜索(Approximate Nearest Neighbor Search)的问题。在高维空间中,传统的线性搜索方法可能非常耗时,LSH 通过将相似的数据点映射到相同的哈希桶(或者相邻的桶)中,从而提供了一种更高效的数据检索方法。

下面简单了解下算法的过程,使得了解该算法的基本思路。假设,我们有 7 个数据点,如下图:

我们再准备两个哈希函数,这个哈希函数满足以下条件,即:

假设,原来 a、b 两个数据点相似,则哈希函数能够有很高的概率(p1)将其映射到同一个桶中; 假设,原来 a、b 两个数据点不相似,则哈希函数能够有较低的概率(p2)将其映射到同一个桶中。 普通哈希函数和局部敏感哈希函数的区别如下图所示:

左图:普通哈希 右图:局部敏感哈希 我们可以看到,A 和 B 是相似的,C 和 D 是不相似的。普通哈希函数只负责进行映射,而局部敏感性哈希则将相似的两个数据点映射到相同的桶内,或者临近的桶内。而不相似的数据点则映射到不同的桶内。

LSH 允许在高维数据空间中找到相似的数据项,即使它们在数据空间中的位置相对较远,这就是所谓的 “局部敏感性”。这意味着 LSH 适用于那些需要找到相似项而不是精确匹配的应用场景。

注意:局部敏感哈希基于概率的,并不能完全保证上述的条件。

当我们使用不同的相似度度量方式,其对应的满足上面两个条件的哈希函数也是不同的。我们继续上面的例子,假设目前我们拿到两个满足上面条件的哈希函数,并且桶的数量设置为 3,则:

7个数据点经过 hash-1 、hash-2 函数之后分桶的结果如上图所示。当输入查询数据点,查询数据点通过两个哈希函数找到其映射的桶,我们从该桶或者临近桶中可以进行最近邻搜索,如下图:

得到候选的数据点之后,再进行相似度比较,获得近似的数据点,如下图所示:

从这个过程,我们可以看到通过当进行搜索时,由于 LSH 可以将相似的数据项映射到相同的桶中,因此在查询时,可以仅搜索与查询项相同桶中的数据点,从而大大减少了搜索的空间和计算时间。

另外,使用的每个局部敏感的哈希函数可以理解为对一个包含了信息的向量不同角度的观察,更多的哈希函数意味着更多角度的观察,可以提高搜索的精度,但可能会增加计算成本。 以下例子: https://infogram.com/untitled-1h0r6rzwyo93w4e https://infogram.com/untitled-1h9j6q759ol1v4g https://infogram.com/untitled-1h0r6rzwyo7ew4e https://infogram.com/microsoft-office-word-2007-docx-1h7v4pd0lv1r84k https://infogram.com/untitled-1hxj48mqg09zq2v https://infogram.com/untitled-1h9j6q759on3v4g https://infogram.com/untitled-1h984wv15wyqz2p https://infogram.com/untitled-1h0r6rzwyo1vw4e https://infogram.com/untitled-1h0n25opq079z4p https://infogram.com/untitled-1h7v4pd0lvg084k

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
12个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
AIGC的隐私安全问题及隐私保护技术
微软成为ChatGPT母公司OpenAI的合作伙伴,并确认投资百亿美元。同时,微软正计划将OpenAI的技术整合到其产品中,包括Bing搜索引擎和其他软件,以增强它们的能力。然而,据Insider报道,微软却警告其员工不要与人工智能(AI)聊天机器人(ChatGPT)共享敏感数据:“请不要将敏感数据发送到OpenAI端点,因为他们可能会用它来训练未来的模型”。
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
4年前
KNN算法详解
  简单的说,K近邻算法是采用不同特征值之间的距离方法进行分类。  该方法优点:精确值高、对异常值不敏感、无数据输入假定  缺点:计算复杂度高、空间复杂度高  适用范围:数据型和标称型  现在我们来讲KNN算法的工作原理:存在一个样本数据集,也称作训练样本集,并且样本中每条数据都存在标签。将新输入的没有标签的数据与训练样本数据集中
Stella981 Stella981
4年前
Python使用Faiss库实现向量近邻搜索
本文是Python应用于推荐系统领域的技术文章。Embedding的近邻搜索是当前图推荐系统非常重要的一种召回方式,通过item2vec、矩阵分解、双塔DNN等方式都能够产出训练好的userembedding、itemembedding,对于embedding的使用非常的灵活:输入userembedding,近邻搜索it
Wesley13 Wesley13
4年前
Java编程安全漏洞之:数据或系统信息安全
Cleartext\_Submission\_of\_Sensitive\_Information明文提交敏感数据,使用明文通信方式传输、提交敏感数据修复建议加密后再提交或使用加密的通信方式传输、提交敏感数据。Use\_of\_Insufficiently\_Random\_Values使用了不够随机的随机值
Stella981 Stella981
4年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
Wesley13 Wesley13
4年前
MySQL索引初探
一、什么是索引?帮助数据库系统实现高效获取数据的数据结构索引可以帮助我们快速地定位到数据而不需要每次搜索的时候都遍历数据库中的每一行。二、常见实现方式有哪些?常见索引模型有三种:哈希表、有序数组、搜索树1.哈希表(1)使用哈希表实现的索引称为哈希索引。!(https://os
V-275670029 V-275670029
3年前
哈希竞猜游戏是什么
区块链中的哈希到底是什么?  什么是哈希?  哈希是将任意长的输入编程加密的固定长度输出的过程。哈希并不等同于加密方法,因为无法解密哈希值来获取原始数据。事实上哈希是一种单向加密函数。  Withthehashfunction,thedataontheInternetcanbesavedintheformofafixedle
贾蔷 贾蔷
6个月前
手把手教你实现哈希表:从代码到原理的新手友好指南
一、简介和应用哈希表(HashTable)是一种高效的数据结构,通过哈希函数将键(Key)映射到存储位置,实现O(1)时间复杂度的查找、插入和删除操作。它广泛应用于缓存系统、数据库索引、字典查询等场景。例如,在编程中需要快速根据用户ID查找信息时,哈希表能