文本类似度计算_01

近期准备整理一下天然语言处理方面用到的技术,以前工做都是按照工做需求来走,对用到的技术算法也没有作一下系统性的总体,因此近期准备系统性的整理一下天然语言处理相关的内容。初步构想涉及6个方面的问题。git

  • 文本类似度的计算
  • 文本关键词提取
  • 文本分类
  • 情感分析
  • 文本主题提取
  • 命名实体识别

经常使用的文本类似度的计算方式主要分为基于字符串的与基于语料库的方式。本篇先来讨论一下经常使用的基于字符串的类似度计算方法。github

基于字符串的文本类似度计算方法以下:
该方法从字符串匹配的角度出发,以字符串共现和重复程度为类似度衡量的标准。根据计算细粒度不一样,能够将方法分为基于字符的方法和基于词语的方法。一类方法单纯从字符串或词语的组成考虑类似度算法,如编辑距离,汉明距离,余弦类似度,Dice系数,欧式距离;另外一类方法还加入了字符串顺序,即字符组成和字符顺序相同是字符串类似的必要条件,如最长公共子串,Jaro-Winkler,再一类方法是采用集合的思想,将字符串看做由词语构成的集合,词语共现可用集合的交集计算,如Jaccard。算法

  • 基于字符spa

    • 编辑距离(Levenshtein)
    • 汉明距离
    • LCS
    • Jaro-Winkler
  • 基于词语ip

    • 余弦类似度
    • Dice系数
    • 欧式距离
    • Jaccard
    • simhash+汉明距离
    • minhash
  • 基于语料库字符串

    • VSM
    • LSA
    • PLSA
    • LDA

下面针对每个计算方式来逐一介绍。string

编辑距离

Levenshtein距离是一种计算两个字符串间的差别程度的字符串度量(string metric)。咱们能够认为Levenshtein距离就是从一个字符串修改到另外一个字符串时,其中编辑单个字符(好比修改、插入、删除)所须要的最少次数。俄罗斯科学家Vladimir Levenshtein于1965年提出了这一律念。
简单的例子:
从字符串“kitten”修改成字符串“sitting”只需3次单字符编辑操做,以下:hash

sitten ( k -> s )
sittin ( e -> i )
sitting ( _ -> g )it

所以“kitten”和“sitting”的Levenshtein距离为3。class

汉明距离

在信息理论中,Hamming Distance 表示两个等长字符串在对应位置上不一样字符的数目,咱们以d(x, y)表示字符串x和y之间的汉明距离。从另一个方面看,汉明距离度量了经过替换字符的方式将字符串x变成y所须要的最小的替换次数。也就是x与y取异或的过程。
简单的例子:

"karolin" and "kathrin" is 3
"1011101" and "1001001" is 2

汉明距离的计算是要两个字符串的长度等长,对应位置查找不一样的字符便可。

LCS(最长公共子序列)

两个字符串的最长公共子序列(LCS)是指这两个字符串中最长的有相同顺序的子序列。
举例说明一下,"Hello World" 和 "Bonjour le monde" 的 LCS 是 "oorld"。若是从左到右依次扫过字符串,你会发现 o、 o、 r 、l、 d 在两个字符串中出现的顺序是同样的。
其余的子序列为 "ed" 和 "old",可是它们都比 "oorld" 要短。
注意:不要和最长公共字符串混淆了,后者必须是两个字符串的子字符串,也就是字符是直接相邻的。
但对公共序列来讲,字符之间并非连续,可是它们必须有相同的顺序。
计算两个字符串 a 和 b 的 LCS 方法之一是经过动态规划和回溯法。

Jaro-Winkler

Jaro-Winkler Distance是一个度量两个字符序列之间的编辑距离的字符串度量标准,是由William E. Winkler在1990年提出的Jaro Distance度量标准的一种变体。Jaro Distance是两个单词之间由一个转换为另外一个所需的单字符转换的最小数量。Jaro-Winkler Distance经过前缀因子使Jaro Distance相同时共同前缀长度越大的类似度越高。Jaro–Winkler Distance越小,两个字符串越类似。若是分数是0,则表示彻底不一样,分数为1则表示彻底匹配。
下面为Jaro类似度的计算方式:

clipboard.png

Jaro-Winkler只是在Jaro的基础上,为前缀因子增长了权重而已。

clipboard.png

简单的例子:

clipboard.png

文中提到的算法的相关代码,稍后会在github中更新。

相关文章
相关标签/搜索