文本挖掘之 文本相似度判定

转载:

简介

针对文本相似判定,本文提供余弦相似度和SimHash两种算法,并根据实际项目遇到的一些问题,给出相应的解决方法。经过实际测试表明:余弦相似度算法适合于短文本,而SimHash算法适合于长文本,并且能应用于大数据环境中。

余弦相似度

原理

余弦定理:

                  

图-1 余弦定理图示

性质:

余弦值的范围在[-1,1]之间,值越趋近于1,代表两个向量的方向越趋近于0°,他们的方向更加一致,相应的相似度也越高。需要指出的是,在文本相似度判定中,因为文本特征向量定义的特殊性,其余弦值范围为[0,1],即向量夹角越趋向于90°,则两向量越不相似。

向量空间模型

VSM(Vector Space Model)把对文本内容的处理简化为向量空间中的向量运算。

概念:

1)文档(D):泛指文档或文档片段,一般表征一篇文档。

2)词汇(T):文本内容特征的基本语言单位,包含字、词、词组或短语。

3)权重(W):表征词汇T的权重,在文档D中的重要程度。

权重:

目前表征一个字词在一个文本集或者语料库中某篇文本中的重要程度的统计方法为TF-IDF(term frequency–inverse document frequency),词汇的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降,详细内容在此不赘述。但是本文在实际项目中面临的问题是,文本集是变动的,而且变化速率比较快,因此并不适用于采用TF-IDF方法。本文采用非常简单直观的方法,即以词频来表征该词汇在文本中的重要程度(即权重)。

向量对齐:

由于在实际应用中,表征文本特征的两个向量的长度是不同的,因此必然需要对上述向量进行处理。目前存在两种方法:1)剔除掉向量中不重要的词汇,从而使得两个向量长度保持一致,目前主要依靠经验设定一些关键词来处理,但是其准确率不可保证;2)归并向量,并根据原向量是否在新向量(归并后的向量)存在,若存在则以该词汇的词频来表征,若不存在则该节点置为0,示例如下:

Text1: 我/是/中国人/

Text2: 我们/是/中国人/

Vector: 我/是/中国人/我们/

Vector1 = (1, 1, 1, 0)

Vector2 = (0, 1, 1, 1)

上述“/”为采用IK分词,智能切分后的间隔符,则归并后的向量如Vector所示,对齐后的向量分别为Vector1 和Vector2。之后则根据两向量的余弦值确定相似度。

文本特例

由于在实际项目中,本文发现了2个特例,并相应给出了解决方案。

1)长句包含短句(无需完全包含):

Text1:“贯彻强军目标出实招用实劲 努力开创部队建设新局面”

Text2:“在接见驻浙部队领导干部时强调 贯彻强军目标出实招用实劲 努力开创部队建设新局面”

上述两个文本为网络上实际的网页标题,若简单以余弦相似度来判定,其误判率是比较高的。本文解决方案为:若长句长度(中文切分后以词汇为单位表征,并非以字符为单位)为短句的1.5倍,则针对长句选定短句长度的文本内容逐个与短句进行相似度判定,直至长句结束,若中间达到预设的阈值,则跳出该循环,否则判定文本不相似。

2)文本中存在同义表述

Text1:“台湾居民明日起持台胞证可通关 无需办理签注”

Text2:“明起台胞来京无需办理签注 电子台胞证年内实施”

上述两个文本中“台胞”和“台湾居民”,“明日起”和“明起”为同义表述,可以理解为近义词,但不完全为近义词范畴。本文解决方案为引入同义词词典,鉴于中文词汇的丰富性,其能在一定程度上缓解,仍然不是根本解决之法。

应用场景及优缺点

本文目前将该算法应用于网页标题合并和标题聚类中,目前仍在尝试应用于其它场景中。

优点:计算结果准确,适合对短文本进行处理。

