一种基于机器学习的多特征文本数据相似度计算方法与流程

文档序号:16532906发布日期:2019-01-05 10:55阅读:583来源:国知局
一种基于机器学习的多特征文本数据相似度计算方法与流程

本发明属于计算机软件技术领域,特别涉及一种基于机器学习的多特征文本数据相似度计算方法。



背景技术:

在大数据处理领域,一种需求是需要对多特征文本数据的相似度进行计算。所谓多特征文本数据是指这么一种数据:该数据包含多个特征(也可以称作域),每个特征都是一段多个字符组成的文本,或者是可以转换为文本的其他数据类型。

如图一所示,这是一组电子商务商品的数据,该数据包含有“商品编号”,“品牌”和“产品型号”三个特征,每个特征都是一段文本数据(或是可以简单转换为文本数据的其他数据类型)。

对于这样的一组多特征文本数据,有很多数据应用都涉及对其中数据之间的相似度进行计算。比如:1,希望在数据组中找到与某条已知数据相似度最高的数据;2,希望对数据组中的数据进行分类,并保证相似度高的数据属于同一类别。

对多特征文本数据的相似度进行计算存在以下难点:

1,在不同的应用或不同的数据组中,多特征文本数据的相似度所依赖的数据特征是变化的,因此难以设计一个通用的算法以应对不同的应用及不同的数据组。以图一数据组为例,显然“产品型号”这个特征对相似度的贡献最大,而另外一个设计公司信息的数据组中,可能“公司名称”和“公司地址”则对相似度贡献较大。

2,文本是一种非量化信息,需要有一种有效量化算法来计算数据之间的相似性;对于一组有n条数据的数据组,如果想求得与其中一条数据相似度最高的数据,那么理论上需要进行n×(n-1)次计算,当n较大时,算法的效率是很低的。



技术实现要素:

本发明所要解决的技术问题是提供一种基于机器学习的多特征文本数据相似度计算方法,该方法可以计算出与某条特定数据相似度最高的数据,有效解决现有技术中的不足。

本发明是通过以下技术方案来实现的:包括以下几个具体步骤:

一、使用文本矢量化算法将每条数据的每个特征转化为一个矢量数组;

二、将每条数据的多个特征生成的矢量数据进行拼接,正则化处理,并将所有数据的对应矢量数组组成一个矩阵;

三、可选地使用pca算法对上述矩阵进行降维;

四、由业务专家在上述数据中标注出一系列相似数据对,每个数据对由两条相似数据组成;

五、基于上述相似数据对,计算出矢量距离映射矩阵,并基于该矩阵得到矢量距离计算公式;

六、使用低精度聚合算法,将所有数据归入多个聚类,一条数据有可能属于多个聚类;

七、对于某条特定数据,基于上述聚类和距离计算公式,得到与该数据相似度最高的数据。

作为优选的技术方案,上述步骤一中的文本矢量化算法,包含以下步骤:

(1)将特征文本字符串切分为词;

(2)使用矢量化算法将每个词转化为一个矢量;

(3)组合特征字符串中每个词转化的矢量生成特征矢量;

其中,(1)中所述将特征文本字符串切分为词的方法,是对于英文等拼音文字,一种简单的分词方法就是直接使用字符串中的空格作为词的分界符号进行分词;对于中文等表意文字,业界也有成熟算法进行分词,比如在中文分词方面,一种常用的分词开源软件是结巴分词;

(2)中所述的矢量化算法,它可以将某个词转化为一个浮点数数组,常见的矢量化算法包括但不限于tf-idf算法,word2vec算法以及fasttext算法;

(3)中所述组合方法的特征是将组成字符串的所有词所生成的矢量数组通过矢量加法运算生成组合后的矢量数组,计算结果是每个特征字符串对应一个矢量数组。

作为优选的技术方案,步骤二中,

(2.1)所述的矢量拼接方法是每个数据的每个特征文本字符串都转化成一个特定长度的矢量数组,设矢量数组的长度为k,每个数据的特征数量为d,那么每条数据将拥有d个k维的矢量数组,将d个矢量拼接为一个单一矢量,这样获得一个维度为的矢量数组;

(2.2)数据正则化处理的特征是对矢量数组中每个元素再除以数组中所有元素平方和的平方根,也就是进行二次正则化;

(2.3)矩阵化操作的特征是将所有数据所对应的多个矢量数组组合生成一个矩阵,每个矢量数组成为矩阵的一行。

