一种新的基于相似度过滤的大数据保序匹配与检索算法的制作方法

文档序号:14451686阅读:333来源:国知局

本发明涉及一种新的基于相似度过滤的大数据保序匹配与检索算法。



背景技术:

大数据快速匹配与检索成为众多大数据应用急需解决的关键问题!比如视频检索与分析、股票分析与预测、气候分析与预测等。尽管通过云计算、超级计算等先进基础设施和并行分布式处理手段可以有效提高大数据处理的速度。但寻求一种精确、快速的匹配与检索算法对于提高大数据应用数据匹配和检索精确度异常重要。通过抽象与归约等措施。大数据应用中的数据对象可抽象为具有若干属性的点集或序列,进而将大数据匹配与检索问题转化为点集或序列的匹配与检索。更进一步将点集抽象为一组字符或数字,问题的本质就成为字符或数字序列的保序匹配与检索,字符或数字序列的保序匹配是一类重要的模式匹配问题。

问题描述如下:假设给定长度为n的字符串t和长度为m的模式p,字符串保序匹配的任务是在t中找出所有与p变化趋势一致且长度相等的子字符串u。如图1所示,假设p=(10,22,15,30,20,18,27),t=(22,85,79,24,42,27,62,40,32,47,69,55,25),那么t中与p相一致的子字符串u=(24,42,27,62,40,32,47)。针对该问题已经有若干相关研究,kim等人利用kmp(knuth-morris-patt)算法来解决该问题,但其方法时间复杂度较高。之后cho等人基于boyer-moore算法给出了该问题的亚线性解决方案。几乎同一时期,belazzougui等人给出了另外一种优化的亚线性解决方法。到目前为止,该问题的最新研究是chhabra等人给出的基于筛选的匹配算法,该算法根据公式(1)将原字符序列t=(t1,t2,…,ti-1,ti,ti+1,…,tn)与模式p=(p1,p2,…,pi-1,pi,pi+1,…,pn)根据前后两个字符的大小关系转化为相应的二进制序列t′=100101001100与p′=101001。

如果后一个字符比前一个字符大,即:两个字符之间是升序关系,则定义为1,否则为0。因此,匹配t中与p趋势一致的子序列问题即可转化为在t′中匹配与p′一致的子序列问题。chhabra等人首先对p中各字符进行排序,之后按从小到大的顺序核对t中对应各字符的大小关系,任何一个数据大小顺序不一致即被排除。

chhabra等人通过理论分析与实验证明了其匹配算法时间复杂度为亚线性o(nlogn),且证明通过二进制转换后的序列保序匹配,对计算速度有明显提升。但是,其算法仍存在如下缺点:(1)无法区别前后两个字符的增长或减小趋势的幅度。如图2a所示,该算法认为(1)、(2)两种变化趋势无区别,同理,(3)、(4)也无区别。(2)对字符序列t和模式p中的最小值与最大值震荡失控。如图2b所示,无论在t还是p中,当其最大值无限增大或最小值无限减小时,该算法无法识别其中的差异。(3)当模式p中分段一致,而分段之间振幅差异整体较大时,该算法也无法识别其中的差异。如图2c所示,两字符串前半段几乎相同,而后半段整体差异较大时,该算法同样无法识别其中的差异;(4)由于在候选序列筛选过程中,对p中各数据进行了排序,并要求子序列内数据的大小关系严格按照p中数据的大小顺序,严重限制了数据的震荡范围,导致结果丢失部分符合要求的子序列。如图2d所示,按照chhabra等人的算法,t中灰色点只能在a、b两条虚线内部震荡,一旦灰色点震荡到a、b两条虚线外部,则即被排除。但实际上,如果灰色点位于a、b两条虚线之外的适当范围内,该序列仍然满足与模式的保序匹配要求。



技术实现要素:

