文本相似度相关工作调研(一)

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
  1. longest common substring. 连续最长公共子串

  2. Damerau-Levenshtein: 编辑距离

  3. 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} JaroDistanceS1,S2,JaroDistancedj=31(S1m+S2m+mmt)m(AB,tmarthamarhtam=6t=2/2=1)

  4. 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(1dj))l4p0.1.

  5. 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} ABlcs(i,j)a1a2..ai,b1b2..bjHij=max{lcs(i1,j1)+1ifai=bjmax(lcs(i1,j1),lcs(i1,j),lcs(i,j1))ifai=bj
    然后开始回溯,方法同6一样。不在赘述。
    文本相似度相关工作调研(一)_第1张图片

  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} ABs(a,b)abHW1Hij=maxHi1,j1+s(Ai,Bj)Hi1,jW1Hi,j1W10s(ai,bj)={3ifai=bj3ifai=bj
    得到矩阵后,对H矩阵进行回溯,从H矩阵中最大的数开始回溯。根据回溯路径写出匹配字符串。若回溯到左上角,则将 a i 和 b j a_i和b_j aibj添加到 A o 和 B o A_o和B_o AoBo中;若回顾到左边,则将 “ _ ” “\_” _添加到 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

文本相似度相关工作调研(一)_第2张图片

五和六两种方法的区别:五是找出全局的匹配序列,六是找出局部最匹配的序列。

  1. n_gram:比较两个字符串的n_gram中相似的个数(要除以总共的n-gram数目归一化)

  • Term Based
  1. Block Distance: 也就是曼哈顿距离
  2. Cosine Similarity: cos相似度
  3. Dice’s Coefficient: 2 A ∩ B ∣ A ∣ + ∣ B ∣ 2\frac{A\cap B}{|A|+|B|} 2A+BAB
  4. Euclidean Distance:欧几里得距离
  5. Jaccard Similarity: A ∩ B A ∪ B \frac{A\cap B}{A\cup B} ABAB
  6. Matching Coefficient:
  7. Overlap Coefficient: 类似于Dice’s distance,不过认为子集也是匹配的

Corpus based similarity: 从大规模语料中获取语义相似度

  1. Hyperspace Analogue to Language (HAL): 前提:语义相似的词总是共同出现。基于共现矩阵,A[i,j]代表第i个单词和第j个单词距离的得分,距离越近,则分数越高
  2. LSA:隐性语义分析,也就是LSI(隐性语义索引)。其假设是语义相近的两个单词往往会出现在相同的文本片段中。利用SVD进行降维,然后利用cos相似度比较是否相似。
  3. Generalized Latent Semantic Analysis(GLSA): 这是LSA的扩展,不仅仅局限在term-documnet矩阵上面,也不仅仅局限在SVD降维的方法上。(应该是比较通用的LSA)
  4. Explicit Semantic Analysis(ESA): 矩阵的每一项代表对应term和相应文档的tf-idf值,两个term的相似度用cos来度量。
  5. The Cross-language explicit analysis: 将文档表示为独立于语言的向量(具体做法未知)
  6. 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)
  7. Second order pointwise mutual information:是PMI的扩展,其优点在于考虑词语对的邻居。如果词语对存在相同的邻居,即使两个词语没有同时出现过,则也可以测量他们的互信息。
  8. 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)=logMmin(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的使用


你可能感兴趣的:(NLP)