计算数据相似性的方法和装置与流程

文档序号:22387458发布日期:2020-09-29 17:50阅读:183来源:国知局
计算数据相似性的方法和装置与流程

本申请涉及计算机应用技术领域,具体而言,本申请涉及一种计算数据相似性的方法和装置。



背景技术:

随着现代计算机和机器学习技术的进步,在安全、医学、教育和在线信息服务等不同的应用领域中产生了大量的多媒体数据。因为多媒体对象具有多个属性维度,因此对多媒体对象的描述就不能是简单地用字母或数字。例如,不能单纯使用几个数字参数或文本字符串来描述人脸图像等。因为,这些信息更适合使用一种多维的、易于分析的方式——特征向量来描述,由此对象信息的匹配,相似度计算也孕育而生。相似度计算就是比较两个事物的相似性。一般通过计算事物的特征之间的距离,如果距离小,那么相似度大;如果距离大,那么相似度小。

随着信息的不断膨胀,信息间的相似度计算也变得愈加艰难,平方的时间复杂度使得该问题难以在单机环境下的有限时间内得到解决。目前计算特征向量相似度的方法包括暴力求解和矢量计算。

但本申请人发现上述两种计算方式都存在一定的缺陷,例如暴力求解的有点是实现简单,但缺点是由于平方的时间复杂度仅限于小规模数据;矢量计算是将向量组成矩阵形式,则向量间的相似性计算问题便转为对该矩阵的运算问题,其优点是可以利用矩阵运算的优化技术将问题的时间复杂度降低,缺点是矩阵所容纳的向量规模受机器内存限制。

可见上述方法中,在计算量庞大的情况下无法兼顾计算速度和计算时间。



技术实现要素:

本申请提供了一种计算数据相似性的方法和装置,可以解决在计算特征向量相似度时,因计算量庞大导致计算所需时间过长的问题。所述技术方案如下:

第一方面,提供了一种计算数据相似性的方法,该方法包括:

对原始数据进行划分,得到多个数据区块;

根据各个数据区块的数据,分别计算得到各个数据区块的多个数据向量;

针对每个数据区块,将任一查询向量与每个数据区块中的多个数据向量进行相似度计算,确定相似度计算结果。

在一个可能实现的方式中,对原始数据进行划分,得到多个数据区块,包括:

按照弹性分布式方式对原始数据进行划分,得到多个数据区块。

在另一个可能实现的方式中,根据各个数据区块的数据,分别计算得到各个数据区块的多个数据向量,包括:

根据各个数据区块的数据,通过预置的矢量计算方法分别计算得到各个数据区块的多个数据向量。

在另一个可能实现的方式中,确定相似度计算结果,包括:

将得到的计算结果按照由大到小的顺序进行排序,并将处于预定排序范围内的相似度确定为相似度计算结果。

在另一个可能实现的方式中,确定相似度计算结果,包括:

将计算得到的、大于预设相似度阈值的计算结果确定为相似度计算结果。

第二方面,提供了一种计算数据相似性的装置,该装置包括:

划分单元,用于对原始数据进行划分,得到多个数据区块;

计算单元,用于根据各个数据区块的数据,分别计算得到各个数据区块的多个数据向量;

确定单元,用于针对每个数据区块,将任一查询向量与每个数据区块中的多个数据向量进行相似度计算,确定相似度计算结果。

第三方面,提供了一种电子设备,该电子设备包括:

一个或多个处理器;

存储器;

一个或多个应用程序,其中一个或多个应用程序被存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序配置用于:执行根据上述第一方面中的一种计算数据相似性的方法。

第四方面,提供了一种计算机可读存储介质其上存储有计算机程序,其特征在于,该程序被处理器执行时实现上述第一方面中的一种计算数据相似性的方法。

本申请提供的技术方案带来的有益效果是:

本申请提供的技术方案包括:对原始数据进行划分,得到多个数据区块;根据各个数据区块的数据,分别计算得到各个数据区块的多个数据向量;针对每个数据区块,将任一查询向量与每个数据区块中的多个数据向量进行相似度计算,确定相似度计算结果。可见该过程首先将原始数据划分成多个数据区块,这一方式起到了化整为零的作用,既将大规模数据划分成小规模数据。再对得到的每个数据区块中的数据计算数据向量,由于数据区块内的数据是小规模数据,因此可用矢量计算方法计算出数据向量,该方式可大大提高计算速度。最后根据查询向量和数据向量计算出相似度计算结果,并选取出符合要求的相似度计算结果以便后续操作时尽可能的获得精简后的数据。可见该方法在数据量庞大的情况下,在化整为零的基础上能够提高计算速度,并且选取符合要求的相似度计算结果,精简了后续操作时所需的数据量。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。