作为优选的技术方案,步骤五中所述的距离计算公式的特征是包括以下计算步骤:

(5.1)对于前述步骤中标注得到的m个相似数据对{(x1,y1),(x2,y2),(x3,y3),……,(xm,ym)},对其中每一个相似数据对(xi,yi)分别计算其和向量和差向量(在以下计算中,xi和yi都被作为列向量):

(5.2)基于所有m个和向量和差向量,计算和矩阵和差矩阵:

公式中的上标t代表转置;

(5.3)基于上述和矩阵和差矩阵,我们可以求出两个距离映射计算矩阵a和b:

(5.4)基于上述距离映射矩阵a和b,最后得到我们的数据间距离计算公式:对于数据集中任意两个向量x和y,它们之间的距离可以用以下公式计算:

d=(x+y)ta(x+y)-λ(x-y)tb(x-y),其中λ是一个常数值,在不同的应用中其取值可以不同。其常见取值范围是从0.9到1.5之间。

作为优选的技术方案,步骤6中所述低精度聚类算法其特征是包括以下步骤:

(6.1)将所有数据放入待聚类数据集,并设定两个距离阈值d1和d2,并确定0<d1<d2<数据间最大距离;

(6.2)如果待聚类数据集不为空则转入下一步骤,否则算法终止;在待聚类数据集中任意选择一条数据作为参考数据,并计算所有数据与该参考数据的距离;

(6.3)生成一个新的聚类,并将所有与参考数据距离值小于的数据放入这个聚类;

(6.4)生成一个新的聚类,并将所有与参考数据距离值小于的数据放入这个聚类;

(6.5)跳转到步骤6.2。

作为优选的技术方案,步骤7中所述求得与某条数据相似度最高的数据的方法的特征是包括以下步骤:

(7.1)首先按照上述聚类算法确定该数据的聚类;

(7.2)然后使用上述矢量距离计算公式计算该数据与所有与其同一聚类的其他数据的距离;

(7.3)对计算出来的数据进行排序;

(7.4)得到与该数据相似度最高的数据。

本发明的有益效果是:本发明采用机器学习算法实现了多特征文本数据的距离计算,并使用低精度聚类方法降低了计算量,提升了算法性能。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是一组多特征文本数据样例图;

图2是由n条文本数据组成的数据组图;

图3是在多特征文本数据组中求取与某数据相似度最高数据的算法流程图;

图4是数据拼接与正则化的流程示意图;

图5是使用低精度聚合算法将数据分布到不同聚类中的流程示意图。

具体实施方式

本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。

本说明书(包括任何附加权利要求、摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。

如图2所示,该数据组中每条数据都有d个特征,每个特征都是文本类型或是能转换为文本类型的数据。同时,数据的总条数是n。现在我们的目标是对数据组中任意某条数据,需要在数据组中得到与其相似度最高的其他数据。

为了解决这个问题,我们提出了一种多特征文本数据的相似度计算方法。该方法的流程如图3所示,包括以下流程:文本数据矢量化:使用文本矢量化算法将每条数据的每个特征转化为一个矢量数组;

文本数据矢量化包括以下几个步骤:

a)将特征文本字符串切分为词;这也就是所谓的分词,对于英文等拼音文字,一种简单的分词方法就是直接使用字符串中的空格作为词的分界符号进行分词;对于中文等表意文字,业界也有成熟算法进行分词,比如在中文分词方面,一种常用的分词开源软件是结巴分词(https://github.com/fxsjy/jieba)。

b)使用矢量化算法将每个词转化为一个矢量;一种常用词转化为矢量的方法是word2vec。这个算法是谷歌科学家提出来的。这个算法也叫wordembeddings,中文名“词向量”,作用就是将自然语言中的字词转为计算机可以理解的稠密向量(densevector)。该算法有很多开源实现,如https://github.com/danielfrg/word2vec。该算法对于输入的每个词,都会输出一个矢量,也就是一个浮点数数组,数组的长度在数百;

c)组合特征字符串中每个词转化的矢量(浮点数数组)生成特征矢量;举例而言,如果一个特征的文本字符串被切分为100个词,每个词都通过上述矢量化算法转化为一个200维的矢量(长度为200的浮点数数组),假设这100个词转化的矢量为v1,v2,v3,…,v100,那么该特征组合后生成的矢量也是一个200维的矢量vt,该矢量的各个维度满足以下关系:

