计算文本间相似度的方法和装置
技术领域
本发明涉及计算机文本信息处理领域,尤其涉及一种计算文本间相似度的方法和装置。
背景技术
文本相似度计算技术是计算机文档处理中经常使用的方法,常用在文档分类、聚类、文档检索相关性等应用中,用来比较两个文档的相似度。随着计算机对文本信息等各种自然语言处理应用的普及,人们需要一个有效且准确的方法来计算两个文本或句子之间的文本相似度,即计算机文本相似度计算方法。
按处理的文档长度可以将文档分为两类:长文档与短文本。一般的,长文档是指词个数达到几十或更长的一篇文档,例如网页新闻报告、使用说明书等;短文本是指词个数在20以内的短的文档,例如用户提出的查询、新闻快讯、一条微博等。尤其,短文本相似度的计算具有十分重要的作用,它的应用能极大地提高系统自动问答的精度。
现有技术中,文本相似度计算方法通过对文本用其词频向量表示,然后计算词频向量间的距离得到文本相似度。然而,现有技术方案通常只考虑到两个文本间相同的词与其词权重,但由于语言的灵活性,经常发生多个语句意义相同的情况,仅考虑相同词会忽略近义词、同义词和同一个意思不同说法等因素的影响,因此,相似度计算容易出现计算失真。
发明内容
本发明的实施例所要解决的技术问题在于提供一种计算文本间相似度的方法和装置,能够准确计算文本间的相似度。
为解决上述技术问题,本发明的实施例采用如下技术方案:
一种计算文本间相似度的方法,包括:
根据归一化模板对待分析的第一文本和第二文本进行归一化处理,以使意义相同的词语或词组统一为同一个词语或词组;
查询归一化后的所述第一文本和第二文本位于同一个近义词聚类中的近义词,并获取所述近义词的语义相似度;
获取所述第一文本和第二文本中各个词语或词组的权重;
根据所述近义词的语义相似度、所述权重和预设的语义相似度模型,计算所述第一文本和第二文本的相似度。
一种计算文本间相似度的装置,包括:
归一化单元,用于根据归一化模板对待分析的第一文本和第二文本进行归一化处理,以使意义相同的词语或词组统一为同一个词语或词组;
语义相似度获取单元,用于查询归一化后的所述第一文本和第二文本位于同一个近义词聚类中的近义词,并获取所述近义词的语义相似度;
权重获取单元,用于获取所述第一文本和第二文本中各个词语或词组的权重;
相似度计算单元,用于根据所述近义词的语义相似度、所述权重和预设的语义相似度模型,计算所述第一文本和第二文本的相似度。
本实施例的计算文本间相似度的方法和装置,首先通过将待分析的第一文本和第二文本进行归一化处理,以使意义相同的词语或词组统一为同一个词语或词组,并将拆分后的词语或词组分别映射到归一化模板中,避免了现有技术仅比较字面相似度,不能解决因相同意思不同表达而导致误判的问题,大大减小了因匹配的二义性而造成的错误率,此外,本发明通过近义词聚类来获取近义词的语义相似度,所得到的数据更为准确,并且在计算文本间的语义相似度时,不受文本长短的限制,适用范围广,准确度高。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中的计算文本间相似度的方法的流程示意图;
图2为本发明实施例中归一化处理的流程示意图;
图3为本发明实施例中计算文本间相似度的装置的示意图;
图4为本发明实施例中归一化单元的示意图;
图5为本发明实施例中不同的语义块的示意图之一;
图6为本发明实施例中不同的语义块的示意图之二。
具体实施方式
本发明实施例提供一种计算文本间相似度的方法和装置,能够准确计算文本间的相似度。
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透切理解本发明。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
本实施例提供一种计算文本间相似度的方法,如图1所示,该方法包括:
步骤101、根据归一化模板对待分析的第一文本和第二文本进行归一化处理,以使意义相同的词语或词组统一为同一个词语或词组。
本实施例中,文本的归一化是指当待分析的文本中的词语匹配上任何一个模版中的“源词语或词组”时,将该词语或词组映射到“标准化的词语或词组”,后续的分析和模型计算均在归一化后的文本上进行。
在实际的语言表达中,由于语言的灵活性,具有同一个意义的不同表达方式非常之多,例如“从北京到天津怎么走”与“从北京到天津的路线”表达的是同一个意思。类似的还有“圣诞节是几月几号”与“圣诞节是哪天”等。本实施例中采用基于模版匹配的技术来将不同的表述归一化。具体的,常用的归一化模板可以由人工收集和验证,归一化模板尽可能涵盖各种常用语的组合,将其归一化到书面语格式。
示例性的,归一化模板格式如下:
表1
源词语或词组 |
标准化的词语或词组 |
{A}到{B}怎么走 |
{A}到{B}的路线 |
{A}多少钱 |
{A}的价格 |
{A}是何时 |
{A}是什么时间 |
{A}是什么时候 |
{A}是什么时间 |
{A}是哪天 |
{A}是什么时间 |
{A}是几月几号 |
{A}是什么时间 |
进一步的,如图2所示,步骤101具体包括以下步骤:
步骤1011、将所述第一文本和第二文本拆分为若干个词语或词组。
由于归一化模版的匹配是以词语或词组为粒度的,因此,需要首先将第一文本和第二文本拆分为若干个词语或词组,以减小匹配的二义性而造成的错误率。
以第一文本“圣诞节是几月几号”与第二文本“圣诞节是哪天”为例,第一文本可拆分为“圣诞节/是几月几号”;第二文本可拆分为“圣诞节/是哪天”。
步骤1012、将拆分后的词语或词组分别映射到所述归一化模板中,得到相对应的词语或词组。
示例性的,第一文本“圣诞节/是几月几号”与第二文本“圣诞节/是哪天”,通过匹配归一化模板,“是几月几号”和“是哪天”均映射到“是什么时间”上,因此,可以将第一文本转换为“圣诞节是什么时间”,将第二文本转换为“圣诞节是什么时间”。通过上述步骤,意义相同的词语或词组统一为同一个词语或词组。
步骤102、查询归一化后的所述第一文本和第二文本位于同一个近义词聚类中的近义词,并获取所述近义词的语义相似度。
在完成归一化后,需要找出第一文本与第二文本中的近义词,进而获得该近义词的语义相似度。本实施例采用近义词聚类的方法来查找近义词。近义词聚类是指将所有意义相近的词聚成一类,例如“高兴”、“愉快”、“愉悦”这些词都可以表示“高兴”的意思,因此当两个文本中包含同一近义词聚类中的词对时,该词对一定程度上表示了语义的相似度,例如“和你合作很愉快”与“和你合作很愉悦”。
可选的,近义词聚类的数据源,可来自同义词词典或近义词词典,本实施例中,称同义词词典或近义词词典为原始词典。
下面就如何获得近义词聚类做详细介绍。
首先将词典中的所有同义词近义词对之间的相似度初始化为1,例如,当词典中存在近义词对<si,sj>时,定义simi,j=1。
定义词对之间的相似度之后,再定义两个聚类Cm和Cn之间的相似度为:
其中simi,j表示两个近义词si和sj之间的相似度。本实施例中,同一个近义词聚类中的词语互为近义词,不同近义词聚类的词语之间的语义相似度为0,完全相同的两个词语之间的语义相似度为1。
示例性的,近义词聚类的生成可以采用层次聚类方法,该方法具体包括以下步骤:
步骤a:扫描原始词典,将所有相似度为1的近义词对分别聚成一个聚类,每个聚类有两个词语或词组;
步骤b:根据类间相似度定义公式1,查找类间相似度simm,n最大的两个聚类,并将其合并成一个新的聚类;
步骤c:判断是否达到终止条件,如果已经达到终止条件,则结束近义词聚类进程;如果没有,则返回步骤b继续聚类。终止条件可以是某一固定的迭代次数,或者聚类间的相似度均小于第一阈值,或者类的个数小于第二阈值等。
聚类完毕后,为每个近义词聚类分配一个ID,定义近义词聚类中两个词s
i和s
j之间在某一条路径
上产生的相似度为:
其中γ为每一步产生的衰减系数,且满足0<γ<1。
定义每个近义词聚类中两个词si和sj的相似度如下:
1.当词对si和sj出现在原始词典中时,定义simi,j=1;
2.当si和sj不在原始词典中,但位于同一近义词聚类中时,定义si和sj之间的相似度为si和sj的所有可达路径的相似度的最大值,公式为:
示例性的,近义词聚类的表示如下:
表2
由于两个近义词si和sj之间的相似度是对称的,因此simi,j=simj,i。
步骤103、获取第一文本和第二文本中各个词语或词组的权重。
具体的,本实施例中,获取权重的方法可以从现有的权重值数据库中查询得到。可选的,权重的获取方法可以由公式计算得到,具体的计算方法如下:
首先定义词t在所有文档中的逆向文档频率IDF(inverse document frequency)为:
IDF与所有文档中词t出现的文档数|{d'∈D|t∈d'}|有关,|{d'∈D|t∈d'}|越多idft越低,说明t越不重要,反之说明t越重要。
文档中每个词对应的词权重:
其中tft,d是词t在文档d中的频次(term frequency),即t在d中出现的次数。
示例性的,经过步骤102的查询,第一文本“现在/最好/的/手机”与第二文本“哪里/卖/目前/最好/的/手机”中,“现在”和“目前”为近义词,且同属于聚类ID为1025的近义词聚类,两个词语之间的相似度为0.625,“现在”在第一文本中的权重为0.0842,“目前”在第二文本中的权重为0.1104。
两个文本中所有词语或词组对应的结果如下:
步骤104、根据所述近义词的语义相似度、所述权重和预设的语义相似度模型,计算所述第一文本和第二文本的相似度。
预设的语义相似度模型,即预定的计算第一文本和第二文本的相似度的方法。示例性的,本实施例中,第一文本dm和第二文本dn间相似度公式具体描述为:
其中,<s
i,s
j>∈C表示有两个近义词<s
i,s
j>属于近义词聚类C,sim
i,j为两个所述近义词之间的语义相似度,w
i∈d
m∩d
n表示所述第一文本和第二文本之间完全相同的词语,w
i∈d
m,
w
i∈d
n,
表示第一文本和第二文本之间完全不相同的词语。上述公式的分子表示第一文本d
m和第二文本d
n之间语义相同和相近部分的权重,分母表示第一文本d
m和第二文本d
n之间的语义总权重,即:
相同词的权重(A)+近义词的权重(仅近义,B)+近义词的权重(非近义,C)+不同词的权重(D)
考虑到近义词对<si,sj>之间的关系,短文本dm和dn间相似度公式4可以等价地表示为:
不同的语义块(A,B,C,D)用图形表示如图5所示。
其中两个圆的相交部分表示语义相同和相近词的权重,其他部分表示语义不同的词权重。
例如“现在/最好/的/手机”和“哪里/买/目前/最好/的/手机”这两个短文本,表示如图6所示。
本实施例的计算文本间相似度的方法,首先通过将待分析的第一文本和第二文本进行归一化处理,以使意义相同的词语或词组统一为同一个词语或词组,并将拆分后的词语或词组分别映射到归一化模板中,避免了普通方法仅比较字面相似度,不能解决“相同意思不同说法”导致误判的问题,也大大减小了因匹配的二义性而造成的错误率,此外,本发明通过近义词聚类来获取近义词的语义相似度,所得到的数据更为准确,并且在计算文本间的语义相似度时,不受文本长短的限制,适用范围广,准确度高。
与上述方法实施例相对应的,如图3所示,本实施例还提供一种计算文本间相似度的装置,包括:
归一化单元1,用于根据归一化模板对待分析的第一文本和第二文本进行归一化处理,以使意义相同的词语或词组统一为同一个词语或词组;
语义相似度获取单元2,用于查询归一化后的所述第一文本和第二文本位于同一个近义词聚类中的近义词,并获取所述近义词的语义相似度;
权重获取单元3,用于获取所述第一文本和第二文本中各个词语或词组的权重;
相似度计算单元4,用于根据所述近义词的语义相似度、所述权重和预设的语义相似度模型,计算所述第一文本和第二文本的相似度。
进一步的,如图4所示,所述归一化单元1具体包括:
拆分模块11,用于将所述第一文本和第二文本拆分为若干个词语或词组;
映射模块12,用于将拆分后的词语或词组分别映射到所述归一化模板中,得到相对应的词语或词组。
进一步的,同一个所述近义词聚类中的词语互为近义词,不同所述近义词聚类的词语之间的语义相似度为0,完全相同的两个词语之间的语义相似度为1。
进一步的,所述语义相似度模型具体为:
其中,<si,sj>∈C表示有两个近义词<si,sj>属于近义词聚类C,simi,j为两个所述近义词之间的语义相似度,wi∈dm∩dn表示所述第一文本和第二文本之间完全相同的词语。
本实施例的计算文本间相似度的装置,首先通过归一化模块将待分析的第一文本和第二文本进行归一化处理,以使意义相同的词语或词组统一为同一个词语或词组,并将拆分后的词语或词组分别映射到归一化模板中,避免了普通方法仅比较字面相似度,不能解决“相同意思不同说法”导致误判的问题,也大大减小了因匹配的二义性而造成的错误率,此外,本发明通过近义词聚类来获取近义词的语义相似度,所得到的数据更为准确,并且在计算文本间的语义相似度时,不受文本长短的限制,适用范围广,准确度高。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。