图1为本申请实施例提供的一种计算数据相似性方法的流程示意图;

图2为弹性分布式数据集的结构示意图;

图3为范围分区的结构示意图;

图4为本申请实施例提供的采用哈希分区方式进行数据分区的结构示意图;

图5为本申请实施例提供的一种计算数据相似性装置的结构示意图;

图6为本申请实施例提供的一种计算数据相似性的电子设备的结构示意图。

具体实施方式

下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

由于现有技术中对多媒体对象的描述需要大量的特征向量,因此对这些特征向量计算相似性时会因数据量庞大而导致计算时间很长,十分消耗系统内存。现有技术中计算相似性值的方式时如果保证计算速度快,则该方法一般只适用于小规模计算,所以现有技术中不存在既能够适应大规模数据量的计算、且同时保证计算时间可控的计算相似性值的方法。

本申请提供的一种计算数据相似性的方法和装置,旨在解决现有技术的如上技术问题。

下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。

本申请实施例中提供了一种计算数据相似性的方法,如图1所示,该方法包括:

步骤s11,对原始数据进行划分,得到多个数据区块;具体的本步骤中划分数据区块的方式如下:

按照spark的弹性分布式方式对原始数据进行划分,得到多个数据区块。

spark是专为大规模数据处理而设计的快速通用的计算引擎,其启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载,可用它来完成各种各样的运算,包括sql查询、文本处理、机器学习等。弹性分布式数据集(resilentdistributeddatasets,rdd)是spark底层的分布式存储的数据结构,分布式对象集合能够跨集群在内存中保存,多个并行操作,失败自动恢复。rdd的结构示意图如图2所示,系统21中包括多台设备22,每台设备中包括用于存储数据的存储器23,按照预设的数据分区方式,将存储器23中的数据存入向对应的数据区块24中,且保存有映射关系表,该映射关系表中保存有数据标识与其所在内存的一一对应关系。

预设的数据分区方式包括:

第一种,哈希分区,采用哈希的方式对通过映射关系表对数据进行分区。其数据分区规则为partitionid=key.hashcode%numpartitions,其中partitionid代表该key对应的待分区数据应当分配到的数据区块(partition)标识,key.hashcode表示该key的哈希值,numpartitions表示包含的partition个数。

第二种,范围分区,如图3所示,spark引入范围分区的目的是为了解决哈希分区所带来的分区倾斜问题,也即分区中包含的数据量不均衡问题。哈希分区采用哈希的方式将同一类型的key分配到同一个数据区块中,因此当某一或某几种类型数据量较多时,就会造成若干数据区块中包含的数据过大问题,而在执行任务的过程中,一个数据区块对应一个任务,此时就会使得某几个任务运行过慢。范围分区基于抽样的思想来对数据进行分区。图3简单描述了范围分区的数据分区过程,其中包括数据源31,且预先计算出可分为两个数据区块,则对数据源31进行数据分区得到数据区块32和数据区块33。

第三种,自定义分区,该方式可以按照实际需求进行数据分区操作。

例如,本申请采用哈希分区方式进行数据分区时,如图4所示数据分区结构,具体分区方式如下:

假设确定所需的数据区块41一共为4个,系统21需要进行分区的数据一共20个,既需要将这20个数据分别放置于四个数据区块41中。根据数据区块节点的数量n使用公式:hash=hash(key)%n,计算出哈希hash值,根据哈希值来决定数据存储在哪个数据区块上,本实施例中n=4。

在该划分过程中具体的分区数量可根据实际需要进行设置,或者,设置为总核数的2~3倍;

步骤s12,根据各个数据区块的数据,分别计算得到各个数据区块的多个数据向量;具体的本步骤包括如下方法:

根据各个数据区块的数据,通过预置的矢量计算方法分别计算得到各个数据区块的多个数据向量;

