3.8 文档句子相似度分析
搜索引擎在很多情况下都会对句子进行相似度分析,如网页标题相似度计算、新闻去重等。进行文档句子相似度分析可以采用词频统计及余弦相似性(Cosine Similarity)分析,基本思想是:两个句子或文档越相似,它们的内容(文本)也越相似。因此,可以先利用TF-IDF算法对词语进行分析,然后利用余弦相似性对词语向量大小进行计算。
3.8.1 句子相似度
如表3-28所示,给定两个句子,计算两个句子之间的相似度。
表3-28 句子相似度分析
针对表3-28中的句子,需要分步进行相似度计算,步骤如下。
(1)分词处理。对表3-28中的句子进行分词处理,移除标点符号,处理结果如表3-29所示。
表3-29 示例句子分词结果
(2)计算词频。计算分词结果的每个句子中词语的频率。对于在其他句子中存在而在本句中不存在的词语,设定词频值为0,因此对句子A、B的词频计算结果如表3-30所示。
表3-30 句子词频计算结果
(3)构建词频向量。针对句子A,产生的词频向量为[1,1,1,2,1,0];针对句子B,产生的词频向量为[1,1,1,1,1,1]。到此步,已经将问题转变为求向量的相似度问题。
(4)向量相似度计算。向量相似度可以转变为两个向量夹角的大小,如图3-19所示。如果向量夹角为0°,则表示向量的方向相同、线段重合;如果向量夹角为90°,则表示两个向量完全不相似;如果向量夹角为180°,则表示向量的方向完全相反。因此,可以通过夹角的大小来判断向量的相似度,夹角越小,相似度越高。
图3-19 向量夹角示例
对于求解两个向量之间的夹角θ,可以通过cosθ的值体现。结合图3-19, cosθ可以根据余弦定理公式求解,公式如下:
将向量a定义为[x1, y1],将向量b定义为[x2, y2],则余弦定理公式可推导为如下所示。余弦定理不仅对二维向量有效,对多维向量也适用,方法类似。
因此,根据余弦定理,计算向量[1,1,1,2,1,0]与向量[1,1,1,1,1,1]的角度,如下所示:
综上所述,向量[1,1,1,2,1,0]与向量[1,1,1,1,1,1]的cosθ值约为0.866,即可以认为句子A、B之间的相似度为86.6%。
3.8.2 文档相似度
文档相似度的计算过程与句子相似度的计算过程类似,但并不是将文档中的所有句子进行拆分,然后对句子进行相似度比较。基于3.7节中对文档关键词提取方法的介绍,对于需要比较的两篇文档,可以通过提取各自的关键词,先利用关键词进行词频统计,再利用余弦相似性进行计算。
但是如果仅仅采用关键词的方式,则只能粗略地进行相似度估算,因为其没有结合关键词出现的位置进行综合分析,因此另一种方法是采用w-shingling算法。w-shingling算法的核心思想是将两篇文档的相似性问题转变为两篇文档集合的相似性问题。w-shingling算法中的集合是文档内容中的有序序列,采用N-Gram的方式提取句子中的有序序列。如表3-31所示为给定的两篇示例文档A、B。
表3-31 文档相似度给定的示例文档
在对文档A、B去除无关标点符号之后,采用Tri-Gram(三元组)的方式分别对文档A、B提取有序序列,提取结果如表3-32所示。
表3-32 对示例文档进行Tri-Gram处理
分别对两个文档中的Tri-Gram集合过滤重复序列,得到去重后的序列结果如表3-33所示。
表3-33 对文档的Tri-Gram分词结果进行去重过滤
w-shingling算法认为两个文档的相似度为文档子集的交集个数与并集个数之比,如下公式所示:
根据公式可知,文档之间共同的有序序列越多,文档相似度越高。根据示例,r(A, B)=2/7≈0.286。w-shingling算法与关键词的不同之处在于引入了有序序列,这样的序列将文档中的词汇出现位置进行了综合考虑。如果在此处不采用N-Gram提取有序序列,而采用中文分词对文档词语进行拆分,然后对文档求交集个数与并集个数之比,则也会丢失序列关系。