高效分布式局部敏感哈希方法技术

技术编号:16644706 阅读:44 留言:0更新日期:2017-11-26 17:08
一种分布式局部敏感哈希方法,包括:从分布式文件系统加载原始数据,读取原始数据向量集合,生成第一弹性分布式数据集;根据用户指定的哈希表数量L和哈希函数数量k,构造L个复合哈希函数;计算数据集中每项数据的L个哈希值,将每项数据分别映射到每个哈希表的各一个哈希桶中,将每项数据中的哈希表标识与复合哈希函数的值组成的键值对合并为字符串并映射为数字键值,数字键值与数据标识形成键值对,保存为第二弹性分布式数据集;根据第二数据集中每项数据的数字键值进行重分区,使得有具有相同数字键值的数据被保存在相同的分区中,完成哈希表的构建。该方法能减少构建哈希表过程产生的混洗量,提高构建索引效率,查询时能减少消息传递开销。

Efficient distributed local sensitive hashing method

Including a distributed local sensitive Hashi method: loading from the distributed file system data, read the original data vector set, generating a first elastic distributed data set; according to the number of K Hashi L and Hashi function table number specified by the user, a structure of L composite Hashi function; calculate each data value of a Hashi L and each data is mapped to a table in each bucket of Hashi Hashi, each in the data table and mark Hashi composite Hashi function values of the key value into string and mapped to digital keys, digital keys and data identification form pairs, save for the second flexible distributed data sets; according to the second data set for each digital key data re partition, which has the same number of key data is stored in the same partition, complete Kazakhstan Construction of a Greek table. This method can reduce the amount of shuffle generated in the process of constructing hash table, improve the efficiency of index construction, and reduce the overhead of message passing when querying.

