A Survey Of Text Similarity Approach
(本文翻译自上述文献)
- 方法分为四种string-based,corpus-based,knowledge-based,Hybrid Similarity Measure
Introduction:
lexical similarity: string-based
semantic similarity: corpus-based, knowledge-based
String-based
- character-based
-
longest common substring. 连续最长公共子串
-
Damerau-Levenshtein: 编辑距离
-
Jaro: 以公共字符的数量和顺序为基础,主要运用在Record Linkage( Record linkage (RL) refers to the task of finding records in a data set that refer to the same entity across different data sources (e.g., data files, books, websites, databases)
J a r o D i s t a n c e 给 定 两 个 字 符 串 S 1 , S 2 , 二 者 之 间 的 J a r o D i s t a n c e 由 下 面 公 式 给 出 : d j = 1 3 ( m ∣ S 1 ∣ + m ∣ S 2 ∣ + m − t m ) 其 中 m 表 示 两 个 字 符 串 匹 配 的 字 符 数 目 ( 不 考 虑 顺 序 , A 中 的 字 符 只 要 出 现 在 B 中 , 就 认 为 匹 配 。 t 代 表 需 要 不 同 顺 序 匹 配 字 符 数 的 一 半 。 例 如 m a r t h a 和 m a r h t a , m = 6 , t = 2 / 2 = 1 ) \begin{aligned}&Jaro\quad Distance\\ &给定两个字符串S_1,S_2,二者之间的Jaro Distance由下面公式给出:\\ &d_j = \frac{1}{3}(\frac{m}{|S_1|}+\frac{m}{|S_2|}+\frac{m-t}{m})\\ &其中m表示两个字符串匹配的字符数目(不考虑顺序,A中的字符只要出现在B\\&中,就认为匹配。t代表需要不同顺序匹配字符数的一半。例如martha和marhta\\&,m=6,t=2/2=1) \end{aligned} JaroDistance给定两个字符串S1,S2,二者之间的JaroDistance由下面公式给出:dj=31(∣S1∣m+∣S2∣m+mm−t)其中m表示两个字符串匹配的字符数目(不考虑顺序,A中的字符只要出现在B中,就认为匹配。t代表需要不同顺序匹配字符数的一半。例如martha和marhta,m=6,t=2/2=1) -
Jaro-Winkler:Jaro距离的扩展,其基本思想是如果两个字符串的起始部位匹配,则应该给与更高的分数。
d w = d j + ( l p ( 1 − d j ) ) l 代 表 前 缀 相 同 的 长 度 , 规 定 最 大 为 4 , p 是 一 个 用 于 调 整 的 常 数 , 一 般 设 置 为 0.1. \begin{aligned} &d_w = d_j + (lp(1-d_j))\\ &l代表前缀相同的长度,规定最大为4,p是一个用于调整的常数,一般设置为0.1. \end{aligned} dw=dj+(lp(1−dj))l代表前缀相同的长度,规定最大为4,p是一个用于调整的常数,一般设置为0.1. -
Needleman-Wunsch: 一个动态规划算法,适用于具有相似长度的两个序列,其两个序列的内容也比较相似。目的:得到两个序列的全部序列匹配。
假 设 对 比 的 两 个 序 列 为 A 和 B , l c s ( i , j ) 代 表 ( a 1 a 2 . . a i , b 1 b 2 . . b j ) 的 最 长 公 共 子 串 H i j = m a x { l c s ( i − 1 , j − 1 ) + 1 i f a i = b j m a x ( l c s ( i − 1 , j − 1 ) , l c s ( i − 1 , j ) , l c s ( i , j − 1 ) ) i f a i ≠ b j \begin{aligned} &假设对比的两个序列为A和B,lcs(i,j)代表(a_1a_2..a_i,b_1b_2..b_j)的最长公共子串\\ &H_{ij}=max\left\{ \begin{aligned} &lcs(i-1,j-1)+1\quad if a_i=b_j\\ &max(lcs(i-1,j-1),lcs(i-1,j),lcs(i,j-1))\quad if a_i\neq b_j \end{aligned} \right. \end{aligned} 假设对比的两个序列为A和B,lcs(i,j)代表(a1a2..ai,b1b2..bj)的最长公共子串Hij=max{lcs(i−1,j−1)+1ifai=bjmax(lcs(i−1,j−1),lcs(i−1,j),lcs(i,j−1))ifai=bj
然后开始回溯,方法同6一样。不在赘述。
-
Simith-waterman: 局部序列对齐,找出两个序列中具有高相似度的片段
假 设 对 比 的 两 个 序 列 为 A 和 B , s ( a , b ) 表 示 字 符 a 和 字 符 b 的 相 似 分 数 , H 代 表 匹 配 分 数 矩 阵 , W 1 表 示 空 位 罚 分 。 H i j = m a x { H i − 1 , j − 1 + s ( A i , B j ) H i − 1 , j − W 1 H i , j − 1 − W 1 0 s ( a i , b j ) = { 3 i f a i = b j − 3 i f a i ≠ b j \begin{aligned} &假设对比的两个序列为A和B,s(a,b)表示字符a和字符b的相似分数,H代表\\&匹配分数矩阵,W_1表示空位罚分。\\ &H_{ij}=max\left\{ \begin{aligned} &H_{i-1,j-1}+s(A_i,B_j)\\&H_{i-1,j}-W_1\\&H_{i,j-1}-W_1\\&0 \end{aligned} \right. &s(a_i,b_j)=\left\{ \begin{aligned} &3\quad if a_i=bj\\&-3\quad ifa_i\neq b_j \end{aligned} \right. \end{aligned} 假设对比的两个序列为A和B,s(a,b)表示字符a和字符b的相似分数,H代表匹配分数矩阵,W1表示空位罚分。Hij=max⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧Hi−1,j−1+s(Ai,Bj)Hi−1,j−W1Hi,j−1−W10s(ai,bj)={3ifai=bj−3ifai=bj
得到矩阵后,对H矩阵进行回溯,从H矩阵中最大的数开始回溯。根据回溯路径写出匹配字符串。若回溯到左上角,则将 a i 和 b j a_i和b_j ai和bj添加到 A o 和 B o A_o和B_o Ao和Bo中;若回顾到左边,则将 “ _ ” “\_” “_”添加到 A o A_o Ao,将 b j b_j bj添加到 B o B_o Bo;同理,若回顾到上边,则将 “ _ ” “\_” “_”添加到 B o B_o Bo,将 a i a_i ai添加到 A o A_o Ao;
五和六两种方法的区别:五是找出全局的匹配序列,六是找出局部最匹配的序列。
- n_gram:比较两个字符串的n_gram中相似的个数(要除以总共的n-gram数目归一化)
- Term Based
- Block Distance: 也就是曼哈顿距离
- Cosine Similarity: cos相似度
- Dice’s Coefficient: 2 A ∩ B ∣ A ∣ + ∣ B ∣ 2\frac{A\cap B}{|A|+|B|} 2∣A∣+∣B∣A∩B
- Euclidean Distance:欧几里得距离
- Jaccard Similarity: A ∩ B A ∪ B \frac{A\cap B}{A\cup B} A∪BA∩B
- Matching Coefficient:
- Overlap Coefficient: 类似于Dice’s distance,不过认为子集也是匹配的
Corpus based similarity: 从大规模语料中获取语义相似度
- Hyperspace Analogue to Language (HAL): 前提:语义相似的词总是共同出现。基于共现矩阵,A[i,j]代表第i个单词和第j个单词距离的得分,距离越近,则分数越高
- LSA:隐性语义分析,也就是LSI(隐性语义索引)。其假设是语义相近的两个单词往往会出现在相同的文本片段中。利用SVD进行降维,然后利用cos相似度比较是否相似。
- Generalized Latent Semantic Analysis(GLSA): 这是LSA的扩展,不仅仅局限在term-documnet矩阵上面,也不仅仅局限在SVD降维的方法上。(应该是比较通用的LSA)
- Explicit Semantic Analysis(ESA): 矩阵的每一项代表对应term和相应文档的tf-idf值,两个term的相似度用cos来度量。
- The Cross-language explicit analysis: 将文档表示为独立于语言的向量(具体做法未知)
- Pointwise mutual information-information retrival: 测定词对之间的相似性,其基本思想是统计两个词语同时出现的概率。 P M I ( w o r d 1 , w o r d 2 ) = l o g p ( w o r d 1 & w o r d 2 ) p ( w o r d 1 ) p ( w o r d 2 ) PMI(word1,word2)=log\frac{p(word1 \&word2)}{p(word1)p(word2)} PMI(word1,word2)=logp(word1)p(word2)p(word1&word2) 。
- Second order pointwise mutual information:是PMI的扩展,其优点在于考虑词语对的邻居。如果词语对存在相同的邻居,即使两个词语没有同时出现过,则也可以测量他们的互信息。
- Normalized Google distance: 利用谷歌搜索引擎的返回网页对term的相似度进行测量。
N G D ( x , y ) = m a x ( l o g f ( x ) , l o g f ( y ) ) − l o g f ( x , y ) l o g M − m i n ( l o g f ( x ) , l o g f ( y ) ) NGD(x,y)=\frac{max(logf(x),logf(y))-logf(x,y)}{logM-min(logf(x),logf(y))} NGD(x,y)=logM−min(logf(x),logf(y))max(logf(x),logf(y))−logf(x,y)
其中M代表谷歌搜索引擎的网页池的数量,f(x)代表搜索词向x返回的网页数量。
Knowledge based similarity: 用语义网络(semantic networks)中获取的信息测量相似度。例如wordNet就是最常用的semantic wordnet,其实就是一个词典,每个词语可能对应多个语义,每个语义又可能对应多个词语。
具体方法有很多,可以参考wordNet的使用
Hybrid Similarity measures: 混合模型,将以上的模型的结果共同作为最后的结果或者参考。
义,每个语义又可能对应多个词语。
具体方法有很多,可以参考wordNet的使用