文本類似度計算_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中更新。

相關文章
相關標籤/搜索