【技术实现步骤摘要】
高效分布式局部敏感哈希方法
本专利技术属于互联网技术中的大数据数据挖掘领域,特别是涉及局部敏感哈希方法的分布式实现,加速海量高维数据的相似性搜索。
技术介绍
相似性搜索是多媒体信息检索领域中的一个重要问题,是指根据用户输入的查询对象,基于某种相似度(或距离)度量方式,在已有的数据集合中查找与之相似度最高(或距离最小)的对象。为了提升相似性搜索的效率,已有KD-tree、R-tree、SR-tree等索引方法被相继被提出,并在低维空间中有良好的效果。但随着数据维度的增加,这些方法的性能则呈现急剧下降的趋势,该问题被称之为“维度灾难”。为了克服“维度灾难”,许多近似搜索的方法被提出,其中最著名的方法之一就是局部敏感哈希(LocalitySensitiveHashing,LSH)。LSH方法通过使用一组具有局部敏感性质的哈希函数,会以很高的概率将原始数据空间中距离相近的对象散列到相同的哈希桶之中,查询时则只需计算查询对象所在哈希桶中的数据对象与查询对象之间的距离即可找出近似点。在搜索过程中,对于给定的一个特征,重要的是如何快速地从海量的特征中找到和这个特征相似的一些特征。局部敏感哈希就是:如果原来的数据相似,那么hash以后的数据也保持一定的相似性。数据的维数在某种程度上能反映其信息量,一般来说维数越多,其反映的信息量就越大。如果我们知道的信息越多,就能越准确地判定两个东西的相似性。但因为高维空间上计算复杂度太高,所以通常是通过哈希函数把高维数据映射到低维空间上,降维就在某种程度上造成的信息的丢失,在降维后的低维空间中就很难100%保持原始数据空间中的相似性,所以是说“保持一定的相似性”。局部敏感哈希的基本思想是,用hash的方法把数据从原空间哈希到一个新的空间中,使得在原始空间的相似的数据,在新的空间中也相似的概率很大,而在原始空间中不相似的数据,在新的空间中相似的概率很小。这种方法以牺牲一部分精度为代价,大大降低了计算的复杂度,提高了高维空间中相似性搜索的效率。尽管LSH已经成为近似相似性搜索领域中最重要的索引技术之一,但是该方法的常见形式都局限于单机计算环境,难以处理大规模数据,需要将该方法扩展到分布式环境下以处理海量数据。分布式环境下,一种直观的方法是基于一系列通用分布式计算框架实现局部敏感哈希方法。ApacheSpark是目前最常用的分布式计算框架之一,相比于Hadoop等框架有着明显的性能优势。Spark的核心是弹性分布式数据集(RDD),它是一种对分布式存储的数据的抽象,本质是一组数据分片(partition),每个分片包含一个或者多个数据项,不同分片上的数据项可被并行操作。在RDD之上,Spark提供了丰富的算子,如map,filter等,可以对RDD中的数据进行转换和抽取。Spark的采用的是一种类HadoopMapReduce的计算模式。在MapReduce模式中计算过程分为map和reduce两个阶段,map阶段将输入的元素列表中的每一个独立元素进行制定的操作,得到一组中间数据组成的列表;reduce阶段则是对中间数据列表中的元素进行适当的合并和计算。而map阶段与reduce阶段之间传递中间结果的过程称作混洗(shuffle)。混洗过程中map阶段的中间结果会先写入到本地磁盘,然后reduce阶段不同节点跨网络读取中间结果数据。因此混洗通常是MapReduce类任务中最耗时的过程。基于Spark实现分布式的LSH,基本思路如下:1)将数据对象加载进来用RDD进行分布式存储。2)构建索引,合并数据RDD不同分区中哈希值相同的数据对象,构成哈希表RDD;3)执行查询操作,首选计算查询点的一组哈希值,然后需要将这些哈希值广播到哈希表RDD中的每一个数据分片来进行检索,得到一组候选对象。4)计算候选对象与查询对象之间的相似度,根据结果进行排序或过滤,得到真正的相似对象。然而,这种简单实现方式存在一系列的问题:1)缺省情况下,数据的分布可能很不规则,构建索引数据RDD中的数据需要跨分区合并,导致产生大量的混洗开销,而大量的混洗会产生频繁的磁盘读写操作和网络传输,从而最终导致整体性能的下降。2)数据对象的存储位置对查询对象是不可知的,因此计算出查询对象的哈希值后会广播到数据对象所有可能的存储位置进行检索,消息传递开销大,查询效率低。
技术实现思路
本专利技术针对解决海量高维数据相似搜索问题,基于Spark平台实现了高效分布式局部敏感哈希方法。为了解决前面提到实现分布式局部敏感哈希方法面临的技术问题,本专利技术在简单实现的基础上设计并实现了一系列优化方案。本专利技术请求保护一种分布式局部敏感哈希方法,包含以下步骤:步骤1,从分布式文件系统加载原始数据,读取原始数据向量集合,为每条数据增加数据标识,生成第一弹性分布式数据集。其中第一弹性分布式数据集中每条数据记录的格式为由数据标识与数据向量组成的键值对。步骤2,根据用户指定的哈希表数量L和哈希函数数量k,构造L个复合哈希函数。步骤3,根据步骤2中生成的L个复合哈希函数gi,其中1≤i≤L,计算第一弹性分布式数据集中每项数据的L个哈希值,将每项数据分别映射到每个哈希表的各一个哈希桶中,所述哈希桶表示为<<i,gi(x)>,idx>,其中i为哈希表标识,表示该项数据的哈希桶所在的哈希表,每项数据会被映射到L个哈希桶当中;将每项数据中的哈希表标识与复合哈希函数的值组成的键值对<i,gi(x)>合并为字符串,根据字符哈希方法将所述字符串映射为数字键值key,所述数字键值与数据标识形成<keyx,idx>键值对,将映射后得到的全体数据的集合保存为第二弹性分布式数据集。步骤4,根据第二弹性分布式数据集中每项数据的数字键值key对第二弹性分布式数据集进行重分区,使得有具有相同数字键值key的数据被保存在相同的分区中,将同一分区中的数据进行合并,得到形式如<key,(id1,id2,…,idn)>的哈希桶,n则为具有相同key的数据的数目,将这些哈希桶数据保存在哈希表弹性分布式数据集中,完成哈希表的构建。进一步地,步骤2中复合哈希函数的构造方法为:设p-稳态局部敏感哈希函数族H,h∈H是该函数族中的一个局部敏感哈希函数,根据用户指定的哈希表个数L和哈希函数个数k,构造L个复合哈希函数g,对于某项维度为d的数据x,有gi(x)=(h1(x),h2(x),…,hk(x)),其中1≤i≤L,gi(x)为针对数据x构造的用于构建一个哈希表的第i个复合哈希函数,其中p-稳态局部敏感哈希函数族的定义为:其中,a是一个d维的向量,向量的每一维是一个从标准高斯分布中随机选取的浮点数;b是一个从[0,w]中均匀选取的浮点数,w表示哈希桶的桶宽。进一步地,步骤4中所述对第二弹性分布式数据集进行重分区的方法是,计算数字键值key的哈希码值,与分区个数进行非负取模计算,得到新的分区号,然后将数据根据新的分区号保存到相应的分区中。进一步地,所述方法包括在完成哈希表的构建后执行查询处理过程,所述查询处理过程包括:步骤(1),使用与构建哈希表过程相同的L个复合哈希函数gi,计算查询对象q的L个哈希值gi(q)1≤i≤L,并与哈希表号组成键值对本文档来自技高网
...
高效分布式局部敏感哈希方法