基于上述问题,本发明提出一种新的基于相似度过滤的大数据保序匹配与检索算法,其是在新的二进制数据转换方法的基础上,提出基于数据归约、相似度计算和过滤的字符保序匹配与检索算法。

为解决上述技术问题,本发明采用以下技术方案予以实现:

本发明的一种新的基于相似度过滤的大数据保序匹配与检索算法,包括如下步骤:

(1)数据转换,基于变化幅度趋势的字符序列二进制转换方法,该方法通过相邻三个点之间的关系定义二进制序列,从而准确反映三点之间是凸增长(降低)或凹增长(降低)关系;

(2)数据归约,为方便候选序列与模式之间的相似度计算,提出基于趋势比例的数据归约方法,将候选序列与模式均归约到区间[0,1],归约后候选序列与模式的最小值均为0,最大值均为1;

(3)相似度计算与过滤;为区分不同变化幅度的凸增长(降低)或凹增长(降低)之间的震荡幅度,对归约后的序列计算相似度并进行过滤,最终按相似度大小给出与模式匹配的各子序列集合。

与现有技术相比,本发明具有的有益效果为:

(1)该算法性能对比chhabra算法并没有太大的降低;

(2)该算法能有效解决chhabra等人算法对数据震荡幅度失控的问题,同时解决数据序列与模式序列分段规律但整体不相似的问题;

(3)该方法不仅能更准确、更多地匹配出变化趋势一致的子字符串,同时将多个候选子串根据与模式之间的相似度进行排序,为进一步的数据精确检索提供判断依据。

附图说明

图1为数据保序匹配举例;

图2为问题描述;

图3为数据转换实例;

图4为数据归约实例;

图5为初始数据图;

图6为数据1示意图;

图7为数据2示意图;

图8为相似度拐点收敛示意图;

图9为前10个匹配结果序列示意图;

图10为后10个匹配结果序列示意图;

图11为大规模随机数据实验(匹配时间vs.模式长度)。

具体实施方式

为让本领域的技术人员更加清晰直观的了解本发明,下面将结合附图,对本发明作进一步的说明。

本发明的一种新的基于相似度过滤的大数据保序匹配与检索算法,包括如下步骤:

(1)数据转换,基于变化幅度趋势的字符序列二进制转换方法,该方法通过相邻三个点之间的关系定义二进制序列,从而准确反映三点之间是凸增长(降低)或凹增长(降低)关系;(2)数据归约,为方便候选序列与模式之间的相似度计算,提出基于趋势比例的数据归约方法,将候选序列与模式均归约到区间[0,1],归约后候选序列与模式的最小值均为0,最大值均为1;(3)相似度计算与过滤。为区分不同变化幅度的凸增长(降低)或凹增长(降低)之间的震荡幅度,对归约后的序列计算相似度并进行过滤,最终按相似度大小给出与模式匹配的各子序列集合。

算法原理

算法原理包括三步:数据转换、数据归约、相似度计算与排序过滤。最终得到相似度从高到低的与模式匹配的子序列集合。

2.1数据转换

为了准确反映数据节点之间的凸增长(降低)或凹增长(降低)之间的关系,如图2a所示,对数据t和模式p中任意的数据ti和pi,这里以ti为例,如果ti位于ti-1与ti+1连线的上方,则ti转换后的数据ti′=1,否则ti′=0。二进制匹配完成后,通过匹配p′与t′,得到候选序列的临时结果集合定义为u,用于后续的归约与相似度计算。

数据转换通过函数anticipationbinarygreater实现,首先申请长度为数据长度减2的二进制类型数组,初值均设为0,遍历输入数据t和p并执行anticipationbinarygreater函数,得到t′和p′,算法描述如算法1和算法2所示。

算法1将模式和数据转换为二进制数组:

1.输入t和p;

2.t'=anticipationbinarygreater(t);

3.p'=anticipationbinarygreater(t);

算法2anticipationbinarygreater

/*anticipationbinarygreater该函数将输入数组转换为二进制组*/