vt[0]=v1[0]+v2[0]+…+v100[0]

vt[1]=v1[1]+v2[1]+…+v100[1]

……

vt[200]=v1[200]+v2[200]+…+v100[200]

也就是说特征组合矢量的各个维度值是该特征字符串中各个词生成矢量的对应维度值的和。

经过上述流程,则每个特征字符串都转化为一个矢量。

拼接/正则化/矩阵生成:在上一流程中,每个数据的每个特征都转化成一个特定长度的矢量数组,设矢量数组的长度为k,每个数据的特征数量为d,那么每条数据将拥有d个k维的矢量数组。如图3所示,我们将d个矢量拼接为一个单一矢量,这样获得一个维度为d×k的矢量数组。然后,数组中每个元素再除以所有元素平方和的平方根,也就是进行二次正则化。正则化的目的是对元素的大小范围进行限制,以提高后续算法的精度。

然后所有n条数据所对应的n个d×k维矢量数组组合生成一个矩阵,每个矢量数组成为矩阵的一行。我们生成的矩阵是n行d×k列。

可选地使用pca(principalcomponentsanalysis,主成分分析)算法对上述矩阵进行降维。上述步骤生成的矩阵列数为d×k,当d和k都较大时(比如数百或数千),矩阵的列数有可能达到数百万,这将使得后续计算处理的工作量变得极大并拖慢处理速度。而pca算法是一种主流且广为人知的数据降维方法,可以将上述矩阵的列数(维度)极大降低(同时保证数据损失尽量地小)。在实际使用中,我们可以使用pca方法将上述矩阵的列数降低到数百。

标注相似或相等数据对:在这个步骤中,由业务专家在上述n条数据中标注出m对相似数据对,每个数据对由两条相似数据组成。这个步骤也就是机器学习中的数据标注步骤。我们可以假设这标注出来的m条数据是:

{(x1,y1),(x2,y2),(x3,y3),……,(xm,ym)}。

值得注意是,专家进行标注时是基于原始文本数据进行,基于前述步骤,我们可以得知每条原始数据都与前述步骤中生成的数据矩阵的某一行一一对应。后续计算也将基于这些数据。

基于标注出的相似数据对计算出距离映射矩阵,并得到数据距离计算公式:该步骤包含以下计算:

对于前述标注的相似数据对{(x1,y1),(x2,y2),(x3,y3),……,(xm,ym)},对其中每一个相似数据对(xi,yi)分别计算其和向量和差向量(在以下计算中,xi和yi都被作为列向量:

基于所有m个和向量和差向量,计算和矩阵和差矩阵:

公式中的上标t代表转置。

基于上述和矩阵和差矩阵,我们可以求出两个距离映射计算矩阵a和b:

其中公式中的上标-1代表矩阵求逆。

基于上述距离映射矩阵a和b,最后得到我们的数据间距离计算公式:对于数据集中任意两个向量x和y,它们之间的距离可以用以下公式计算:

d=(x+y)ta(x+y)-λ(x-y)tb(x-y)

其中λ是一个常数值,在不同的应用中其取值可以不同。其常见取值范围是从0.9到1.5之间。

使用低精度聚合算法,将所有数据归入多个聚类,一条数据有可能属于多个聚类。该算法流程如图5所示,算法中所有数据间的距离值由上述距离计算公式计算。算法包括以下步骤:

a)将所有数据放入待聚类数据集,并设定两个距离阈值d1和d2,并确定0<d1<d2<数据间最大距离;

b)如果待聚类数据集不为空则转入下一步骤,否则算法终止;

c)在待聚类数据集中任意选择一条数据作为参考数据,并计算所有数据与该参考数据的距离;

d)生成一个新的聚类,并将所有与参考数据距离值小于d2的数据放入这个聚类;

e)将所有与参考数据距离值小于d1的数据从待聚类数据集中去除;

f)跳转到步骤b;

基于上述算法,我们将所有数据都归入至少一个聚类,需要注意每条数据有可能属于多于一个的聚类,这也是称之为低精度聚类的原因。

对于某条特定数据,首先按照上述聚类算法确定其聚类(可能多个),然后使用上述距离映射矩阵计算该数据与所有与其同一聚类的其他数据的距离,对计算出来的数据进行排序,就能得到与该数据相似度最高的数据(也就是距离最小的数据)。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何不经过创造性劳动想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书所限定的保护范围为准。

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