实现高质量文本相似度计算的SimBlock算法及实现方法与流程

文档序号:29860182发布日期:2022-04-30 10:43阅读:198来源:国知局
实现高质量文本相似度计算的SimBlock算法及实现方法与流程
实现高质量文本相似度计算的simblock算法及实现方法
技术领域
1.本发明涉及一种实现高质量文本相似度计算的simblock算法(相似分块矩阵算法),能给出两个字符串之间的相似度打分,逻辑包含关系,相似子字符串的位置和一一对应关系。本发明还涉及一种技术方案,在大数据文本排重场景下应用该算法,设计的分布式计算技术架构。


背景技术:

2.相似度算法是搜索引擎一项基础服务。相似度算法将文本内容(浅层的字符层面、或者更深层次的语义层面)相同或者近似的搜索结果聚合成一组,作为一个搜索结果合并展示,不仅能节省内容版面,提高搜索性能,还节省用户时间和提高用户体验。相似度算法在文本排重、相关推荐、栏目分类、内容过滤、热点发现等场景中有着广泛应用。如图1所示。
3.本发明的目标是关注相似度算法在大数据文本排重场景下的应用,譬如:
4.1.资讯专题模块聚合;
5.2.内容原创和内容剽窃的识别;
6.3.灌水帖子和灌水评论的治理。
7.比较传统的相似度算法分为两类:字符交集模型和字符串向量化余弦模型,如图2所示,具体包括以下算法:
8.1、字符交集模型:将字符串打散成字符集合(或者分词集合),计算2个字符集合之间的交集比例大小得到相似度。存在以下问题:
9.a)该算法不适用于2个字符串均较长的情况,2个字符串越长,算法效果越差,因为字符有限,通用字符重合度比较高,但不代表相似。
10.b)该算法也不适用于2个字符串长短越悬殊的情况,2个字符串长短越悬殊,算法效果越差,因为大的字符集,容易包含小的字符集,但不代表相似。
11.2、词袋模型:将字符串打散成字符列表,然后在one-hot基向量上赋予字符在字符串中出现频率值来实现字符串向量化,计算两个字符串向量之间的余弦夹角得到相似度。相比字符交集模型,即使词袋模型多考虑了频率维度,存在的问题也与字符交集模型相同。
12.3、主题向量模型:将字符串打散成分词列表,然后把每个分词映射成对应的主题向量,加总平均得到字符串的向量,计算向量之间的余弦夹角得到相似度,存在以下问题:
13.a)主题向量的基向量依赖专家特征,能表达语义和文档分类信息,但语义颗粒度较大,不够细,在相似度计算中效果质量差,因为同样讲一个主题,可以有不同的角度和表达方式。
14.4、google-simhash:将字符串打散成字符列表,然后将字符转换成hash编码0101

向量,并将0换成-1,得到-1,1,-1,1

向量,即求和得到字符串的google-simhash向量,计算google-simhash向量之间的余弦夹角得到相似度,存在以下问题:
15.a)该算法等价于一系列噪音相加,噪音相加得到领域结果是小概率事件,除非两个字符串95%以上相同。该算法不适用于2个字符串长度不一致的情况,无法表达包含关
系。
16.b)该算法也不适用于2个字符串较短的情况,2个字符串越短,算法效果越差,因为字符串向量的径向长度太短,其领域无法很好定义。
17.对于两类传统的相似度算法而言:字符交集模型的优点是简单、落地快,在浅层的字符层面上准确。字符串向量化余弦模型的优点是可以度量更深层次的语义层面上相近,其中,google-simhash在搜索引擎中应用的最广泛。但字符交集模型在两个长文对比表现不佳,字符串向量化余弦模型在两个短文对比表现不佳,两类模型在两文长短悬殊时都表现不佳,还不能标记出相似子字符串的位置,并给出一一对应关系。
18.基于上述两类模型的讨论,传统的相似度算法表现不佳的根本原因是“无序集合”和“向量相加”计算,损失了序列“有序”的信息。序列本身包含顺序/位置信息,在变成集合和向量之后,顺序/位置信息损失了。
19.据最近的文献报道,google的bert模型可以有效包含位置信息,设计多层multi-head attention深度学习的网络,并且依赖专用硬件gpu/tpu大量的预训练计算,不同网络层能代表不同的语义层面,把不同深度的语义向量化是其最大的优点,但也无法标记出相似子字符串,并给出一一对应关系。