1.inputa;//输入数组a

2.fori=1tolength-1;//i从1到a数组长度减1

3.line=twopointline(a[i-1],a[i+1])

/*使用函数twopointline输入相邻两个点得到线*/

4.b[i]=arepointtopline(line,a[i]);

/*判定a[i]在直线上方,如果在上方为1*/

5.returnb。

如图3所示,假设g为该文数据转换方法,f为chhabra等人的数据转换方法,可见该方法保证每个二进制数据对应原数据序列或模式中的数据点,而非两个数据之间的连线,不仅反映出数据之间的大小关系,同时可更准确反映相邻数据点之间的变化幅度。

2.2数据归约

如图4a所示,实线是数据t,虚线是模式p,数据t与模式p之间的数据值大小差异较大,但对应点之间的比例却是一致的,即彼此之间趋势相似,这种整体差异较大的趋势相似性序列的实际意义并不大。另外,直接比较它们之间的相似性不够直观。为此,通过数据归约将其按比例压缩到同一个区间。如图4b所示,为了对比t或p中每个相邻点之间变化趋势的幅度比例,假设图4b中各点之间的变化幅度分别为a、b、c那么变化幅度比例为a:b:c,如果t存在子序列与p中各点的变化幅度比例相同,那么视为相似。两个不同序列的最大值归约到1,最小值归约到0,由此可以在区间[0,1]画出两个数据序列,虚线部分表示模式,实线是二进制快速匹配得到的候选序列,首先计算出数据中的最大值和最小值,然后将每个点的权值减去最小值再除以最大值和最小值之差。从而可以通过归约后对应点之间的差值绝对值来表示两段序列对应点之间的相似性差异,如图4c所示。

数据归约后,候选序列u与模式p中最大值均为1,最小值均为0,其他各数据被压缩到区间[0,1]。具体实现如算法3所示,其中,anticipationbinary函数把一个输入数组每个元素压缩到[0,1],先获取数组中的最大元素和最小元素,对数据每个元素a[i]做如下处理(a[i]-min)/(maxmin),得到新的数组。此处规定:如果最大值等于最小值的数组,归约后所有值都为0。

算法3anticipationbinary归约函数

2.3相似度计算

候选序列与模式经过归约处理后,被压缩到相同的[0,1]区间,如图4c所示,如果两段序列对应各点之间高度差都为0,那么这两个序列就是趋势完全相同,如果高度差不为0,那么这两个序列就是趋势相似。对变化幅度比例不相同的各对应点,计算其差值并求其绝对值之和,如公式(2)所示,定义该差值的绝对值和为序列之间的相似度。

f(u)=∑|g(ui)-g(pi)|(2)

其中,ui表示二进制转换后快速匹配得到的候选序列u中的各元素,pi表示模式p中的对应元素,f计算某个候选序列与模式之间的相似度。g计算某个元素归约到[0,1]的值。

根据相似度定义可知,相似度值越高,两段序列实际越不相似;反之,相似度越低,两段序列越相似。实际实现过程中,为跟相似性的实际意义一致,也可以定义对应各点差值绝对值之和的倒数为相似度。算法描述如算法4所示。

算法4计算中间结果和模式的相似度

3实验与分析

本节通过理论分析和实验测试论证算法的优势。其中,实验测试在天河二号超级计算机上进行,采用单结点,双cpu,24个计算核心,内存为64gb,即:cpue5-2692v224*2.20ghz。为证明本文算法对chhabra等人算法的优势,实验首先通过两组实例数据进行测试,测试结果充分证明本文算法在匹配准确性和匹配结果数量的优势。此外,通过大规模随机数序列测试,证明本文算法存在归约、相似度计算和排序三个chhabra算法不具有的过程,但性能没有明显下降。同时,由于本文算法在同等条件下,可以匹配出比chhabra算法更多、更准确的结果序列,算法执行中某些操作细节会增加一定计算量,因此同等条件下,本文算法整体计算时间比chhabra等人的算法略有增加,但总体而言,计算时间增加非常微小,且随着模式p长度的增大,其差异逐渐趋近于零。

