地址识别方法、设备以及计算机可读介质
技术领域
本申请涉及信息技术领域,尤其涉及一种地址识别方法、设备以及计算机可读介质。
背景技术
在风控领域,一种常见的欺诈模式是非法用户通过某种欺诈手段(如盗卡,盗账户,身份冒用等)在网上购买实物邮寄至指定地点进行从而销赃获取非法利润。对于此类情况,可以将此类地址加入至黑名单中,基于该黑名单检测订单中的地址,来检测欺诈者的订单。但是,实际场景中,欺诈者为了避免邮寄地址被拉黑,往往会在地址文本中加入噪声,如加入重复字符,改变某些词的顺序,加入特殊字符,改变数字,使这些地址绕开检测,但实际仍然指向同一地址。
由于加入噪声后的地址仍然会具有一定的相似性,因此可以对地址文本进行向量化处理之后,基于数值向量进行聚类,将加入噪声后的地址聚集起来进行识别。但是,采用常规的聚类算法,如Kmeans等,对向量化后的地址文本进行聚类时,存在以下的缺点:
Kmeans算法需要指定聚类数量k,而在该场景下聚类个数的不确定的,无法预先设定聚类个数。并且在常规使用场景中,设定的聚类数量k的值一般会远小于样本数量。但是在该地址识别的场景中,正常的地址往往会占据样本的大多数,只有少量的地址是加入了噪声的重复地址,因此实际聚类获得的类别数量应当是接近于样本个数的。由此,常规的聚类算法无法获得准确的聚类结果,导致地址识别的准确性较低。
在大数据场景下,随着样本数量的增加聚类的计算量也随之显著增加,导致方案在大数据场景下的运行效率低。
申请内容
本申请的一个目的是提供一种地址识别方法方案,用以解决现有方案中准确性和效率不高的问题。
本申请实施例中提供了一种地址识别方法,该方法包括:
将地址文本转换为数值向量,其中,所述数值向量的相似程度与所述文本地址的相似程度正相关;
根据所述数值向量对文本地址进行聚类,获得预设数量的数据子集;
对于每个数据子集,采用基于密度的聚类算法、并据所述数值向量对同一数据子集中的地址文本进行聚类,获得多个地址集;
将样本数量大于等于门限值的地址集确定为目标地址集。
本申请实施例还提供了一种地址识别设备,该设备包括:
向量化模块,用于将地址文本转换为数值向量,其中,所述数值向量的相似程度与所述文本地址的相似程度正相关;
粗粒度聚类模块,用于根据所述数值向量对文本地址进行聚类,获得预设数量的数据子集;
细粒度聚类模块,用于对于每个数据子集,采用基于密度的聚类算法、并据所述数值向量对同一数据子集中的地址文本进行聚类,获得多个地址集;
识别模块,用于样本数量大于等于门限值的地址集确定为目标地址集。
本申请的一些实施例还提供了一种计算设备,其中,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行前述的地址识别方法。
本申请的另一些实施例还提供了一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现所述地址识别方法。
本申请实施例提供方案中,将地址文本转换为数值向量之后,先根据所述数值向量对文本地址进行粗粒度的聚类,获得预设数量的数据子集,而后对于每个数据子集,采用基于密度的聚类算法、并据所述数值向量对同一数据子集中的地址文本进行细粒度聚类,获得多个地址集,将样本数量大于等于门限值的地址集确定为目标地址集。由于首先进行粗粒度的聚类,初步获得数据子集后可以对每个数据子集并行处理,提高了运行效率,同时每个数据子集中采用基于密度的聚类算法进行细粒度的聚类,无需指定聚类数量,能够适应地址识别场景中实际类别数量接近于样本个数的情况,因此准确性较高。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1为本申请实施例提供的一种地址识别方法的处理流程图;
图2为本申请实施例中对数据块的聚类结果进行合并的过程示意图;
图3为本申请实施例提供的一种聚类算法的处理流程图;
图4为本申请实施例提供的一种地址识别设备的结构示意图;
图5为采用本申请实施例提供的方案实现地址识别时的处理流程图;
图6为本申请实施例提供的一种用于实现地址识别的计算设备的结构示意图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的装置或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
本申请实施例提供了一种地址识别方法,该方法首先进行粗粒度的聚类,初步获得数据子集后可以对每个数据子集并行处理,提高了运行效率,同时每个数据子集中采用基于密度的聚类算法进行细粒度的聚类,无需指定聚类数量,能够适应地址识别场景中实际类别数量接近于样本个数的情况,因此准确性较高。
在实际场景中,该方法的执行主体可以是用户设备、网络设备或者用户设备与网络设备通过网络相集成所构成的设备,此外也可以是运行于上述设备中的程序。所述用户设备包括但不限于计算机、手机、平板电脑等各类终端设备;所述网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。
图1示出了本申请实施例提供的一种地址识别方法的处理流程,至少包括以下步骤:
步骤S101,将地址文本转换为数值向量。所述数值向量是一种将自然语言进行数学化表示的方式,不同的文本地址会被表示为不同的数值向量,例如一个地址文本addr1,其数值向量可以表示为5维的数值向量,即[a1,b1,c1,d1,e1]。若输入的数据集D中有N个不同的地址文本,序号分别为1-N,在将数据集D中的所有地址文本转换为维度为M的数值向量之后,即得到N×M的特征空间。
本申请实施例中,可以采用不同的方式将地址文本转换为数值向量,例如可以基于n-gram语言模型、可以基于词频统计、或者也可以基于word2vec的算法。不同数值向量之间的相似程度会与对应文本地址的相似程度正相关,即数值向量的相似程度越高,其对应的文本地址的相似程度也越高。
由于本申请的目的在于识别加入了噪声后的地址间的相似性,而n-gram语言模型能够用于反映文本地址中前后文之间的关联,因此基于n-gram语言模型所获得的数值向量能够更加准确地反映出文本地址前后文关联性上的区别,能够更加准确地反映出加入噪声后的同一地址之间相似性。
在实际场景中,不同数值向量之间的相似程度可以基于两个数值向量计算获得,例如可以可以采用欧氏距离(Euclid Distance)、马氏距离(Mahalanobis distance)或者是余弦距离(Cosine Distance)等来量化不同数值向量之间的相似程度。当两个数值向量之间的距离越小,则表示两个数值向量对应的地址文本的内容越接近,有较大的概率表示两个地址文本实际指向的是同一地址。
在本申请的一些实施例中,在将地址文本转换为数值向量之前,可以先对所述地址文本进行数据清洗,初步排除一些干扰的因素。由于在实际场景中,地址一般都是由字母、中文以及数字等常规字符组成,可以删除除此之外的特殊字符。同时针对不同的语言环境,也可以针对性的进行调整,例如对于英文的应用场景,可以仅保留英文字母、数字以及一些常用的符号(如“.”、“-”等),而删除此之外的其它字符,而对于中文的应用场景,则可以仅保留中文字符、数字以及一些常用的符号,同理,对于其它的语音环境也可以采用类似的处理方式。
在实际场景中,对于特定的语言,还会存在一些特殊的变化形式,例如英文中的大小写,日文中的平假名、片假名等,在进行数据清洗时也可以在语义不发生变化的情况下转换为同一种形式。以英文的应用场景为例,可以将所有大写字母均转换为小写字母。
步骤S102,根据所述数值向量对文本地址进行聚类,获得预设数量的数据子集。其中,所述预设数量是指用户预先设定的聚类数量,由于此处的聚类仅仅是粗粒度的初步聚类,获得的仅仅是初步的聚类结果(即数据子集),用于作为后续并行处理的输入数据,因此预设数量的设定对于最终的聚类结果的影响不大,可以根据数据集中的数据规模设定合适的值即可,一般可以在2-128之间取值。
在本申请的一些实施例中,可以基于Kmeans算法、并根据所述数值向量对文本地址进行聚类,获得预设数量的数据子集。具体的处理方式如下:对于数据集D中的N个地址文本,随机选取k个样本,将其数值向量作为初始的聚类中心,然后根据数值向量计算每个样本与各个聚类中心之间的距离,把各个样本分配给距离最近的聚类中心,聚类中心对应的样本以及分配至该聚类中心的样本即为一个类别。这个过程将不断重复直到满足终止条件为止,其中,在聚类过程中当每个类别中有新的样本加入时,类别的聚类中心会根据当前的样本的数值向量重新计算。由此,获得的聚类结果为k个数据子集{Di},其中,i为1、2、3、……、k。
步骤S103,对于每个数据子集,采用基于密度的聚类算法、并据所述数值向量对同一数据子集中的地址文本进行聚类,获得多个地址集。
不同于Kmeans算法等需要预先设定聚类数量的聚类算法,基于密度的聚类算法(density-based methods)无需预先设定聚类数量,而是基于预先设定的距离门限,可以将距离相近的地址文本划分至同一个地址集中,基于数值向量计算确定的距离越近,表示地址文本的相似程度越高,由此可以将数据子集中相似度超过阈值(即距离小于距离门限)的文本地址聚集成多个类别。由于无需预先设定聚类数量,能够适应地址识别场景中实际类别数量接近于样本个数的情况,因此准确性较高,同时各个数据子集可以同时并行处理,也提高了运行效率。
步骤S104,将样本数量大于等于门限值的地址集确定为目标地址集。
由于本申请实施例提供的方案是应用于地址识别场景,用于识别加入噪声后的异常地址,该场景的特点在于数据量大,并且异常地址的占比较小,而正常地址加入噪声的概率较小。由此会导致实际场景中,聚类后获得的实际类别数量会接近于样本个数,并且正常地址所对应的类别中的样本数量较少,而异常地址由于是采用不同方式加入了噪声后的地址文本,其所对应的类别中的样本数量往往会较多。由此,可以设定一个门限值,将样本数量小于门限值的地址集认为是正常地址所对应的地址集,其中包含的地址文本均指向正常地址,而将样本数量大于等于门限值的地址集认为是需要识别的目标地址集。其中包含的地址文本即为加入噪声后的地址文本。
为了进一步提高处理效率,可以将每个数据子集进一步分为多个数据块,对每个数据块并行处理之后,再将结果进行聚类,从而进一步利用并行处理的优点,提升处理效率。
由此,本申请的一些实施例中,在对每个数据子集,采用基于密度的聚类算法、并据所述数值向量对同一数据子集中的地址文本进行聚类,获得多个地址集时,可以先将每个数据子集包含的文本地址划分为多个数据块,而后对于每个数据块,采用基于密度的聚类算法、并根据所述数值向量对同一数据块中的地址文本进行聚类,获得多个地址集,再对不同数据块中的地址集进行聚类,获得新的地址集。
对于一个数据子集,可以将其分为多个数据块,每个数据块即为{di}。对于每个数据块{di}可以采用如前述对每个数据子集的处理方式,采用基于密度的聚类算法、并据所述数值向量对同一数据子集中的地址文本进行聚类,获得多个地址集。对于每个数据块的聚类结果,可以进一步进行合并,合并的方式即为对不同数据块中的地址集进行聚类,获得新的地址集。
实际场景中,在对不同数据块中的地址集进行聚类时,也可以采用基于密度的聚类算法、并根据不同数据块中的地址集的聚类中心所对应的数值向量,对地址集进行聚类。与前述在每个数据块中,采用基于密度的聚类算法、并根据所述数值向量对同一数据块中的地址文本进行聚类时的区别在于,同一数据块中进行聚类时处理的样本是各个地址文本对应的数值向量,而合并时进行聚类处理的样本则是每个地址集的聚类中心对应的数值向量。
为了提高处理的效率,每个数据子集划分的数据块的数量为2^q个,即2的q次方,其中q为预先设定的正整数。例如,当q设定为8时,每个数据子集可以划分为256个数据块,然后分别对这256个数据块并行进行聚类处理,每个数据块均可以获得多个地址集。
相应地,在对不同数据块中的地址集进行聚类,获得新的地址集时,可以采用两两合并的方式,将两个数据块划分为一组,对本组数据块中的地址集进行聚类,获得新的地址集,并将该组中的数据块合并为一个数据块,而后重复上述步骤直至数据子集中的所有数据块合并为一个数据块。由此可以使得结果快速收敛,以前述256个数据块为例,仅需要经过8次合并,即可获得该数据子集的处理结果。
此外,本申请的一些实施例中,在将每个数据子集划分为多个数据块时,可以对每个数据子集中的文本地址进行排序,然后将每个数据子集包含的文本地址按照排序获得的顺序平均划分为多个数据块。实际场景中,排序时采用升序或者降序均可,其目的在于使得相邻数据块之间的文本地址更加接近,例如在英文的应用场景中,可以基于字母的顺序降序排列,当字母相同时再基于数字降序排列,由此可以对数据子集中的文本地址进行排序。
当每个数据子集包含的文本地址是按照排序获得的顺序平均划分为多个数据块时,在对合并数据块的聚类结果时,可以按照顺序将相邻的数据块进行合并。例如,若一个数据子集按照文本顺序划分为256个数据块,数据块的序号分别为d1、d2、d3、……、d256。在对数据块的聚类结果进行两两合并时,可以将d1和d2进行合并,d2和d3进行合并,直至d255和d256进行合并。对于后续轮次的合并,也可以采用类似的方式,按照合并获得的新数据块的顺序,进行两两合并,直至获得该数据子集的聚类结果,聚类合并的过程可以图2所示。
本申请实施例提供的方法中,在对同一数据块中的地址文本进行聚类以及对不同数据块中的地址集进行聚类时,均采用了基于密度的聚类算法。图3示出了可应用于本实施例方案的一种基于密度的聚类算法,包括了以下处理步骤:
步骤a,选取一个样本,作为一个类别,并将所述样本对应的数值向量确定为所述类别的初始聚类中心。其中,所述样本是指样本集合中待处理的数据样本,例如当在对同一数据块中的地址文本进行聚类时,样本即为地址文本,聚类处理的依据是地址文本的数值向量;当在对不同数据块中的地址集进行聚类时,样本即为地址集,聚类处理的依据则是地址集的聚类中心所对应的数值向量。
以对同一数据块中的地址文本进行聚类的处理为例,首先选取序号为1的地址文本addr1,将该地址文本作为一个类别,该类别的聚类中心即为addr1的数值向量[a1,b1,c1,d1,e1]。
步骤b,选取一待处理的样本,计算所述待处理的样本与已有类别的聚类中心之间的距离。所述待处理的样本即为未被分配至任一类别的样本,当前情况下即为除序号1之外的任一样本。若本申请实施例中选取的样本为序号为2的地址文本addr2,则可以计算所述待处理的样本与已有类别的聚类中心之间的距离。由于当前已有类别仅存在一个,仅计算addr2与该已有类别的聚类中心[a1,b1,c1,d1,e1]之间的距离dist1即可,其中所述距离可以采用欧氏距离、马氏距离或者余弦距离等。若当前已有类别存在多个,则需要分别计算addr2与各个已有类别的聚类中心之间的距离。
步骤c,判断所述待处理的样本与最近的已有类别的聚类中心之间的距离是否小于距离门限。由于当前已有类别仅存在一个,可以将该距离dist1与距离门限thres进行比较。而在实际场景中,重复多次执行步骤b至d之后可能会存在多个已有类别,若步骤b中计算addr2与各个已有类别的聚类中心之间的距离分别为dist1~dist5,选取其中的最小值即为与最近的已有类别的聚类中心之间的距离,与距离门限进行比较。例如,选取的最小值为dist1,则表示addr2与dist1对应的类别中包含的地址文本最相似,addr2属于该类别的可能性最高。
步骤d,若大于距离门限,则将所述待处理的样本作为一个新的类别,并将待处理的样本对应的数值向量确定为所述类别的初始聚类中心;若小于等于门限距离,则将所述待处理的样本划分至距离最近的已有类别,并更新该已有类别的聚类中心。其中,所述距离门限是预先设定的数值,大于距离门限则表示待处理的样本与最相似的类别差异大于预设值,不会被划分至同一类,反之若小于等于距离门限,则表示待处理的样本与最相似的类别差异小于等于预设值,可以被划分至同一类。
对于前述的场景,若dist1>thres,则可以将地址文本addr2作为一个新的类别,并将addr2对应的数值向量[a2,b2,c2,d2,e2]确定为所述类别的初始聚类中心。若dist1≤thres,则将addr2划分至距离最近的已有类别(即dist1对应的类别),并更新该已有类别的聚类中心。更新新的聚类中心时,可以基于该类别中包含的所有样本确定,例如可以计算所有样本的数值向量的均值等。
而后,重复步骤b至d直至所有样本划分至已有类别中。
为便于理解,在对同一数据块中的地址文本进行聚类时,其处理过程的伪代码表示如下:
1)初始化:距离门限=thres,聚类中心的数量cnt=0,聚类中心的数值向量列表center=[],聚类中心所对应的类别的样本序号列表samples=[]。i为样本序号,vi为序号为i的样本的数值向量,样本即为需要进行聚类的地址文本。
其中,cj是指第j个类别的聚类中心对应的数值向量,dist()为计算距离的函数,可以是欧式距离、马氏距离、余弦距离等,d_min和j_min为使得dist()取最小时的距离值和样本序号。
返回的center,samples即为聚类中心的数值向量列表以及聚类中心所对应的类别的样本序号列表,可以表示该数据块的聚类结果中最终得到的类别(即地址集)以及每个类别的聚类中心。
在基于上述方式完成对每个数据块中的地址文本的聚类之后,可以采用两两合并的方式,对不同数据块获得地址集进行聚类。在对不同数据块中的地址集进行聚类时,将不同数据块中的地址集视为处理的样本即可,假定两个数据块分别为d_p,和d_q,两个数据块包含的地址集的数量分别为cnt_p,cnt_q,各个地址集的聚类中心的数值向量列表分别为center_p,center_q,聚类中心样本对应地址集的样本序号列表分别为samples_q,samples_q,其处理过程的伪代码表示如下:
1)初始化:距离门限=thres,cnt=cnt_p,center=center_p,samples=samples_p。
此时返回的center,samples即为以地址集作为样本进行聚类合并后的聚类中心以及聚类中心所对应的类别的样本序号列表。重复上述处理过程两两合并数据块即可将数据子集内的所有数据块合并为一个,最终获得该数据子集的聚类结果。聚类结果的类别可以由samples确定,center则表示每个类别的聚类中心。
在此,本领域技术人员应能理解上述涉及的具体聚类算法仅为举例,实际场景中可以根据应用场景的需求采用合适不同的聚类算法,其他现有的或今后可能出现的其它方式如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。例如,在进行粗粒度聚类时也可以采用如K-Medians算法等算法,而细粒度聚类时可以也可以采用如均值漂移算法等其它基于密度的聚类算法。
基于同一发明构思,本申请实施例中还提供了一种地址识别设备,所述设备对应的方法是前述实施例中地址识别方法,并且其解决问题的原理与该方法相似。
本申请实施例提供的一种地址识别设备能够首先进行粗粒度的聚类,初步获得数据子集后可以对每个数据子集并行处理,提高了运行效率,同时每个数据子集中采用基于密度的聚类算法进行细粒度的聚类,无需指定聚类数量,能够适应地址识别场景中实际类别数量接近于样本个数的情况,因此准确性较高。
在实际场景中,该地址识别设备可以是用户设备、网络设备或者用户设备与网络设备通过网络相集成所构成的设备,此外也可以是运行于上述设备中的程序。所述用户设备包括但不限于计算机、手机、平板电脑等各类终端设备;所述网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。
图4示出了本申请实施例提供的一种地址识别设备的结构,包括向量化模块410、粗粒度聚类模块420、细粒度聚类模块430和识别模块440。其中,向量化模块410用于将地址文本转换为数值向量。粗粒度聚类模块420用于根据所述数值向量对文本地址进行聚类,获得预设数量的数据子集。细粒度聚类模块430用于对于每个数据子集,采用基于密度的聚类算法、并据所述数值向量对同一数据子集中的地址文本进行聚类,获得多个地址集。识别模块440用于样本数量大于等于门限值的地址集确定为目标地址集。
所述数值向量是一种将自然语言进行数学化表示的方式,不同的文本地址会被表示为不同的数值向量,例如一个地址文本addr1,其数值向量可以表示为5维的数值向量,即[a1,b1,c1,d1,e1]。若输入的数据集D中有N个不同的地址文本,序号分别为1-N,在将数据集D中的所有地址文本转换为维度为M的数值向量之后,即得到N×M的特征空间。
本申请实施例中,可以采用不同的方式将地址文本转换为数值向量,例如可以基于n-gram语言模型、可以基于词频统计、或者也可以基于word2vec的算法。不同数值向量之间的相似程度会与对应文本地址的相似程度正相关,即数值向量的相似程度越高,其对应的文本地址的相似程度也越高。
由于本申请的目的在于识别加入了噪声后的地址间的相似性,而n-gram语言模型能够用于反映文本地址中前后文之间的关联,因此基于n-gram语言模型所获得的数值向量能够更加准确地反映出文本地址前后文关联性上的区别,能够更加准确地反映出加入噪声后的同一地址之间相似性。
在实际场景中,不同数值向量之间的相似程度可以基于两个数值向量计算获得,例如可以可以采用欧氏距离(Euclid Distance)、马氏距离(Mahalanobis distance)或者是余弦距离(Cosine Distance)等来量化不同数值向量之间的相似程度。当两个数值向量之间的距离越小,则表示两个数值向量对应的地址文本的内容越接近,有较大的概率表示两个地址文本实际指向的是同一地址。
在本申请的一些实施例中,所述设备还可以包括数据清洗模块,该数据清洗模块在将地址文本转换为数值向量之前,可以先对所述地址文本进行数据清洗,初步排除一些干扰的因素。由于在实际场景中,地址一般都是由字母、中文以及数字等常规字符组成,可以删除除此之外的特殊字符。同时针对不同的语言环境,也可以针对性的进行调整,例如对于英文的应用场景,可以仅保留英文字母、数字以及一些常用的符号(如“.”、“-”等),而删除此之外的其它字符,而对于中文的应用场景,则可以仅保留中文字符、数字以及一些常用的符号,同理,对于其它的语音环境也可以采用类似的处理方式。
在实际场景中,对于特定的语言,还会存在一些特殊的变化形式,例如英文中的大小写,日文中的平假名、片假名等,在进行数据清洗时也可以在语义不发生变化的情况下转换为同一种形式。以英文的应用场景为例,可以将所有大写字母均转换为小写字母。
粗粒度聚类模块420用于根据所述数值向量对文本地址进行聚类,获得预设数量的数据子集。其中,所述预设数量是指用户预先设定的聚类数量,由于此处的聚类仅仅是粗粒度的初步聚类,获得的仅仅是初步的聚类结果(即数据子集),用于作为后续并行处理的输入数据,因此预设数量的设定对于最终的聚类结果的影响不大,可以根据数据集中的数据规模设定合适的值即可,一般可以在2-128之间取值。
在本申请的一些实施例中,可以基于Kmeans算法、并根据所述数值向量对文本地址进行聚类,获得预设数量的数据子集。具体的处理方式如下:对于数据集D中的N个地址文本,随机选取k个样本,将其数值向量作为初始的聚类中心,然后根据数值向量计算每个样本与各个聚类中心之间的距离,把各个样本分配给距离最近的聚类中心,聚类中心对应的样本以及分配至该聚类中心的样本即为一个类别。这个过程将不断重复直到满足终止条件为止,其中,在聚类过程中当每个类别中有新的样本加入时,类别的聚类中心会根据当前的样本的数值向量重新计算。由此,获得的聚类结果为k个数据子集{Di},其中,i为1、2、3、……、k。
细粒度聚类模块430用于对于每个数据子集,采用基于密度的聚类算法、并据所述数值向量对同一数据子集中的地址文本进行聚类,获得多个地址集。
不同于Kmeans算法等需要预先设定聚类数量的聚类算法,基于密度的聚类算法(density-based methods)无需预先设定聚类数量,而是基于预先设定的距离门限,可以将距离相近的地址文本划分至同一个地址集中,基于数值向量计算确定的距离越近,表示地址文本的相似程度越高,由此可以将数据子集中相似度超过阈值(即距离小于距离门限)的文本地址聚集成多个类别。由于无需预先设定聚类数量,能够适应地址识别场景中实际类别数量接近于样本个数的情况,因此准确性较高,同时各个数据子集可以同时并行处理,也提高了运行效率。
识别模块440用于将样本数量大于等于门限值的地址集确定为目标地址集。
由于本申请实施例提供的方案是应用于地址识别场景,用于识别加入噪声后的异常地址,该场景的特点在于数据量大,并且异常地址的占比较小,而正常地址加入噪声的概率较小。由此会导致实际场景中,聚类后获得的实际类别数量会接近于样本个数,并且正常地址所对应的类别中的样本数量较少,而异常地址由于是采用不同方式加入了噪声后的地址文本,其所对应的类别中的样本数量往往会较多。由此,可以设定一个门限值,将样本数量小于门限值的地址集认为是正常地址所对应的地址集,其中包含的地址文本均指向正常地址,而将样本数量大于等于门限值的地址集认为是需要识别的目标地址集。其中包含的地址文本即为加入噪声后的地址文本。
为了进一步提高处理效率,细粒度聚类模块可以将每个数据子集进一步分为多个数据块,对每个数据块并行处理之后,再将结果进行聚类,从而进一步利用并行处理的优点,提升处理效率。
由此,本申请的一些实施例中,在对每个数据子集,采用基于密度的聚类算法、并据所述数值向量对同一数据子集中的地址文本进行聚类,获得多个地址集时,细粒度聚类模块可以先将每个数据子集包含的文本地址划分为多个数据块,而后对于每个数据块,采用基于密度的聚类算法、并根据所述数值向量对同一数据块中的地址文本进行聚类,获得多个地址集,再对不同数据块中的地址集进行聚类,获得新的地址集。
对于一个数据子集,细粒度聚类模块可以将其分为多个数据块,每个数据块即为{di}。对于每个数据块{di}可以采用如前述对每个数据子集的处理方式,采用基于密度的聚类算法、并据所述数值向量对同一数据子集中的地址文本进行聚类,获得多个地址集。对于每个数据块的聚类结果,可以进一步进行合并,合并的方式即为对不同数据块中的地址集进行聚类,获得新的地址集。
实际场景中,在对不同数据块中的地址集进行聚类时,也可以采用基于密度的聚类算法、并根据不同数据块中的地址集的聚类中心所对应的数值向量,对地址集进行聚类。与前述在每个数据块中,采用基于密度的聚类算法、并根据所述数值向量对同一数据块中的地址文本进行聚类时的区别在于,同一数据块中进行聚类时处理的样本是各个地址文本对应的数值向量,而合并时进行聚类处理的样本则是每个地址集的聚类中心对应的数值向量。
为了提高处理的效率,每个数据子集划分的数据块的数量为2^q个,即2的q次方,其中q为预先设定的正整数。例如,当q设定为8时,每个数据子集可以划分为256个数据块,然后分别对这256个数据块并行进行聚类处理,每个数据块均可以获得多个地址集。
相应地,细粒度聚类模块在对不同数据块中的地址集进行聚类,获得新的地址集时,可以采用两两合并的方式,将两个数据块划分为一组,对本组数据块中的地址集进行聚类,获得新的地址集,并将该组中的数据块合并为一个数据块,而后重复上述步骤直至数据子集中的所有数据块合并为一个数据块。由此可以使得结果快速收敛,以前述256个数据块为例,仅需要经过8次合并,即可获得该数据子集的处理结果。
此外,本申请的一些实施例中,在将每个数据子集划分为多个数据块时,可以对每个数据子集中的文本地址进行排序,然后将每个数据子集包含的文本地址按照排序获得的顺序平均划分为多个数据块。实际场景中,排序时采用升序或者降序均可,其目的在于使得相邻数据块之间的文本地址更加接近,例如在英文的应用场景中,可以基于字母的顺序降序排列,当字母相同时再基于数字降序排列,由此可以对数据子集中的文本地址进行排序。
当每个数据子集包含的文本地址是按照排序获得的顺序平均划分为多个数据块时,在对合并数据块的聚类结果时,可以按照顺序将相邻的数据块进行合并。例如,若一个数据子集按照文本顺序划分为256个数据块,数据块的序号分别为d1、d2、d3、……、d256。在对数据块的聚类结果进行两两合并时,可以将d1和d2进行合并,d2和d3进行合并,直至d255和d256进行合并。对于后续轮次的合并,也可以采用类似的方式,按照合并获得的新数据块的顺序,进行两两合并,直至获得该数据子集的聚类结果,聚类合并的过程可以图2所示。
本申请实施例提供的方案中,细粒度聚类模块在对同一数据块中的地址文本进行聚类以及对不同数据块中的地址集进行聚类时,均采用了基于密度的聚类算法。图3示出了可应用于本实施例方案的一种基于密度的聚类算法,包括了以下处理步骤:
步骤a,选取一个样本,作为一个类别,并将所述样本对应的数值向量确定为所述类别的初始聚类中心。其中,所述样本是指样本集合中待处理的数据样本,例如当在对同一数据块中的地址文本进行聚类时,样本即为地址文本,聚类处理的依据是地址文本的数值向量;当在对不同数据块中的地址集进行聚类时,样本即为地址集,聚类处理的依据则是地址集的聚类中心所对应的数值向量。
以对同一数据块中的地址文本进行聚类的处理为例,首先选取序号为1的地址文本addr1,将该地址文本作为一个类别,该类别的聚类中心即为addr1的数值向量[a1,b1,c1,d1,e1]。
步骤b,选取一待处理的样本,计算所述待处理的样本与已有类别的聚类中心之间的距离。所述待处理的样本即为未被分配至任一类别的样本,当前情况下即为除序号1之外的任一样本。若本申请实施例中选取的样本为序号为2的地址文本addr2,则可以计算所述待处理的样本与已有类别的聚类中心之间的距离。由于当前已有类别仅存在一个,仅计算addr2与该已有类别的聚类中心[a1,b1,c1,d1,e1]之间的距离dist1即可,其中所述距离可以采用欧氏距离、马氏距离或者余弦距离等。若当前已有类别存在多个,则需要分别计算addr2与各个已有类别的聚类中心之间的距离。
步骤c,判断所述待处理的样本与最近的已有类别的聚类中心之间的距离是否小于距离门限。由于当前已有类别仅存在一个,可以将该距离dist1与距离门限thres进行比较。而在实际场景中,重复多次执行步骤b至d之后可能会存在多个已有类别,若步骤b中计算addr2与各个已有类别的聚类中心之间的距离分别为dist1~dist5,选取其中的最小值即为与最近的已有类别的聚类中心之间的距离,与距离门限进行比较。例如,选取的最小值为dist1,则表示addr2与dist1对应的类别中包含的地址文本最相似,addr2属于该类别的可能性最高。
步骤d,若大于距离门限,则将所述待处理的样本作为一个新的类别,并将待处理的样本对应的数值向量确定为所述类别的初始聚类中心;若小于等于门限距离,则将所述待处理的样本划分至距离最近的已有类别,并更新该已有类别的聚类中心。其中,所述距离门限是预先设定的数值,大于距离门限则表示待处理的样本与最相似的类别差异大于预设值,不会被划分至同一类,反之若小于等于距离门限,则表示待处理的样本与最相似的类别差异小于等于预设值,可以被划分至同一类。
对于前述的场景,若dist1>thres,则可以将地址文本addr2作为一个新的类别,并将addr2对应的数值向量[a2,b2,c2,d2,e2]确定为所述类别的初始聚类中心。若dist1≤thres,则将addr2划分至距离最近的已有类别(即dist1对应的类别),并更新该已有类别的聚类中心。更新新的聚类中心时,可以基于该类别中包含的所有样本确定,例如可以计算所有样本的数值向量的均值等。
而后,重复步骤b至d直至所有样本划分至已有类别中。
为便于理解,在对同一数据块中的地址文本进行聚类时,其处理过程的伪代码表示如下:
1)初始化:距离门限=thres,聚类中心的数量cnt=0,聚类中心的数值向量列表center=[],聚类中心所对应的类别的样本序号列表samples=[]。i为样本序号,vi为序号为i的样本的数值向量,样本即为需要进行聚类的地址文本。
其中,cj是指第j个类别的聚类中心对应的数值向量,dist()为计算距离的函数,可以是欧式距离、马氏距离、余弦距离等,d_min和j_min为使得dist()取最小时的距离值和样本序号。
返回的center,samples即为聚类中心的数值向量列表以及聚类中心所对应的类别的样本序号列表,可以表示该数据块的聚类结果中最终得到的类别(即地址集)以及每个类别的聚类中心。
在基于上述方式完成对每个数据块中的地址文本的聚类之后,可以采用两两合并的方式,对不同数据块获得地址集进行聚类。在对不同数据块中的地址集进行聚类时,将不同数据块中的地址集视为处理的样本即可,假定两个数据块分别为d_p,和d_q,两个数据块包含的地址集的数量分别为cnt_p,cnt_q,各个地址集的聚类中心的数值向量列表分别为center_p,center_q,聚类中心样本对应地址集的样本序号列表分别为samples_q,samples_q,其处理过程的伪代码表示如下:
1)初始化:距离门限=thres,cnt=cnt_p,center=center_p,samples=samples_p。
此时返回的center,samples即为以地址集作为样本进行聚类合并后的聚类中心以及聚类中心所对应的类别的样本序号列表。重复上述处理过程两两合并数据块即可将数据子集内的所有数据块合并为一个,最终获得该数据子集的聚类结果。聚类结果的类别可以由samples确定,center则表示每个类别的聚类中心。
在此,本领域技术人员应能理解上述涉及的具体聚类算法仅为举例,实际场景中可以根据应用场景的需求采用合适不同的聚类算法,其他现有的或今后可能出现的其它方式如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。例如,在进行粗粒度聚类时也可以采用如K-Medians算法等算法,而细粒度聚类时可以也可以采用如均值漂移算法等其它基于密度的聚类算法。
图5示出了采用本申请实施例提供的方案实现地址识别时的处理流程,包括以下处理步骤:
step1、数据清洗
1.1删除特殊字符,如英文地址:只保留a-z,A-Z,0-9;中文地址:只保留中文字符、a-z,A-Z,0-9。
1.2所有英文大写字母转换为小写字母。
step2、向量转换
基于n-gram语言模型,将地址文本转换为数值向量,得到N×M的特征空间,M标识数值向量的维度,N表示进行识别的数据集D中包含的地址文本的数量。
step3、粗粒度划分
采用kmeans算法,基于地址文本的数值向量对地址文本进行粗粒度聚类,生成k个数据子集{Di},聚类个数一般取2~128之间。
step4、细粒度聚类
对每个数据子集并行进行细粒度的聚类,可以细分为以下几步:
4.1将数据子集中的地址文本按照文本升序或降序排序。
4.2将数据子集中的地址文本按顺序平均分为2^q个数据块{di}。
4.3每个数据块并行处理,采用基于密度的聚类算法进行聚类。
4.4所有2^q个数据块{di}完成地址聚类后,两个数据块为一组再对聚类结果进行聚类,生成2^(q-1)个数据块,聚类的算法与4.3中类似。
4.5重复4.4直至所有数据块合并为一个数据块。
step5、数据过滤
对所有k个数据子集{Di}的聚类结果合并,过滤样本数量小于预设值的地址集cluster,获得的结果为:
clusters=[i for i samples if count(i)≥cnt_min]
其中,count()为计算每个cluster的样本数量的函数,cnt_min为用于过滤判断的预设值。所获得的结果clusters即为目标地址集的集合。
step6、返回数据
为clusters中的每个cluster分配唯一标识cluster_id后返回。
综上所述,本申请实施例提供方案中,将地址文本转换为数值向量之后,先根据所述数值向量对文本地址进行粗粒度的聚类,获得预设数量的数据子集,而后对于每个数据子集,采用基于密度的聚类算法、并据所述数值向量对同一数据子集中的地址文本进行细粒度聚类,获得多个地址集,将样本数量大于等于门限值的地址集确定为目标地址集。由于首先进行粗粒度的聚类,初步获得数据子集后可以对每个数据子集并行处理,提高了运行效率,同时每个数据子集中采用基于密度的聚类算法进行细粒度的聚类,无需指定聚类数量,能够适应地址识别场景中实际类别数量接近于样本个数的情况,因此准确性较高。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一些实施例包括一个如图6所示的计算设备,该设备包括存储有计算机可读指令的一个或多个存储器610和用于执行计算机可读指令的处理器620,其中,当该计算机可读指令被该处理器执行时,使得所述设备执行基于前述本申请的多个实施例的方法和/或技术方案。
此外,本申请的一些实施例还提供了一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现前述本申请的多个实施例的方法和/或技术方案。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一些实施例中,本申请的软件程序可以通过处理器执行以实现上文步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。