本发明属于数据检索技术领域,尤其涉及一种基于几何空间划分的向量模糊搜索方法及系统。
背景技术:
目前基于视频、图片的智能分析及处理已经越来越广泛地应用于各个领域当中。在这些应用中,一个典型的问题是:如何在大规模的集当中,通过搜索的方法得到某个特定的对象是否在这个数据集中、及有多少符合条件的对象在这个数据集中。
在这类应用中,通常在搜索前已经对待检索的对象(如人脸图片)进行了一些预处理,把这个对象用一个数值向量(整形或浮点向量)来进行描述,这个数值向量通常称为这个原始对像的特征值,这个预处理的过程称之为结构化过程;这个过程中的得到的特征值通常都具备可比较性,即两个向量之间通过一个数值运算过程得到的结果,可以表征原始的两个对象的相似度。在搜索过程中,先按一定的方法构造对象的特征值搜索库,在具体的搜索过程中,通过不断的计算搜索对象的特征值与搜索库中特征值之间的相似度,在设定相似度门限情况,即可得到符合门限要求的对象的特征值的集合。
由上所述,视频搜索/图像搜索通过提取结构化特征值的过程转换为数值向量搜索问题,而数值向量搜索包含两个关键步骤:一个是数值向量库的创建,即以什么样的形式来存储海量数据规模的向量集合;二是如果执行搜索过程,即在向量集合的存储结构已经确定的情况下,以什么的流程/步骤/方法从向量集合中找到符合条件的目标向量。
在实际的应用中,现有的技术方案虽然从两个方向出发都做出了很多有益的优化,如在第一步中通过向量hash将特征值进行聚类后存储,降低第二步进行搜索时的进行向量相似度计算的规模,又如一些方案借用文本搜索中的倒排索引概念,将特征值匹配搜索运算转换为矩阵的分解等等。这些方法都存在以下一项或多项问题:
1.虽然对运算进行了转换,但数学含义不再等效,降低了搜索的精度。
2.虽然通过对索引结构的优化,降低了搜索过程中相似度匹配次数,但因为匹配需求并没有消失,所以还是存在计算量随规模的增长而增加的问题。
3.丢失了对模糊匹配的支持或模糊匹配的精度降低。
技术实现要素:
本发明的目的在于提供一种基于几何空间划分的向量模糊搜索方法及系统,旨在解决上述的技术问题。
本发明是这样实现的,一种基于几何空间划分的向量模糊搜索方法,包括向量的索引存储方法及向量的搜索匹配方法,所述索引存储方法包括以下步骤:
A、将数值特征向量之间相似度转换为几何空间两个向量之间的距离进行度量f(d(x,y));
B、选取一个模糊搜索的搜索精度,并将这个精度转换为对应的向量空间距离设置为Dm;
C、以Dm为单位长度,对整个向量进行空间划分并对得到所有的空间块进行编号得到编号集合ID(x);
D、对于一个待存储的向量a,通过ID映射关系得到这个向量(a)所属于存储块的编号设为ID(a);
E、以ID(x)为键值创建一个Hash Map,在存储时判断映射得到的ID(a)链表是否在Hash Map中有对应项;如果有,则直接将这个向量插入到对应的链表,如果没有,则创建这个Hash Map链表项,并将当前向量插入到这个链表中;
F、对上述步骤A-E进行循环完成所有向量的存储。
本发明的进一步技术方案是:所述搜索匹配方法包括以下步骤:
a、将带搜索的特征值向量x进行ID号映射并找到对应的空间块ID(x);
b、按照模糊度匹配的阈值(threshold)设定换算得到几何空间的距离;
c、根据几何空间的距离得到待搜索特征值向量的所在空间为中心的空间区域Space(ID(x),threshold);
d、取得Space(ID(x),threshold)内所有空间块的IDs(Space(ID, threshold))集合;
e、对IDs(Space(ID(x), threshold))进行遍历获取本次搜索结果。
本发明的进一步技术方案是:所述步骤C中空间块内的任意两个向量的距离小于区分粒度(Dm)。
本发明的进一步技术方案是:所述步骤D中的Hash Map里的元素为向量的链表。
本发明的进一步技术方案是:所述步骤e中还包括以下步骤:
e1、将每次从IDs ( Space( ID(x),threshold))得到的元素设为ID(iterator);
e2、判断ID(iterator)是否在HashMap中;如果是,则取出对应列表中的所有向量加入到结果集的ResultSet中,如果否,则跳过此元素进行下一个ID处理;
e3、循环e1-e2步骤将所有ID(iterator)处理完成输出ResultSet为本次搜索的结果。
本发明的另一目的在于提供一种基于几何空间划分的向量模糊搜索系统,包括向量的索引存储系统及向量的搜索匹配系统,所述索引存储系统包括:
度量模块,用于将数值特征向量之间相似度以几何空间两个向量之间的进行度量f(d(x,y));
区分粒度模块,用于选取一个模糊搜索的搜索精度,并将这个精度转换为对应的向量空间距离设置为Dm;
空间划分模块,用于以Dm为单位长度,对整个向量进行空间划分并对得到所有的空间块进行编号得到编号集合ID(x);
映射创建模块,用于对于一个待存储的向量a,通过ID映射关系得到这个向量(a)所属于存储块的编号设为ID(a);
链表判断模块,用于以ID(x)为键值创建一个Hash Map,在存储时判断映射得到的ID(a)链表是否在Hash Map中有对应项;如果有,则直接将这个向量插入到对应的链表,如果没有,则创建这个Hash Map链表项,并将当前向量插入到这个链表中;
循环模块,用于对上述度量模块、区分粒度模块、空间划分模块、映射创建模块、链表判断模块执行过程进行循环完成所有向量的存储。
本发明的进一步技术方案是:所述搜索匹配系统包括:
特征值向量映射模块,用于将带搜索的特征值向量x进行ID号映射并找到对应的空间块ID(x);
阈值设定换算模块,用于按照模糊度匹配的阈值(threshold)设定换算得到几何空间的距离;
空间区域模块,用于根据几何空间的距离得到待搜索特征值向量的所在空间为中心的空间区域Space(ID(x),threshold);
空间块集合模块,用于取得Space(ID(x),threshold)内所有空间块的IDs(Space(ID, threshold))集合;
遍历结果模块,用于对IDs(Space(ID(x), threshold))进行遍历获取本次搜索结果。
本发明的进一步技术方案是:所述空间划分模块中空间块内的任意两个向量的距离小于区分粒度(Dm)。
本发明的进一步技术方案是:所述映射创建模块中的Hash Map里的元素为向量的链表。
本发明的进一步技术方案是:所述遍历结果模块中还包括:
元素设置单元,用于将每次从IDs ( Space( ID(x),threshold))得到的元素设为ID(iterator);
判断单元,用于判断ID(iterator)是否在HashMap中;如果是,则取出对应列表中的所有向量加入到结果集的ResultSet中,如果否,则跳过此元素进行下一个ID处理;
循环输出单元,用于循环元素设置单元、判断单元中执行过程将所有ID(iterator)处理完成输出ResultSet为本次搜索的结果。
本发明的有益效果是:本申请的计算量极小,算法复杂度为O(1),理论上支持向量规模的无限增长;在搜索匹配的过程中完全消除了进行向量两两计算相似度的操作;数学概念清晰,支持模糊搜索;算法即可单机实现,也完全在分布式系统实现,支持大规模的存储并发及计算并发;拥有良好的系统扩展性。
附图说明
图1是本发明实施例提供的索引存储方法的流程图。
图2是本发明实施例提供的搜索匹配方法的流程图。
图3是本发明实施例提供的索引存储系统的结构框图。
图4是本发明实施例提供的搜索匹配系统的结构框图。
图5是本发明实施例提供的向量几何空间划分示意图。
图6是本发明实施例提供的特征向量映射到空间块ID示意图。
图7是本发明实施例提供的特征向量的HashMap+List存储结构示意图。
图8是本发明实施例提供的通过索引的直接存取获取搜索的结果方法示意图。
具体实施方式
图1-8示出了本发明提供的基于几何空间划分的向量模糊搜索方法,其详述如下:该方法包含两个关键组成部分:一个组成部分是向量的索引存储方法,另一个组成部分是向量的搜索匹配方法。
其索引存储方法包括以下步骤:
步骤S1,将数值特征向量之间相似度转换为几何空间两个向量之间的距离进行度量f(d(x,y));在对图像、视频等可视化内容进行索引存储中,将其上的数值特征向量之间的相似度以几何空间中的两个向量之间的距离f(d(x,y))进行度量;对几何空间中的任意两个向量之间的相似度均做距离度量f(d(x,y))。
步骤S2,选取一个模糊搜索的搜索精度,并将这个精度转换为对应的向量空间距离设置为Dm;在几何空间中任意选取一个模糊的搜索区分粒度,将其对应的向量空间的距离设置为Dm;选择一个合适的模糊搜索区分粒度,其对应的向量空间的距离设为Dm。
步骤S3,以Dm为单位长度,对整个向量进行空间划分并对得到所有的空间块进行编号得到编号集合ID(x);按模糊度的区分粒度(Dm)对整个向量空间进行划分,得到一系列的向量空间块,显而易见,空间块内的任意两个向量距离(或其变换)小于Dm, 且对此划分过程中,任意得到的一个空间的可以得到唯一的一个ID编号ID(x)。
步骤S4,对于一个待存储的向量a,通过ID映射关系得到这个向量(a)所属于存储块的编号设为ID(a);在一个向量(a)的存储过程中,先通过ID映射关系得到ID号,设为ID(a);实际存储时,先创建一个以ID为键值的Hash Map,其中Hash Map的里的元素为向量的链表。
步骤S5,以ID(x)为键值创建一个Hash Map,在存储时判断映射得到的ID(a)链表是否在Hash Map中有对应项;如果有,则直接将这个向量插入到对应的链表,如果没有,则创建这个Hash Map链表项,并将当前向量插入到这个链表中;存储时,映射得到的ID链表如果在Hash Map中没有对应项,则创建这个Hash Map链表项,并将当前向量插入到这个链表中,如果Hash Map中有对应的链表,则直接将这个向量插入到对应的链表。
步骤S6,对上述步骤S1-E5过程进行循环完成所有向量的存储;不断进行上述过程直到完成所有向量的存储。
其所述搜索匹配方法包括以下步骤:
步骤S21,将带搜索的特征值向量x进行ID号映射并找到对应的空间块ID(x);先将待搜索的特征值向量x进行ID号映射,找到对应的空间块ID(x)。
步骤S22,按照模糊度匹配的阈值(threshold)计算得到目标空间半径D(threshold)。按照模糊度匹配的阈值(threshold)及搜索精度要求,对[%0,100%]这个百分比区间进行划分,解方程F(D(threshold)) = (100%-%threshold)即可得到与阈值匹配的搜索结果的所在的空间半径:D(threshhold)。
步骤S23,根据几何空间的距离得到待搜索特征值向量的所在空间为中心的空间区域Space(ID(x),threshold)。以待搜索特征值所在的空间块的为中心,空间半径为D(threshold)的一个向量空间区域Space(ID(x),threshold)。
步骤S24,取得Space(ID(x),threshold)内所有空间块的IDs(Space(ID, threshold))集合;用步骤S2得的单位距离Dm对S23得到的空间区域Space(ID(x),threshold)进行空间的等分,这将得到一个空间块的集合,用S3步骤所所描述的编号方法,对这个空间块集合进行编号,即得到Space(ID(x), threshold)内所有空间块的编号的集合IDs(Space(ID, threshold))。
步骤S25,对IDs(Space(ID(x), threshold))进行遍历获取本次搜索结果;依次操行如下操作,设每一次从IDs ( Space( ID(x),threshold))得到的元素为ID(iterator):
1)如果ID(iterator)在HashMap中,则取出对应的列表中的所有向量,加入到结果集中ResultSet中。
2)如果不在HashMap,则跳过此元素,进行下一个ID处理。
3)所有ID(iterator)处理完后,输出ResultSet为此次搜索的结果。
本申请的计算量极小,算法复杂度为O(1),理论上支持向量规模的无限增长;在搜索匹配的过程中完全消除了进行向量两两计算相似度的操作;数学概念清晰,支持模糊搜索;算法即可单机实现,也完全在分布式系统实现,支持大规模的存储并发及计算并发;拥有良好的系统扩展性。
图3、4示出本发明的另一目的在于提供一种基于几何空间划分的向量模糊搜索系统,包括向量的索引存储系统及向量的搜索匹配系统,所述索引存储系统包括:
度量模块,用于将数值特征向量之间相似度转换为几何空间两个向量之间的距离进行度量f(d(x,y));
区分粒度模块,用于选取一个模糊搜索的搜索精度,并将这个精度转换为对应的向量空间距离设置为Dm;
空间划分模块,用于以Dm为单位长度,对整个向量进行空间划分并对得到所有的空间块进行编号得到编号集合ID(x);
映射创建模块,用于对于一个待存储的向量a,通过ID映射关系得到这个向量(a)所属于存储块的编号设为ID(a);
链表判断模块,用于以ID(x)为键值创建一个Hash Map,在存储时判断映射得到的ID(a)链表是否在Hash Map中有对应项;如果有,则直接将这个向量插入到对应的链表,如果没有,则创建这个Hash Map链表项,并将当前向量插入到这个链表中;
循环模块,用于对上述度量模块、区分粒度模块、空间划分模块、映射创建模块、链表判断模块执行过程进行循环完成所有向量的存储。
所述搜索匹配系统包括:
特征值向量映射模块,用于将带搜索的特征值向量x进行ID号映射并找到对应的空间块ID(x);
阈值设定换算模块,用于按照模糊度匹配的阈值(threshold)设定换算得到几何空间的距离;
空间区域模块,用于根据几何空间的距离得到待搜索特征值向量的所在空间为中心的空间区域Space(ID(x),threshold);
空间块集合模块,用于取得Space(ID(x),threshold)内所有空间块的IDs(Space(ID, threshold))集合;
遍历结果模块,用于对IDs(Space(ID(x), threshold))进行遍历获取本次搜索结果。
所述空间划分模块中空间块内的任意两个向量的距离小于区分粒度(Dm)。
所述映射创建模块中的Hash Map里的元素为向量的链表。
所述遍历结果模块中还包括:
元素设置单元,用于将每次从IDs ( Space( ID(x),threshold))得到的元素设为ID(iterator);
判断单元,用于判断ID(iterator)是否在HashMap中;如果是,则取出对应列表中的所有向量加入到结果集的ResultSet中,如果否,则跳过此元素进行下一个ID处理;
循环输出单元,用于循环元素设置单元、判断单元中执行过程将所有ID(iterator)处理完成输出ResultSet为本次搜索的结果。
本申请的计算量极小,算法复杂度为O(1),理论上支持向量规模的无限增长;在搜索匹配的过程中完全消除了进行向量两两计算相似度的操作;数学概念清晰,支持模糊搜索;算法即可单机实现,也完全在分布式系统实现,支持大规模的存储并发及计算并发;拥有良好的系统扩展性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。