3.1时间复杂度分析

假设有模式p、数据t,那么转换为二进制之后为p′和t′,转换为二进制需要的时间复杂度是o(n),而二进制快速匹配为线性速度。假如t和p是无关系的离散随机点,那么求随机的一段长度为m的模式p和一段长度同样为m的t,刚好t′等于p′概率是1/2,随着m增大,1/2趋向于0。那么,在t的长度为n时,可得到二进制匹配次数为n/(2m)。所以算法时间复杂度是o(n)。

最坏情况,假设t′全部和p′相同,假如都为1,那么需要使用文献[1]筛选的数据为n*m,而候选计算需要用到排序,可以认为最快的排序为o(mlogm)需要做n次,相似度计算数据为n*m,因为相似度计算需要遍历一次数据得到最大值和最小值,然后遍历一次计算归约、求和,需要时间为o(2nm)。所以最差时间为o(nm)。

3.2实例测试

实例1第一个实例数据的初始数据如图5所示。实线部分表示数据序列t,t分为前半段和后半段,前半段有5个点,后半段有6个点。虚线部分表示模式p,p的前半段与t几乎重合,后半段有6个点,但其数值整体上明显比t中对应数据小很多。

即根据图2c中描述的问题构造初始数据,如果图5数据的后半段各数据均乘以n(1<n<100),可以得到如图6所示实例数据集。

如果仅对图5所示初始数据后半段第5个数据乘以n(1<n<100),可以得到如图7所示数据集。

实验测试表明图6中的所有数据序列在经过chhabra等人的算法处理后,均认为彼此相同,没有任何区别。但是,使用本文算法处理后,可得到不同的相似度,其相似度随n的增长而增大,根据我们对相似度的定义,如公式(2)所示,n越大,数据序列之间的偏离越大,越不相似。图6与图7中数据序列与模式p之间的相似度随数据偏差的增大(即随乘数n的增大)而变化的关系分别如图8中实线和虚线所示。因为相似度是经过归约之后计算得到,归约后序列中所有数据均在[0,1],因此,对应相减后取绝对值之和相加而得到的相似度会逐渐收敛,而收敛的拐点恰好说明后面的数据序列已经跟模式数据不相似,而拐点出现之前的数据是可以接受的相似序列。另外,实验表明不同的数据序列,得到的相似度拐点是不同的,正如图6与图7所示的数据序列在图8中所示的拐点不同,不同数据系列之间的差异会导致相似度收敛拐点的不同。

实例2仿照文献[1]中的随机数序列构造方法,序列长度取为100000000,模式长度为10,数值区间均为[0,100],实验结果数据均采用随机计算100次后取平均值。如图2d所述,由于chhabra等人的算法对模式中每个点进行了从小到大排序,并按此顺序去匹配候选序列中的对应点,要求候选序列中的点的大小关系也符合模式中各点的大小顺序,因此,限定了候选序列中点的震荡范围,因此导致一些总体符合要求的子序列被恶意排除。在此随机数实验中,chhabra等人提出的算法只能匹配到15个结果,而本文算法可以匹配到115500个结果,之后对这115500个结果进行相似度排序,供用户选择可接受范围内的相似序列。

图9给出排序后前10个相似结果序列,其中,实线表示模式p,虚线为最相似结果序列,其它为排序在2~10的结果序列。图10给出排序后10个结果序列,实线表示模式p,可见其相似性明显降低。由图9和图10可知,本文算法能匹配到更多、更准确的结果子序列,克服了chhabra等人算法对序列中各点震荡范围的过度苛刻的限制。

3.3大规模随机实验测试