缺点:需要逐个进行向量化,并进行余弦计算,比较消耗CPU处理时间,因此不适合长文本,如网页正文、文档等。

  余弦相似度算法源程序:

 Class Element

 Class TextCosine

  备注:同义词词典“synonyms.dict”文件较大,完全可以自己构建,在此就不赘述了。

SimHash

SimHash为Google处理海量网页的采用的文本相似判定方法。该方法的主要目的是降维,即将高维的特征向量映射成f-bit的指纹,通过比较两篇文档指纹的汉明距离来表征文档重复或相似性。

过程

该算法设计十分精巧,主要过程如下:

1.  文档特征量化为向量;

2.  计算特征词汇哈希值,并辅以权重进行量化;

3.  针对f-bit指纹,按位进行叠加运算;

4.  针对叠加后的指纹,若对应位为正,则标记为1,否则标记为0。

  备注:此处f-bit指纹,可以根据应用需求,定制为16位、32位、64位或者其它位数等。

如图-2所示,为SimHash作者Charikar在论文中的图示,本文结合实际项目解释如下:Doc表征一篇文本,feature为该文本经过中文分词后的词汇组合,按列向量组织,weight为对应词汇在文本中的词频,之后经过某种哈希计算得出哈希值,见图中1和0的组合,剩余部分不再赘述。需要指出,Charikar在论文中并未指定需要采用哪种哈希函数,本文作者认为,只要哈希计算值能够均衡化、分散化,哈希函数可以根据实际应用场景进行设计,本文在实际的项目中自行设计哈希函数,虽未经过完全验证,但是测试结果表明,该函数当前能够满足需求。

图-2 SimHash处理过程

汉明距离

汉明距离应用于数据传输差错控制编码,它表示两个(相同长度)字对应位不同的数量。鉴于SimHash最后计算出的指纹采用0和1进行组织,故而用其来衡量文档相似性或者重复性,该部分详细内容在此不再赘述。

应用场景与优缺点

本文目前将该算法应用于话题发现和内容聚合等场景中,同时也在尝试其它应用场景。

优点:文本处理速率快,计算后的指纹能够存储于数据库,因此对海量文本相似判定非常适合。

缺点:由于短文本的用于哈希计算的数据源较少,因此短文本相似度识别率低。

  SimHash算法源程序:

 Class TermDict

 Class SimHash

  备注:源程序中“131313”只是作者挑选的一个较大的素数而已,不代表特别含义,该数字可以根据需求进行设定。



  作者:志青云集
  出处:http://www.cnblogs.com/lyssym/p/4880896.html
  

原文地址:https://www.cnblogs.com/nucdy/p/9059880.html

时间: 2024-11-07 21:27:05

文本挖掘之 文本相似度判定的相关文章

文本相似度判定

刘 勇   Email:[email protected] 简介 针对文本相似判定,本文提供余弦相似度和SimHash两种算法,并根据实际项目遇到的一些问题,给出相应的解决方法.经过实际测试表明:余弦相似度算法适合于短文本,而SimHash算法适合于长文本,并且能应用于大数据环境中. 余弦相似度 原理 余弦定理:                   图-1 余弦定理图示 性质: 余弦值的范围在[-1,1]之间,值越趋近于1,代表两个向量的方向越趋近于0°,他们的方向更加一致,相应的相似度也越高.

文本挖掘之文本聚类(MapReduce)

刘 勇  Email:[email protected] 简介 针对大数量的文本数据,采用单线程处理时,一方面消耗较长处理时间,另一方面对大量数据的I/O操作也会消耗较长处理时间,同时对内存空间的消耗也是很大,因此,本文引入MapReduce计算模型,以分布式方式处理文本数据,以期提高数据处理速率.本文结合Kmeans和DBSCAN算法,对上述算法进行改进,其中借鉴Kmeans聚类方法(类别个数的确定性)以及DBSCAN聚类方法(基于密度),并在数据处理过程中引入多个Reducer对数据进行归并

文本挖掘之文本聚类(OPTICS)