技术实现要素:

20.本发明的目的是:结合字符交集模型和字符串向量化余弦模型两者的优点,针对大数据文本排重场景,提出一个更直接、效果更好的相似度算法,称为“simblock算法”,或者“相似分块矩阵算法”。本发明的另一个目的是:为了“simblock算法”的落地实现,相应地提出一个分布式计算技术架构设计方案。
21.为了达到上述目的,本发明的一个技术方案是一种能实现高质量文本相似度计算的simblock算法,其特征在于,包括以下步骤:
22.步骤1、将待比较的字符串一及待比较的字符串二转化为每个字符向量的有序堆叠,从而获得与字符串一对应的矩阵以及与字符串二对应的矩阵表示为:
[0023][0024][0025]
式中,表示字符串一中的第i个字符向量化之后得到的归一化向量;表示字符串二中的第j个字符向量化之后得到的归一化向量;
[0026]
步骤2、与的余弦表示成如下广义形式:
[0027][0028]
式中,为度规张量,为全1矩阵;:为双点积;表示字符串一与字符串二的相关系数矩阵,对于中第i行第j列元素有
[0029]
步骤3、获得中元素非全0的区块,每一个区块对应一个分块矩阵,则每个分
块矩阵对应字符串一与字符串二中一个相似的子字符串;分块矩阵越大,则相似的子字符串越长;每个分块矩阵的第一个元素和最后一个元素分别对应一个相似的子字符串的开头和结尾,每个分块矩阵的第一个元素和最后一个元素在中的索引下标分别对应相似子字符串在矩阵与矩阵中的位置;
[0030]
步骤4、初始化矩阵对矩阵进行s
×
s卷积操作(s为卷积核的大小,取值为大于或等于3的奇数正整数,即3、5、7、9、

)更新则有:
[0031][0032]
式中,b
ij
表示中第i行第j列元素,a
kl
表示中第k行第l列元素;
[0033]
步骤5、利用与的余弦来表示字符串一与字符串二的相似度,则有:
[0034]
优选地,步骤4中,矩阵初始化为全0矩阵。
[0035]
优选地,对步骤5中的余弦计算公式进行化简,则有:
[0036][0037]
式中,nb表示第b个分块矩阵的大小,为第b个分块矩阵的行数或者列数的最大值;lu为字符串一的长度;lv为字符串二的长度。
[0038]
优选地,步骤5中,进一步取的上界作为相似度的输出结果similarit,y
[0039]
本发明的另一个技术方案是提供了一种实现上述的simblock算法的分布式计算技术架构的实现方法,其特征在于,所述分布式计算技术架构包括输入source、计算trans.和输出sink三个部分,包括以下步骤:
[0040]
把输入source、计算trans.和输出sink通过多个并行度的进程单独管理和单独守护,进程之间通过queue通信,从而实现cpu和io的充分利用,具体而言:
[0041]
将输入source、输出sink持久化到外部存储,并通过kafka削峰填谷;
[0042]
通过细分变量将n
×
n降维成m
×n×
n的相似度计算问题,将用于解决该相似度计算问题的上述的simblock算法外部化为微服务集群,分配足够多的并行度,以实现超高并发响应,同时,通过redis缓存微服务集群存储原文和相似度结果以支持超高并发读写。
[0043]
与传统的相似度算法相比,本发明具有如下优点:
[0044]
1.simblock算法在理论上能减少字符串有序信息的丢失,针对短程的局域有序而设计。
[0045]
2.simblock算法能给出两个字符串之间的相似度打分,跟两个字符串的长度不敏感,可以表示逻辑包含关系。
[0046]
3.simblock算法能给出相似子字符串的位置和一一对应关系。
[0047]
4.simblock算法适用分布式计算技术架构在大数据文本相似度计算场景下,能提高系统整体稳定性和调度性能。
附图说明
[0048]
图1示意了相似度算法能实现文本聚类的功能,在排重、推荐、搜索、栏目、过滤、热点发现等场景有广泛应用;
[0049]
图2示意了传统相似度算法“字符交集”、google-simhash“字符串向量化余弦”的特点、优点和缺点,以及本专利算法改进方向;
[0050]
图3示意了将每个字符向量化之后,可以建构两个字符串之间相关系数矩阵,形如一个个分块矩阵拼接而成,大分块保留,小分块过滤;
[0051]
图4示意了相关系数矩阵卷积前(a)和卷积后(b)的结果,对卷积后的结果的每一行或每一列求最大值max,可以得到相关子字符串的信号,并记录其谷值dip、峰值peak的大小和位置position;
[0052]
图5示意了两个真实字符串的相关系数矩阵(a),以及卷积后的相关系数矩阵(b)其信号和噪音分离的结果(c);
[0053]
图6示意了两个真实字符串应用simblock算法计算相似度结果,相似子字符串的位置和一一对应关系;
[0054]
图7示意了大数据文本排重场景下应用本专利的simblock算法,推荐搭建的分布式计算技术架构;
具体实施方式
[0055]
下面结合具体实施例,进一步阐述本发明。应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本技术所附权利要求书所限定的范围。
[0056]
本实施例公开了一种能实现高质量文本相似度计算的simblock算法(相似分块矩阵算法),在字符串向量化和余弦计算相似度的基础上,补充字符串的局域有序信息,具体包括以下步骤:
[0057]
将待比较的字符串一及待比较的字符串二转化为每个字符向量的有序堆叠,则有:
[0058][0059][0060]
式(1.1)中,表示字符串一向量化之后得到的矩阵;表示字符串一中的第i个字符one-hot向量化之后得到的归一化向量;
[0061]
式(1.2)中,表示字符串二向量化之后得到的矩阵;表示字符串二中的第j个字符one-hot向量化之后得到的归一化向量。
[0062]
one-hot向量化是指向量维度为字典长度,下标等于字符索引的元素为1,其余元素为0的向量。本实施例选用one-hot向量化并不是唯一选择,如果需要考虑字符更深层次的语义,可以用其他向量化技术,譬如:word2vec、主题向量、embedding。
[0063]
对于与长度相同的情况,传统的度规张量为单位矩阵(即g
ij
=δ
ij
,对角元为1、非对角元为0,基矢之间互相正交,对角元和非对角元有本质的区别);对于与长度不一定相同的情况,并且考虑到字符位置具有平移对称性,对角元和非对角元没有本质区别,不应该区别对待。定义度规张量为全1矩阵(即g
ij
=1),则与的余弦可以表示成如下广义形式:
[0064][0065]
式(2)中,:为双点积,即:为双点积,即表示字符串一与字符串二的相关系数矩阵。式(2)中,转换表达方式的目的是为了引出对于中第i行第j列元素有如图4.a所示。将对所有矩阵元素的求和表示为∑a
ij
。∑a
ij
也可以近似地等于中各个大元素非0的分块矩阵(下面简称:分块矩阵)的求和,即有如图3所示:
[0066][0067]
式(3)中,每个分块矩阵代表两个字符串序列之间的相似部分,因为相同字符向量化之后余弦为1不相同字符向量化之后余弦为0把中元素接近全0(稀疏)的矩阵简化掉之后,剩下元素非全0(稠密)的矩阵。分块矩阵越大,字符串一与字符串二中相似的子字符串越长。每个分块矩阵的第一个元素和最后一个元素,分别对应一个子字符串的开头和结尾,其索引下标分别对应相似子字符串在字符串一与字符串二中的位置,如图3、图4.b所示;
[0068]
直接对公式(3)求和会包含大量噪音,噪音的累加不能忽略不计,因为两个字符串可能会有大量单字符或者超短字符组合是相同的。本发明希望能提取具有一定长度的字符组合。为了能有效提取分块矩阵的信息,对矩阵进行3
×
3卷积操作得到如图4.a、图4.b所示:
[0069][0070]
式(4)中,b
ij
表示中第i行第j列元素。依照下标先行i、后列j,判断的3
×
3子方阵求和是否大于1:如果是,则计算的3
×
3子方阵中的最大值赋值给b
ij
;如果否,则b
ij
不做任何改变。的初始值是全0矩阵,上述卷积一次即可,无需重复卷积。卷积后的结果会使得的信号和噪音容易分离,如图5.a、图5.b所示。把每一行和每一列的最大值max和位置position计算出来,可以更加直观地观察到信号和噪音的区别。
[0071]
约定3
×
3子方阵计算卷积,这是前文所述的短程局域有序概念,意味着限定了3个字符以内的微修改也会认为是相似,超过3个字距离的修改会打断分块矩阵的界定,被认为是两个不同分块矩阵。除了3以外,也可以选取其他颗粒度,譬如:5、7、9

