在自然语言处理过程中,经常会涉及到如何度量两个文本相似度问题,在如对话系统(Dialog system)和信息检索(Information retrieval)等问题中,如何度量句子或短语之间的相似度显得尤为重要。
这里主要对传统方法,词向量,深度学习方法总结。
度量文本相似度方法主要有以下三种:
- 基于关键词匹配的传统方法。如:N-gram相似度
- 将文本映射到向量空间,再利用一些基本的相似度算法(如:余弦相似度)计算向量之间的大小值。
- 深度学习方法,如基于卷积神经网络的ConvNet. Siamese LSTM.
1. 基于关键词匹配
1.1 N-gram 相似度
基于N-gram模型模糊定义的句子相似度是一种模糊匹配方式,通过两个长的相似的句子间的差异性来衡量相似度。
N-Gram相似度的计算是指按长度N切分原句得到词段,
N-Gram 模型基于这样一种假设,第n个词的出现只与前面n-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。在拼写检查里即是一个字母的出现概率只和前n-1个字母的出现概率相关,并且是前n-1个字母出现概率的乘积。
应用:
- 基于N-Gram模型定义的字符串距离
- 利用N-Gram模型评估语句是否合理
- 使用N-gram模型时的数据平滑算法
基于N-gram模型定义的字符串距离
在自然语言处理中,最常用也最基础的一个操作就是“模式匹配”, 又叫"字符串查找”。其又分为精确匹配和模糊匹配。
-
精确匹配:比如我们要统计一篇文章中关键词 “information” 出现的次数,这时所使用的方法就是精确的模式匹配。这类算法比如:KMP算法、BM算法和BMH算法等等。
-
模糊匹配: 基于N-Gram模型定义的句子(字符串)相似度.主要通过两个句子之间的差异性来描述其相似度。
N-Gram相似度的计算是按指定长度N(滑动窗口N)移动切分句子得到词段,即句中所有长度为N的字符串。对两个句子S和T,通过他们共有的子串判断他们的相似度。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)\bigcap G_N(T)| Similarity=∣GN(S)∣+∣GN(T)∣−2∗∣GN(S)⋂GN(T)∣
其中, GN(S)和GN(T)分别表示字符串S和T中N-Gram的集合,N一般取2或3。字符串距离越近,它们就越相似,当两个字符串完全相等时,距离为0。
结合上面的公式,即可算得两个字符串之间的距离是8 + 9 − 2 × 4 = 9。显然,字符串之间的距离越小,它们就越接近。当两个字符串完全相等的时候,它们之间的距离就是0。
1.2 Jaccard相似度
原理: 两个句子之间的交集与并集比值。该值越大说明相似度越高,在大规模计算时有一定的优势。
$J(A,B)= \frac {|A \cap B|}{|A \cup B|} $
其中,$0<J(A,B)<1$
基于向量空间
关于如何表达词意目前有三种方法,
- 第一种代表WordNet,其提供一种词的分类资源,但是缺少词之间的细微区别。并且很计算词之间的相似度。