【技术保护点】
一种分布式局部敏感哈希方法,包含以下步骤:步骤1,从分布式文件系统加载原始数据,读取原始数据向量集合,为每条数据增加数据标识,生成第一弹性分布式数据集。其中第一弹性分布式数据集中每条数据记录的格式为由数据标识与数据向量组成的键值对;步骤2,根据用户指定的哈希表数量L和哈希函数数量k,构造L个复合哈希函数;步骤3,根据步骤2中生成的L个复合哈希函数gi,其中1≤i≤L,计算第一弹性分布式数据集中每项数据的L个哈希值,将每项数据分别映射到每个哈希表的各一个哈希桶中,所述哈希桶表示为<<i,gi(x)>,idx>,其中i为哈希表标识,表示该项数据的哈希桶所在的哈希表,每项数据会被映射到L个哈希桶当中。将每项数据中的哈希表标识与复合哈希函数的值组成的键值对<i,gi(x)>合并为字符串,根据字符哈希方法将所述字符串映射为数字键值key,所述数字键值与数据标识形成<keyx,idx>键值对,将映射后得到的全体数据的集合保存为第二弹性分布式数据集;步骤4,根据第二弹性分布式数据集中每项数据的数字键值key对第二弹性分布式数据集进行重分区,使得有具有相同数字键值key的数据被保存在相同的分区中,将同一分区中的数据进行合并,得到形式如<key,(id1,id2,…,idn)>的哈希桶,n则为具有相同key的数据的数目,将这些哈希桶数据保存在哈希表弹性分布式数据集中,完成哈希表的构建。...

【技术特征摘要】
1.一种分布式局部敏感哈希方法,包含以下步骤:步骤1,从分布式文件系统加载原始数据,读取原始数据向量集合,为每条数据增加数据标识,生成第一弹性分布式数据集。其中第一弹性分布式数据集中每条数据记录的格式为由数据标识与数据向量组成的键值对;步骤2,根据用户指定的哈希表数量L和哈希函数数量k,构造L个复合哈希函数;步骤3,根据步骤2中生成的L个复合哈希函数gi,其中1≤i≤L,计算第一弹性分布式数据集中每项数据的L个哈希值,将每项数据分别映射到每个哈希表的各一个哈希桶中,所述哈希桶表示为<<i,gi(x)>,idx>,其中i为哈希表标识,表示该项数据的哈希桶所在的哈希表,每项数据会被映射到L个哈希桶当中。将每项数据中的哈希表标识与复合哈希函数的值组成的键值对<i,gi(x)>合并为字符串,根据字符哈希方法将所述字符串映射为数字键值key,所述数字键值与数据标识形成<keyx,idx>键值对,将映射后得到的全体数据的集合保存为第二弹性分布式数据集;步骤4,根据第二弹性分布式数据集中每项数据的数字键值key对第二弹性分布式数据集进行重分区,使得有具有相同数字键值key的数据被保存在相同的分区中,将同一分区中的数据进行合并,得到形式如<key,(id1,id2,…,idn)>的哈希桶,n则为具有相同key的数据的数目,将这些哈希桶数据保存在哈希表弹性分布式数据集中,完成哈希表的构建。2.如权利要求1所述的方法,步骤2中复合哈希函数的构造方法为:设p-稳态局部敏感哈希函数族H,h∈H是该函数族中的一个局部敏感哈希函数,根据用户指定的哈希表个数L和哈希函数个数k,构造L个复合哈希函数g,对于某项维度为d的数据x,有gi(x)=(h1(x),h2(x),…,hk(x)),其中1≤i≤L,gi(x)为针对数据x构造的用于构建一个哈希表的第i个复合哈希函...

【专利技术属性】
技术研发人员:张万新李东升徐颖
申请(专利权)人:中国人民解放军国防科学技术大学
类型:发明
国别省市:湖南,43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1