◇中國人民大學(xué)信息學(xué)院 謝 紅
基于詞頻比的改進(jìn)Jaccard系數(shù)文本相似度計算,交集中詞的權(quán)重不是相同的,而是按照詞頻比確定權(quán)重。通過短文本實驗和長文本實驗,基于詞頻比的改進(jìn)Jaccard相似度比傳統(tǒng)Jaccard相似度更加科學(xué)合理,適合法律法規(guī)、政策文件等說明性文本的相似度計算。
文本相似度計算是指通過一定的策略比較兩個或多個實體(包括詞語、短文本、文檔)之間的相似程度,得到一個具體量化的相似度數(shù)值[1]。相似度數(shù)值用[0,1]閉區(qū)間的實數(shù)表示,數(shù)值越大,文本相似度越高。
文本相似度計算廣泛應(yīng)用在信息檢索、文本分類、文本聚類、文本查重、問答系統(tǒng)、推薦系統(tǒng)等領(lǐng)域。
目前,計算文本相似度的方法通常有四類:基于字符串(String-Based)的方法、基于語料庫(Corpus-Based)的方法、基于知識庫(Knowledge-Based)的方法和混合方法[1-4]。其中,基于字符串的方法是從字符串匹配度出發(fā),以字符串共現(xiàn)和重復(fù)程度為相似度的衡量標(biāo)準(zhǔn)[5]。在基于字符串的方法中,最基礎(chǔ)的是利用Jaccard系數(shù)計算文本相似度。
Jaccard系數(shù)用來比較樣本集合之間的相似性與差異性,是計算機(jī)領(lǐng)域中考察文本相似度時常用的一種方法[6]。
給定兩個集合A和B,當(dāng)集合A與B不同時為空集時,即A與B的并集不是空集時,Jaccard系數(shù)定義為A與B交集的大小除以A與B并集的大小,即:
當(dāng)集合A與B都是空集時,Jaccard系數(shù)定義為1。
Jaccard系數(shù)值越大,表明樣本之間相似度越高。
由于集合元素的互異性,Jaccard系數(shù)用于文本相似度計算時不考慮詞在文本中出現(xiàn)的次數(shù),即不考慮詞的頻率,交集中每個詞的權(quán)重都是相同的,例如X=|A∩B|={x1,x2,…,xn},那么每個詞xi的 權(quán)重都是1/n,設(shè)詞xi在 文本1中的出現(xiàn)的頻率是f1,在文本2中的出現(xiàn)的頻率是f2,當(dāng)f1f2或f1f2時,詞xi按照1/n權(quán)重參與文本計算相似度的計算顯然是不精確的,而采用基于詞頻比的改進(jìn)Jaccard系數(shù)文本相似度計算更加合理、準(zhǔn)確。
基于詞頻比的改進(jìn)Jaccard系數(shù)文本相似度計算的原理是,交集中詞的權(quán)重不是相同的,按照詞頻比確定權(quán)重,具體算法是:
設(shè)X=|A∩B|={x1,x2,…,xn},設(shè)詞xi在 文本1中的出現(xiàn)的頻率是f1,在文本2中的出現(xiàn)的頻率是f2,比較f1和f2的 大小,當(dāng)f1≤f2時,詞xi的 權(quán)重是f1/ f2,否則權(quán)重是f2/ f1,將交集中所有詞x1,x2,…,xn的 權(quán)重求和,最后將交集權(quán)重和除以并集元素個數(shù)作為文本相似度。
基于詞頻比的改進(jìn)Jaccard相似度顯然比Jaccard相似度更加合理,通常情況下,基于詞頻比的改進(jìn)Jaccard相似度都會小于Jaccard相似度,只有在交集為空,或者所有交集中的詞頻都是“1”的情況下,兩者相似度相等。
基于詞頻比的改進(jìn)Jaccard系數(shù)文本相似度計算的步驟主要有分詞、去停用詞、統(tǒng)計詞頻并按詞排序、計算交集中的詞頻比、計算相似度。
具體算法是:分詞前去掉空格和符號,只保留文字和數(shù)字,然后采用jieba分詞;去停用詞,去掉文本中語氣助詞、副詞、介詞、連詞等實際意義不大的詞,如“的”、“在”、“和”、“接著”等;建立字典并按詞排序,建立詞列表和詞頻列表;求出詞的交集和并集,統(tǒng)計交集個數(shù)和并集個數(shù),只保留交集列表中的詞頻,因為非交集的詞在計算相似度時的值是零,所以不必保留,這樣可以有效減少列表長度和計算時間;將進(jìn)行相似度比較的兩個文本的交集詞頻存放在兩個列表中,低詞頻存放在minList[i],高詞頻存放在maxList[i],計算對應(yīng)詞頻比minList[i]/maxList[i],將對應(yīng)詞頻比求和,即:
最后除以并集列表的長度;通過以上步驟求出基于詞頻比的改進(jìn)Jaccard系數(shù)的文本相似度。
實驗采用python 3.5編程實現(xiàn),無論是短文本實驗,還是長文本實驗,基于詞頻比的改進(jìn)Jaccard相似度都比傳統(tǒng)Jaccard相似度更加科學(xué)合理。
短文本相似度實驗可以直觀解釋基于詞頻比的改進(jìn)Jaccard系數(shù)計算文本相似度的原理。參與計算的兩個短文本分別是短文本1:爸爸愛媽媽,媽媽愛爸爸。短文本2:我愛爸爸和媽媽。停用詞表為“和”。
程序運行結(jié)果如下:
讀入的文本1為:爸爸愛媽媽,媽媽愛爸爸。
分詞后的文本1為:爸爸 愛媽媽 媽媽 愛爸爸。
去停用詞后的文本1為:爸爸 愛媽媽 媽媽 愛 爸爸。
讀入的文本2為:我愛爸爸和媽媽。
分詞后的文本2為:我愛爸爸 和媽媽。
去停用詞后的文本2為:我愛爸爸 媽媽。
文本1的列表為:['爸爸','愛','媽媽','媽媽','愛','爸爸']。
文本1的字典排序為:[('媽媽',2),('愛',2),('爸爸',2)]。
文本1的詞為:['媽媽','愛','爸爸']。
文本1的詞頻為:[2,2,2]。
文本2的列表為:['我','愛','爸爸','媽媽']。
文本2的字典排序為:[('媽媽',1),('我',1),('愛',1),('爸爸',1)]。
文本2的詞為:['媽媽','我','愛','爸爸']。
文本2的詞頻為:[1,1,1,1]。
交集列表為:['媽媽','愛','爸爸']。
并集列表為:['媽媽','我','愛','爸爸']。
交集個數(shù)為:3;并集個數(shù)為:4;Jaccard相似度為:3/4=75.00%;交集低詞頻列表為:[1,1,1];交集高詞頻列表為:[2,2,2];詞頻比為:[0.5,0.5,0.5];基于詞頻比的改進(jìn)Jaccard相似度為:1.5/ 4=37.50%。
實驗結(jié)果表明,基于詞頻比的改進(jìn)Jaccard相似度明顯比Jaccard相似度更加精確。
長文本相似度實驗采用《中華人民共和國教育法》作為測試數(shù)據(jù)。法律法規(guī)頒布以后,為了與時俱進(jìn),常常會進(jìn)行修正和修訂,比較相關(guān)法律法規(guī)的相似度有利于研究法律法規(guī)的延續(xù)性和差異性。《中華人民共和國教育法》于1995年頒布,2009年第一次修正,2015年第二次修正。經(jīng)過3次相似度對比實驗,實驗結(jié)果如下:
2009年修正的教育法對比1995年頒布的教育法:交集詞個數(shù)為:806;并集詞個數(shù)為:814;Jaccard相似度為:99.02%;基于詞頻比的改進(jìn)Jaccard相似度為:98.14%。
2015年修正的教育法對比1995年頒布的教育法:交集詞個數(shù)為:779;并集詞個數(shù)為:929;Jaccard相似度為:83.85%;基于詞頻比的改進(jìn)Jaccard相似度為:77.67%。
2015年修正的教育法對比2009年修正的教育法:交集詞個數(shù)為:778;并集詞個數(shù)為:922;Jaccard相似度為:84.38%;基于詞頻比的改進(jìn)Jaccard相似度為:78.82%。
實驗結(jié)果分析:1995頒布的教育法共有84條法條,2009修正的教育法共有83條法條,其中修改1條,刪除1條,2015修正的教育法共有86條法條,其中修改15條,增加3條。因為2009修正的教育法修改的法條非常少,2015修正的教育法修改的法條比較多,所以3次實驗結(jié)果完全符合實際情況。
基于詞頻比的改進(jìn)Jaccard系數(shù)計算文本相似度算法簡單,實現(xiàn)方便,運行高效,不需要語料庫和知識庫,適合法律法規(guī)、政策文件等說明性文本的比較。這種方法的不足之處是每個詞語都是獨立的,沒有考慮詞語之間的順序,也不包含語義信息,所以“我愛媽媽”和“媽媽愛我”的相似度是100%,“我愛媽媽”和“我愛母親”的相似度是50%,這時候的相似度計算是不準(zhǔn)確的,需要采用其他方法進(jìn)行比較。