在该过程中也可使用其他适合小规模数据量、且计算速度快的方式来计算数据向量。

numpy系统是一种开源的数值计算扩展工具。这种工具可用来存储和处理大型矩阵,其可以进行数组和矢量计算;其中包括ndarray函数,该函数用来创建矢量算术运算的多维数组,是用于对整组数据进行快速运算的标准数学函数,本申请中使用numpy系统的矢量计算工具可以直接计算出数据区块的数据向量。

步骤s13,针对每个数据区块,将任一查询向量与每个数据区块中的多个数据向量进行相似度计算,确定相似度计算结果;

当系统接收到查询向量后,将该查询向量分发给每一个数据区块,则让数据区块中的每一个数据的数据向量与该查询向量进行相似度计算。

计算相似度的方式包括以下:

第一种,皮尔逊相关系数,用来反映两个变量线性相关程度的统计量;取值范围为[-1,1],当计算结果的绝对值越大,说明相关性越强。

第二种,欧几里德距离,利用欧式距离定义的相似度。取值范围为[0,1],当相似度值越大,说明距离越小。

第三种,cosine相似度计算,多维空间两点与所设定的点形成夹角的余弦值。余弦值的取值范围为[-1,1],余弦值值越大,说明夹角越大,两点相距就越远,相似度就越小。

第四种,spearman秩相关系数,其通常被认为是排列后的变量之间的pearson线性相关系数。取值范围为{-1.0,1.0},当一致时为1.0,不一致时为-1.0。

第五种,曼哈顿距离,是用于多维数据空间距离的测度;取值范围为[0,1],同欧式距离一致,计算值越小,说明距离值越大,相似度越大。

例如,本申请中通过欧几里德距离里计算相似度时,将查询向量和数据向量分别作为n维空间的两个点x和y,通过以下公式可计算出查询向量和数据向量的欧几里德距离d(x,y):

可以看出,当n=2时,欧几里德距离就是平面上两个点的距离。当用欧几里德距离表示相似度sim(x,y)时,一般采用以下公式进行转换:

其中sim(x,y)的取值范围在[-1,1]之间,当sim(x,y)取值越大,说明d(x,y)越小,也就是距离越近,则相似度越大。

可见,上述过程中通过弹性分布式方式可将大规模的数据划分成多个小规模的数据区块,起到了化整为零的作用,对于小规模数据区块中的数据用矢量计算法能快速计算出数据的相似性值,这样可以整体上降低计算时间,最终起到即便是大规模数据也可以快速计算出数据的相似性值。

本申请是实施例提供了一种可能实现的方案,还可对计算出的数据相似性值作进一步处理以方便后续操作,具体方式如下:

在计算出相似性值之后,需要确定相似度计算结果,确定的方式可以是以下方式中的二选一:

第一种,将得到的计算结果按照由大到小的顺序进行排序,并将处于预定排序范围内的相似度确定为相似度计算结果。

例如,可以对排序后的相似度计算结果取前10个,具体取值方式可根据实际需要确定;

对计算结果排序方式可根据实际需要确定,并不唯一限定于从大到小的排序,也可以是由小到大的排序方式。

第二种,将计算得到的、大于预设相似度阈值的计算结果确定为相似度计算结果;

预设相似度阈值可根据实际需要进行设置。

可见,根据上述方案,在计算出大量相似度值的结果之后,如果不经筛选全部放入到下一部分的操作中,会给后续操作带来很大的消耗,因此,上述方法可对计算出的相似度结果进行提取,选择所需要的一部分值放入到下一部分的操作中,这样可大大节约系统的整体开销。

为了更加清清楚地阐述上述方案,以下以具体实施例进行介绍,以系统具有1000w数据需要进行相似度计算,且查询向量为10w为例,具体过程如下;

系统将1000w数据按照弹性分布式方式划分出多个数据区块;

将10w个查询向量发送给每一个数据区块;

每一个数据区块利用numpy的矢量计算优化工具等,计算出该数据区块中所有数据的数据向量;

该数据区块根据计算出的数据向量和得到的查询向量计算出所有数据相似度值;

对所有数据相似度值进行由大到小的排序,并将落入预定排序范围内的相似度确定为相似度计算结果,例如取前10个数据;或者将大于预设相似度阈值的计算结果确定为相似度计算结果。