刘 勇  Email:[email protected] 简介 鉴于DBSCAN算法对输入参数,领域半径E和阈值M比较敏感,在参数调优时比较麻烦,因此本文对另一种基于密度的聚类算法OPTICS(Ordering Points To Identify the Clustering Structure)展开研究,其为DBSCAN的改进算法,与DBSCAN相比,该算法对输入参数不敏感.OPTICS算法不显示地生成数据聚类,其只是对数据对象集合中的对象进行排序,获取一个有序的对象列表,其中包含了足够的信

文本挖掘之文本聚类(DBSCAN)

刘勇   Email:[email protected] 简介 鉴于基于划分的文本聚类方法只能识别球形的聚类,因此本文对基于密度的文本聚类算法展开研究.DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种典型的基于密度的聚类方法,可以找出形状不规则的聚类,而且聚类时无需事先知道聚类的个数.  基本概念 DBSCAN算法中有两个核心参数:Eps和MinPts(文献与程序中经常使用).前者定义为邻域半径,后者定义

文本挖掘之文本聚类(借力打力)

刘勇    Email:[email protected] 简介 在文本相似度判定中,作者将该算法用于文本聚类中,其核心思想通过比较两个文本向量中元素的相似度,即向量中所含的元素相似个数越多,则两个向量越相似,继而上述文本越相似.作者在短文本相似判定中采用了余弦相似度该算法来实现,本文借鉴数学集合取交集,借用现有组件来实现上述算法功能,继而减少工作量,也具备便捷性,也能取得较好的效果. 数学集合 该方法的思想为:先将文本数据采用中文切分,将其切分为词汇(词组.短语.词汇的统称,本文不做细粒度划分

转:文本相似度算法

文本相似度算法 原文出自:http://www.cnblogs.com/liangxiaxu/archive/2012/05/05/2484972.html 1.信息检索中的重要发明TF-IDF 1.1TF Term frequency即关键词词频,是指一篇文章中关键词出现的频率,比如在一篇M个词的文章中有N个该关键词,则 (公式1.1-1) 为该关键词在这篇文章中的词频. 1.2IDF Inverse document frequency指逆向文本频率,是用于衡量关键词权重的指数,由公式 (公

基于word分词提供的文本相似度算法来实现通用的网页相似度检测

实现代码:基于word分词提供的文本相似度算法来实现通用的网页相似度检测 运行结果: 检查的博文数:128 1.检查博文:192本软件著作用词分析(五)用词最复杂99级,相似度分值:Simple=0.968589 Cosine=0.955598 EditDistance=0.916884 EuclideanDistance=0.00825 ManhattanDistance=0.001209 Jaccard=0.859838 JaroDistance=0.824469 JaroWinklerDi

文本相似度计算基本方法小结

在计算文本相似项发现方面,有以下一些可参考的方法.这些概念和方法会帮助我们开拓思路. 相似度计算方面 Jaccard相似度:集合之间的Jaccard相似度等于交集大小与并集大小的比例.适合的应用包括文档文本相似度以及顾客购物习惯的相似度计算等. Shingling:k-shingle是指文档中连续出现的任意k个字符.如果将文档表示成其k-shingle集合,那么就可以基于集合之间的 Jaccard相似度来计算文档之间的文本相似度.有时,将shingle哈希成更短的位串非常有用,可以基于这些哈希值

.NET下文本相似度算法余弦定理和SimHash浅析及应用

在数据采集及大数据处理的时候,数据排重.相似度计算是很重要的一个环节,由此引入相似度计算算法.常用的方法有几种:最长公共子串(基于词条空间).最长公共子序列(基于权值空间.词条空间).最少编辑距离法(基于词条空间).汉明距离(基于权值空间).余弦值(基于权值空间)等,今天我们着重介绍最后两种方式. 余弦相似性 原理:首先我们先把两段文本分词,列出来所有单词,其次我们计算每个词语的词频,最后把词语转换为向量,这样我们就只需要计算两个向量的相似程度. 我们简单表述如下 文本1:我/爱/北京/天安门/