文本相似度简述
前言
在自然语言处理的学习和研究中,有好多问题涉及到如何检测两个文本的相似度问题,尤其是在度量句子或者短语之间的相似度。测算度量文本相似度的方法大体有三种:基于关键词匹配的传统方法、基于向量空间的方法和利用深度学习进行文本相似度检测的方法。随着近些年深度学习学科的发展,文本相似度的方法逐渐从基于关键词匹配的传统方法转变为深度学习,且结合向量空间和深度学习进行文本相似度检测。
文本相似度算法
基于关键词匹配
基于关键词匹配方法具有代表性的有:N-gram 相似度与Jaccard 相似度
N-Gram相似度
使用N-Gram相似度进行文本相似度匹配是一种模糊匹配方式,关键在于通过两个长的很像的句子之间的差异来度量相似度。
N-Gram相似度计算具体指假设有一个字符串,那么字符串的N-Gram表示为按照长度N切分这个字符串原句得到词段(词段即原句中所有长度为N的子串)。设想如果有两个字符串,然后分别求它们的N-Gram,那么就可以从它们的共有子串的数量这个角度去定义两个字符串间的N-Gram距离。通过N-Gram距离来判断这两个句子的相似程度。即: S i m i l a r i t y = ∣ G N ( S ) ∣ + ∣ G N ( T ) ∣ − 2 × ∣ G N ( S ) ∩ G N ( T ) ∣ Similarity=|G_N(S)| + |G_N(T)|-2 × |G_N(S)\cap G_N(T)| Similarity=∣GN(S)∣+∣GN(T)∣−2×∣GN(S)∩GN(T)∣ 其中, G N ( S ) G_N(S) GN(S)和 G N ( T ) G_N(T) GN(T) 分别表示字符串S和T的N-Gram集合,当 S i m i l a r i t y Similarity Similarity 值越低时,两字符串越相似。
N-Gram忽略了两个字符串长度差异可能导致的问题。比如字符串 girl 和 girlfriend,二者所拥有的公共子串数量显然与 girl 和其自身所拥有的公共子串数量相等,但是并不能据此认为 girl 和girlfriend 是两个等同的匹配。
Jaccard相似度
jaccard index又称为jaccard similarity coefficient。主要用于比较有限样本集之间的相似性和差异性。
原理:计算两个句子之间词集合的交集和并集的比值。该值越大,表示两个句子越相似,在涉及大规模并行运算的时候,该方法在效率上有一定的优势,公式如下: J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ = ∣ A ∩ B ∣ ∣ A ∣ + ∣ B ∣ − ∣ A ∩ B ∣ 0 ⩽ J ( A , B )