文字相似度判定

2021-09-23 06:41:56 字數 2814 閱讀 2701

針對文字相似判定,本文提供余弦相似度和simhash兩種演算法,並根據實際專案遇到的一些問題,給出相應的解決方法。經過實際測試表明:余弦相似度演算法適合於短文本,而simhash演算法適合於長文字,並且能應用於大資料環境中。

原理餘弦定理:

圖-1 餘弦定理圖示

性質:余弦值的範圍在[-1,1]之間,值越趨近於1,代表兩個向量的方向越趨近於0°,他們的方向更加一致,相應的相似度也越高。需要指出的是,在文字相似度判定中,因為文字特徵向量定義的特殊性,其餘弦值範圍為[0,1],即向量夾角越趨向於90°,則兩向量越不相似。

向量空間模型

vsm(vector space model)把對文字內容的處理簡化為向量空間中的向量運算。

概念:1)文件(d):泛指文件或文件片段,一般表徵一篇文件。

2)詞彙(t):文字內容特徵的基本語言單位,包含字、詞、片語或短語。

3)權重(w):表徵詞彙t的權重,在文件d中的重要程度。

權重:目前表徵乙個字詞在乙個文字集或者語料庫中某篇文字中的重要程度的統計方法為tf-idf(term frequency–inverse document frequency),詞彙的重要性隨著它在檔案**現的次數成正比增加,但同時會隨著它在語料庫**現的頻率成反比下降,詳細內容在此不贅述。但是本文在實際專案中面臨的問題是,文字集是變動的,而且變化速率比較快,因此並不適用於採用tf-idf方法。本文採用非常簡單直觀的方法,即以詞頻來表徵該詞彙在文字中的重要程度(即權重)。

向量對齊:

text1: 我/是/中國人/

text2: 我們/是/中國人/

vector: 我/是/中國人/我們/

vector1 = (1, 1, 1, 0)

vector2 = (0, 1, 1, 1)

上述「/」為採用ik分詞,智慧型切分後的間隔符,則歸併後的向量如vector所示,對齊後的向量分別為vector1 和vector2。之後則根據兩向量的余弦值確定相似度。

文字特例

由於在實際專案中,本文發現了2個特例,並相應給出了解決方案。

1)長句包含短句(無需完全包含):

text1:「貫徹強軍目標出實招用實勁 努力開創部隊建設新局面」

text2:「在接見駐浙部隊領導幹部時強調 貫徹強軍目標出實招用實勁 努力開創部隊建設新局面」

上述兩個文字為網路上實際的網頁標題,若簡單以余弦相似度來判定,其誤判率是比較高的。本文解決方案為:若長句長度(中文切分後以詞彙為單位表徵,並非以字元為單位)為短句的1.5倍,則針對長句選定短句長度的文字內容逐個與短句進行相似度判定,直至長句結束,若中間達到預設的閾值,則跳出該迴圈,否則判定文字不相似。

2)文字中存在同義表述

text1:「台灣居民明日起持台胞證可通關 無需辦理簽注」

text2:「明起台胞來京無需辦理簽注 電子台胞證年內實施」

上述兩個文字中「台胞」和「台灣居民」,「明日起」和「明起」為同義表述,可以理解為近義詞,但不完全為近義詞範疇。本文解決方案為引入同義詞詞典,鑑於中文詞彙的豐富性,其能在一定程度上緩解,仍然不是根本解決之法。

應用場景及優缺點

本文目前將該演算法應用於網頁標題合併和標題聚類中,目前仍在嘗試應用於其它場景中。

優點:計算結果準確,適合對短文本進行處理。

缺點:需要逐個進行向量化,並進行余弦計算,比較消耗cpu處理時間,因此不適合長文字,如網頁正文、文件等。

余弦相似度演算法源程式:

備註:同義詞詞典「synonyms.dict」檔案較大,完全可以自己構建,在此就不贅述了。

simhash為google處理海量網頁的採用的文字相似判定方法。該方法的主要目的是降維,即將高維的特徵向量對映成f-bit的指紋,通過比較兩篇文件指紋的漢明距離來表徵文件重複或相似性。

過程該演算法設計十分精巧,主要過程如下:

1.  文件特徵量化為向量;

2.  計算特徵詞彙雜湊值,並輔以權重進行量化;

3.  針對f-bit指紋,按位進行疊加運算;

4.  針對疊加後的指紋,若對應位為正,則標記為1,否則標記為0。

備註:此處f-bit指紋,可以根據應用需求,定製為16位、32位、64位或者其它位數等。

如圖-2所示,為simhash作者charikar在**中的圖示,本文結合實際專案解釋如下:doc表徵一篇文字,feature為該文字經過中文分詞後的詞彙組合,按列向量組織,weight為對應詞彙在文字中的詞頻,之後經過某種雜湊計算得出雜湊值,見圖中1和0的組合,剩餘部分不再贅述。需要指出,charikar在**中並未指定需要採用哪種雜湊函式,本文作者認為,只要雜湊計算值能夠均衡化、分散化,雜湊函式可以根據實際應用場景進行設計,本文在實際的專案中自行設計雜湊函式,雖未經過完全驗證,但是測試結果表明,該函式當前能夠滿足需求。

圖-2 simhash處理過程

漢明距離

漢明距離應用於資料傳輸差錯控制編碼,它表示兩個(相同長度)字對應位不同的數量。鑑於simhash最後計算出的指紋採用0和1進行組織,故而用其來衡量文件相似性或者重複性,該部分詳細內容在此不再贅述。

應用場景與優缺點

本文目前將該演算法應用於話題發現和內容聚合等場景中,同時也在嘗試其它應用場景。

優點:文字處理速率快,計算後的指紋能夠儲存於資料庫,因此對海量文字相似判定非常適合。

缺點:由於短文本的用於雜湊計算的資料來源較少,因此短文本相似度識別率低。

simhash演算法源程式:

備註:源程式中「131313」只是作者挑選的乙個較大的素數而已,不代表特別含義,該數字可以根據需求進行設定。

文字相似度

這種相似度計算方式相對簡單,原理也易於理解,就是計算單詞集合之間的交集和並集大小的比例,該值越大,表示兩個文字越相似。在涉及到大規模平行計算時,該方法效率上有一定的優勢。jaccard 相似度公式 舉例 句子a 我喜歡看電視,不喜歡看電影。句子b 我不喜歡看電視,也不喜歡看電影。分詞去噪後 a 我,...

計算文字相似度 文字相似度演算法之 simhash

文字相似度演算法種類繁多,今天先介紹一種常見的網頁去重演算法simhash。1 什麼是simhash 2 simhash步驟 人工智慧,1 大資料,2 科技,3 網際網路,4 機器學習,5 人工智慧 00101 大資料 11001 科技 00110 網際網路 10101 機器學習 01011 has...

計算文字相似度

計算文字相似度 推薦2收藏 簡單講解 文字相似度計算在資訊檢索 資料探勘 機器翻譯 文件複製檢測等領域有著廣泛的應用。比如 控制,我們假設你開發了乙個微博 並且已經把世界上罵人的句子都已經收錄進了資料庫,那麼當乙個使用者發微博時會先跟罵人句子的資料庫進行比較,如果符合裡面的句子就不讓使用者發出。通常...