甚至更加更大的奇数正整数,这是对长程有序的考虑。
[0072]
把所有的增长信号(增长信号是指如图5.c所示的曲线所有锯齿状增长沿)的谷值
和峰值的大小(max
dip
,max
peak
)和位置(position
dip
,position
peak
)记录下来,通过位置信息(position
dip
,position
peak
)可以确定子字符串的位置,通过大小max
peak
和字符交集检验,可以确认子字符串之间的一一对应关系。如图4.b、如图5.c所示。
[0073]
如图5.c所示,max
peak
≈3n
b-2近似正比于分块矩阵的大小nb(行数或者列数的最大值)。
[0074]
与的余弦可以近似为:
[0075][0076]
其中,lu为字符串一的长度,lv为字符串二的长度,nb为第b个分块矩阵的大小(行数或者列数的最大值)。本发明取的上界作为相似度的输出结果:
[0077][0078]
由此定义的相似度similarity的含义是清晰明了的,相似子字符串的总长度在字符串一和字符串二孰短的长度占比。特别是当similarity=100%时,意味着一个字符串对另一个字符串实现全包含/覆盖。
[0079]
本发明提供的simblock算法保留局域有序的信息,给出相似度结果跟文本长度不敏感,可以识别字符串之间的复杂包含关系,给出子字符串的位置和一一对应关系。如图6所示。
[0080]
相似度计算是一个n
×
n的问题(n为文章总数)。为了有效降低计算量,需要用前置细分变量召回后,再计算相似度(本发明使用细分变量是股票标签、发布时间段,这里假设被打上不同股票标签的文章不相似,不同时间段的文章不相似,细分变量还可以用其他变量,譬如:媒体名字、栏目分类,只要细分变量能对数据集有效地分区,不同分区之间的文本两两不相似即可)。细分变量把n
×
n问题降维成m
×n×
n的问题(m为分区数,n为分区之后,每个分区的文章总数)。
[0081]
本实施例还公开了一种上述simblock算法的分布式计算技术架构的实现方法,适用于大规模文本相似度计算(文本数量级在10万以上),所述分布式计算技术架构包括输入source、计算trans.和输出sink三个部分,包括以下步骤:
[0082]
把输入source、计算trans.和输出sink通过多个并行度的进程单独管理和单独守护,进程之间通过queue通信,从而实现cpu和io的充分利用,如图7所示,具体而言:
[0083]
将输入source、输出sink持久化到外部存储,并通过kafka削峰填谷;
[0084]
即使通过细分变量将n
×
n降维成m
×n×
n的问题,相似度计算依然是“计算密集型”的应用,将相似度算法外部化为微服务集群,分配足够多的并行度,以实现超高并发响应;
[0085]m×n×
n的相似度计算还涉及到相同维度次数的原文和结果的读写,即相似度计算还是一个“计算密集型”的应用,通过redis缓存微服务集群存储原文和相似度结果以支持超高并发读写。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1