本申请实施例提供了一种计算数据相似性的装置,如图5所示,该装置包括:

划分单元51,用于对原始数据进行划分,得到多个数据区块;

计算单元52,用于根据各个数据区块的数据,分别计算得到各个数据区块的多个数据向量;

确定单元53,用于针对每个数据区块,将任一查询向量与每个数据区块中的多个数据向量进行相似度计算,确定相似度计算结果。

划分单元51还用于,按照弹性分布式方式对原始数据进行划分,得到多个数据区块。

计算单元52还用于,根据各个数据区块的数据,通过预置的矢量计算方法分别计算得到各个数据区块的多个数据向量。

确定单元53还用于,将得到的计算结果按照由大到小的顺序进行排序,并将处于预定排序范围内的相似度确定为相似度计算结果。

确定单元53还用于,将计算得到的、大于预设相似度阈值的计算结果确定为相似度计算结果。

本申请实施例中提供了一种电子设备,该电子设备包括:存储器和处理器;至少一个程序,存储于存储器中,用于被处理器执行时,与现有技术相比可实现:将原始数据划分成多个数据区块,这一方式起到了化整为零的作用,既将大规模数据划分成小规模数据。再对得到的每个数据区块中的数据计算数据向量,由于数据区块内的数据是小规模数据,因此可用矢量计算方法计算出数据向量,该方式可大大提高计算速度。最后根据查询向量和数据向量计算出相似度计算结果,并选取出符合要求的相似度计算结果以便后续操作时尽可能的获得精简后的数据。可见该方法在数据量庞大的情况下,在化整为零的基础上能够提高计算速度,并且选取符合要求的相似度计算结果,精简了后续操作时所需的数据量。

在一个可选实施例中提供了一种电子设备,如图6所示,图6所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。

处理器4001可以是cpu(centralprocessingunit,中央处理器),通用处理器,dsp(digitalsignalprocessor,数据信号处理器),asic(applicationspecificintegratedcircuit,专用集成电路),fpga(fieldprogrammablegatearray,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等。

总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是pci(peripheralcomponentinterconnect,外设部件互连标准)总线或eisa(extendedindustrystandardarchitecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

存储器4003可以是rom(readonlymemory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,ram(randomaccessmemory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是eeprom(electricallyerasableprogrammablereadonlymemory,电可擦可编程只读存储器)、cd-rom(compactdiscreadonlymemory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。

存储器4003用于存储执行本申请方案的应用程序代码,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现前述方法实施例所示的内容。

其中,电子设备包括但不限于:台式电脑、笔记本电脑等设备。

本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。与现有技术相比,将原始数据划分成多个数据区块,这一方式起到了化整为零的作用,既将大规模数据划分成小规模数据。再对得到的每个数据区块中的数据计算数据向量,由于数据区块内的数据是小规模数据,因此可用矢量计算方法计算出数据向量,该方式可大大提高计算速度。最后根据查询向量和数据向量计算出相似度计算结果,并选取出符合要求的相似度计算结果以便后续操作时尽可能的获得精简后的数据。可见该方法在数据量庞大的情况下,在化整为零的基础上能够提高计算速度,并且选取符合要求的相似度计算结果,精简了后续操作时所需的数据量。

在一个具体实施例中,本申请提供一种计算数据相似性的方法,该方法包括:

步骤a,对原始数据进行划分,得到多个数据区块;

步骤b,根据各个数据区块的数据,分别计算得到各个数据区块的多个数据向量;

步骤c,针对每个数据区块,将任一查询向量与每个数据区块中的多个数据向量进行相似度计算,确定相似度计算结果。

具体的,在步骤a中对原始数据进行划分,得到多个数据区块,包括:

按照弹性分布式方式对原始数据进行划分,得到多个数据区块。

具体的,在步骤b中根据各个数据区块的数据,分别计算得到各个数据区块的多个数据向量,包括:

根据各个数据区块的数据,通过预置的矢量计算方法分别计算得到各个数据区块的多个数据向量。

具体的,在步骤c中确定相似度计算结果,包括:

将得到的计算结果按照由大到小的顺序进行排序,并将处于预定排序范围内的相似度确定为相似度计算结果。

具体的,在步骤c中确定相似度计算结果,还包括:

将计算得到的、大于预设相似度阈值的计算结果确定为相似度计算结果。

应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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