理论分析和3.2节实例测试均显示了本文算法在同等条件下相对chhabra等人算法的优势,可以匹配到更多、更准确的结果。但是,由于本文算法不但匹配出更多、更准确的相似结果子序列,还对各子序列进行了相似度计算和排序。因此,算法执行过程中具体操作的计算量要比chhabra等人算法略高,导致在同等条件下,本文算法总体计算量与chhabra等人的算法相比稍有增加。但是,由于算法复杂度为线性复杂度,仅仅是算法内部增加了判断和计算操作,因此总体影响不大,完全在可接受范围内。实验结果如图11所示。

实验采用的随机数据长度从10000000逐渐增加到49000000,每次增加1000000个随机数据。模式长度为5、8、10、15、20、30、50的随机数据。显然,对于相同的随机数据序列,随着模式长度的增加,匹配得到的结果数量会逐渐减少,相似度计算时间占算法整体时间比例逐渐减小。更进一步,在模式长度较小,从而可以匹配到更多结果的同时,其计算量也相应增加。随着模式长度的增大,匹配到的结果序列会越来越少,其计算时间也会相应减少。比如:在匹配长度为8的时候,平均匹配结果序列数为模式长度为5时的匹配结果数的0.3%,其相似度计算时间总体平均占用比例为0.065411468,因此,虽然计算量有所增加,但仍然在可接受范围内,总体不会影响整体性能。实验结果表明,同等条件下,虽然本文算法比chhabra等人算法需要略多的时间,但是,计算增量所耗费的时间随t与p的增大都有减小的趋势,尤其是随模式p长度的增大,计算增量迅速减小,最后甚至可以忽略不计。另外,随着云计算、超级计算等先进计算基础设施和并行分布式计算技术的提高,在可以匹配出更多、更高质量结果的前提下,算法整体时间复杂度是线性前提下,即便具体处理过程中计算量有少许增加,也在可接受范围内。

表1给出了在不同模式长度和不同数据长度下,相似度计算占总体计算时间比例的数据,通过表1可以看到相似度计算时间在总体匹配时间中所占比例并不高,在模式p较短时,计算增量消耗主要是因为匹配出更多的结果。例如,在虚线标出的数据系列中,匹配数为8比匹配数为5需要的计算时间比例少很多。在匹配长度为8时,平均匹配结果序列数为模式长度为5时的匹配结果数的0.3%,其相似度计算时间总体平均占用比例为0.065411468。进一步表明虽然算法具体处理过程中计算量有所增加,但仍然在可接受范围内,不会影响整体性能。

表1在不同模式长度和不同数据长度下,相似度计算占总体计算时间比例:

4结束语

数据快速匹配与检索是大数据应用中的关键问题,通过抽象与归约等措施,最终可将数据匹配问题转化为字符或数字序列的匹配问题。本文提出一种基于相似度过滤的数据保序匹配与检索算法,算法分三步:(1)数据转换,基于幅值变化趋势将原始序列转换为二进制,准确反映相邻三点之间的凸增长(降低)或凹增长(降低)关系;(2)数据归约,运用基于幅度变化比例的数据归约方法,将候选序列与模式序列均归约到固定区间;(3)相似度计算,通过计算候选序列与模式序列对应点之间的差值绝对值之和作为相似度判断依据,并按照相似度大小排序。理论分析与实验结果表明:(1)该算法虽然在chhabra等人的算法基础上添加相似度计算,但算法时间复杂度为亚线性;(2)该算法能有效解决chhabra等人的算法对数据震荡幅度失控的问题;(3)同时解决chhabra等人的算法对数据序列与模式序列分段规律但整体不相似的失控问题;(4)解决了chhabra等人算法中对匹配序列排序造成的结果疏漏问题;(5)该方法不仅能更准确、更多地匹配出变化趋势一致的子字符串,同时将多个候选子串根据与模式之间的相似度进行排序,为进一步的数据精确检索提供判断依据。该方法对当今大数据背景下的数据匹配与检索具有重要的理论和实用价值。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1