張俊飛
(廣州醫(yī)科大學(xué)基礎(chǔ)學(xué)院,廣州 511436)
改進(jìn)TF-IDF結(jié)合余弦定理計(jì)算中文語句相似度
張俊飛
(廣州醫(yī)科大學(xué)基礎(chǔ)學(xué)院,廣州 511436)
提出一種改進(jìn)TF-IDF結(jié)合余弦定理計(jì)算中文語句相似度方法。首先采用IKAnalyzer分詞器對中文語句分詞處理,提取核心關(guān)鍵詞,然后通過計(jì)算句子關(guān)鍵詞詞頻和權(quán)重形成的TF-IDF向量組,結(jié)合余弦定理實(shí)現(xiàn)中文句子相似度計(jì)算。改進(jìn)后的TF-IDF計(jì)算方法采用《同義詞詞林》詞典實(shí)現(xiàn)對關(guān)鍵詞及其同義詞詞頻統(tǒng)計(jì),并通過Lucene技術(shù)實(shí)現(xiàn)關(guān)鍵詞權(quán)重快速計(jì)算。改進(jìn)后的中文句子相似度算法不僅考慮句子中關(guān)鍵詞的物理特征,還對關(guān)鍵詞的語義特征進(jìn)行相似度計(jì)算,提高中文句子相似度計(jì)算的準(zhǔn)確性。
TF-IDF;余弦定理;同義詞詞林;Lucene
中文語句相似度計(jì)算是自然語言處理領(lǐng)域重要的一個方面。在智能答疑[1]、信息檢索[2]、機(jī)器翻譯[3]等領(lǐng)域都有很好的應(yīng)用。隨著信息技術(shù)的發(fā)展,當(dāng)前中文句子相似度的計(jì)算算法研究很多,總體來說可以分為兩大類:①基于表層特征的相似度計(jì)算方法,如基于詞物理特征的統(tǒng)計(jì)方法、字面匹配方法等;②基于語義層面的相似度計(jì)算,如語義知識、句子結(jié)構(gòu)等特征的分析[4]。
余弦定理是計(jì)算句子相似度的一個很好的方法,屬于基于表征相似度計(jì)算,通過對句子關(guān)鍵詞特征值組成向量進(jìn)行余弦求解,按照值的大小說明句子相似度問題。本文在吸收傳統(tǒng)的余弦定理相似度計(jì)算算法基礎(chǔ)上,引入了語義層面相似度計(jì)算,通過改進(jìn)關(guān)鍵詞特征值構(gòu)成的向量,實(shí)現(xiàn)對句子相似度計(jì)算更加精準(zhǔn)。本文主要工作包括:①在計(jì)算詞頻(Term Frequency,簡稱TF)算法中,融合了基于《同義詞詞林》詞典的詞語相似度計(jì)算算法,利用詞的距離計(jì)算詞的相似性,很好的解決了同義詞、近義詞等問題,從而使得關(guān)鍵詞特征值更能體現(xiàn)關(guān)鍵詞的屬性,構(gòu)成的向量更加符合實(shí)際情況,提高計(jì)算的準(zhǔn)確性。②詞的權(quán)重(Inverse Document Frequency,簡稱IDF)計(jì)算,以數(shù)據(jù)庫中錄入的相關(guān)問題為語料庫,采用Lucene技術(shù)對語料庫創(chuàng)建索引,快速查詢關(guān)鍵詞索引,從而計(jì)算出每一個關(guān)鍵詞的IDF值。模擬智能問答,驗(yàn)證改進(jìn)算法的優(yōu)越性。
中文分詞就是把一個漢字字符串序列分割成若干個詞語序列。中文語句分詞是計(jì)算句子相似度的基礎(chǔ)工作。目前主流的分詞算法可以分為三類:①依照詞典的機(jī)械分詞,用已存在的語料詞典和中文語句匹配,分割語句為若干詞語。②統(tǒng)計(jì)分詞,這是一種無詞典中文分詞法。其實(shí)現(xiàn)原理為:在語料庫中出現(xiàn)次數(shù)越多的漢字或者詞組則被認(rèn)為是詞語的概率越大。然而可能忽視掉不常用的詞語,并且此種分詞法在時間和空間上的復(fù)雜度較高。③知識推理分詞,其原理為:把特定領(lǐng)域的語料資源和分詞工作在結(jié)構(gòu)上實(shí)現(xiàn)松耦合,通過邏輯推理實(shí)現(xiàn)中文分詞效果。該方法應(yīng)該是最為復(fù)雜和困難的,實(shí)現(xiàn)起來很麻煩。
基于關(guān)鍵詞特征語句相似度計(jì)算[5],是對兩個語句進(jìn)行去停用詞、中文分詞得到的關(guān)鍵詞進(jìn)行空間向量相似度計(jì)算。通過對兩個語句關(guān)鍵詞特征值形成的空間向量進(jìn)行向量夾角余弦值求解,計(jì)算相似度值,值越大,越相似。TF-IDF結(jié)合余弦相似性計(jì)算語句相似度實(shí)現(xiàn)原理如下。
①求出兩個句子S1和S2有效關(guān)鍵詞去重后,組成數(shù)組 V=(X1,X2,…,Xn)。
②計(jì)算S1和S2兩個句子的詞頻向量V1={ω1,ω2,…,ωn},V2={ξ1,ξ2,…,ξn}。其中ωi(1≤i≤n)為關(guān)鍵詞組Xn在S1中出現(xiàn)的次數(shù)TF與IDF的乘積;ξi(1≤i≤n)為關(guān)鍵詞組Xn在S1中出現(xiàn)的次數(shù)TF與IDF的乘積。TF和IDF算法如下:
詞頻(TF)=某個詞在文章中的出現(xiàn)次數(shù)
③采用余弦相似性算法計(jì)算V1和V2相似度值。
通過TF-IDF結(jié)合余弦相似性算法計(jì)算出S1和S2兩個語句的相似度值,但是此種方法沒有考慮句子關(guān)鍵詞的語義信息,如同義詞、近義詞的相似度。
詞語的語義分析是基于語義詞典的計(jì)算,比較常用的中文語義詞典有HowNet知識庫和《同義詞詞林》,英語常用的語料詞典是WordNet。本研究用到了基于同義詞詞林的語義相似度計(jì)算,以下詳細(xì)介紹其算法原理。
《同義詞詞林》是在1983年由梅家駒等人編寫的,詞典包含有詞語的同義詞、同類詞。本研究采用了哈工大信息檢索實(shí)驗(yàn)室對詞林詞典更新后的擴(kuò)展版,詞表包含77343條詞語。
同義詞詞典采用五層的層級體系,逐層詞語逐漸增多,描述的詞義越來越具體,直到第5層。第1層用大寫英文字母表示;第2層用小寫英文字母表示;第3層用二位十進(jìn)制整數(shù)表示;第4層用大寫英文字母表示;第5層用二位十進(jìn)制整數(shù)表示。例如:Cb02A 01=東南西北四方;Cb06E 09@民間;Ba01B 10#導(dǎo)體半導(dǎo)體超導(dǎo)體。
表1 哈工大擴(kuò)展版編碼規(guī)則表
基于詞林詞典計(jì)算詞語相似度算法是對兩個詞語的距離進(jìn)行計(jì)算,距離越大,其相似度越低[6]。中文的詞語有很多義項(xiàng),同一個詞可能含有多個義項(xiàng),因此被歸類到不同的層級中。在計(jì)算兩個詞語義項(xiàng)相似度時,要分別計(jì)算取最大值為兩個詞語的相似度值。相似度計(jì)算方法為層級相同則乘1,否則乘以系數(shù)ξ(0≤ξ≤1),然后再乘以調(diào)節(jié)系數(shù) cos(n*π )(n為層級的180節(jié)點(diǎn)總數(shù))。詞語在詞典樹中的分支多少也直接影響到了義項(xiàng)的相似度,因此還需要再乘以(n-k+1)/n,其中n為層級節(jié)點(diǎn)總數(shù),k兩個分支之間的距離。當(dāng)兩個義項(xiàng)在詞典同一行內(nèi)編號相同時,如果尾號為“=”則相似度為 1;尾號為“#”,則相似度為系數(shù)e;尾號為“@”,則表示該詞沒有同義詞或同類詞。本研究中設(shè)置各個層級系數(shù)按照田久樂[7]設(shè)定的值:當(dāng)兩個義項(xiàng)第一層分支不同時,設(shè)置兩個詞相似度f=0.1;當(dāng)兩個義項(xiàng)第一層分支相同時,分別設(shè)為第二層ξ=0.65,第三層ξ=0.8,第四層ξ=0.9,第五層ξ=0.96,系數(shù) e=0.5。
中文語句相似度的計(jì)算其實(shí)就是語句包含的關(guān)鍵詞詞語特性值相似度計(jì)算。語句分詞效果影響到句子相似度計(jì)算的準(zhǔn)確性,語句分詞是相似度計(jì)算的基礎(chǔ)。本研究采用IKAnalyzer2012FF_u1開發(fā)包實(shí)現(xiàn)中文語句分詞。
IK2012通過配置文件IKAnalyzer.cfg.xml實(shí)現(xiàn)對外部停用詞詞典和擴(kuò)展分詞詞典的加載,從而實(shí)現(xiàn)分詞過程中剔除停用詞和增加擴(kuò)展詞典的分詞。在PC測試系統(tǒng)環(huán)境下,IK2012的分詞效果如下表1所示。PC測試系統(tǒng)環(huán)境為:Core2 i7 3.4GHz雙核,4G內(nèi)存,64位Windows 7系統(tǒng),64位Sun JDK 1.6_29。
表2IK2012分詞效果表
為了實(shí)現(xiàn)快速檢索,Lucene采用倒排索引的數(shù)據(jù)結(jié)構(gòu)。倒排索引是根據(jù)屬性值查找記錄數(shù)據(jù),每個屬性包含該屬性歸屬的記錄數(shù)據(jù)地址。通常認(rèn)為單詞是文檔的組成部分,反轉(zhuǎn)認(rèn)為文檔是依附單詞存在,這樣的索引就稱作倒排,由屬性值查找記錄數(shù)據(jù)的位置因而稱為倒排索引。倒排索引以文檔形式存儲,形成倒排文檔。
Lucene的索引結(jié)構(gòu)可以分為索引(index)、索引段(segment)、索引文檔(document)、索引域(field)和索引項(xiàng)(term)五個層次。五個層次之間是具有包含關(guān)系的,每個索引由一個或者多個索引段組成,每個段包含一個或者多個索引文檔,每個文檔又管理一個或者多個索引域,每個域由一個或多個索引項(xiàng)構(gòu)成,而每個索引項(xiàng)就是一個索引數(shù)據(jù)。Lucene5.2.1生成的索引文檔類型如表3所示。
表3 索引文檔類型
改進(jìn)后的算法優(yōu)化實(shí)現(xiàn)主要體現(xiàn)在兩點(diǎn):TF運(yùn)算中加入了詞語語義分析;IDF運(yùn)算采用了Lucene技術(shù)實(shí)現(xiàn)。為了闡述改進(jìn)TF-IDF結(jié)合余弦定理中文語句相似度計(jì)算算法,舉例中文語句A和B相似度計(jì)算中A的空間向量V1的算法實(shí)現(xiàn)。
算法2中文語句A和B相似度計(jì)算中求解A的空間向量V1
輸入:中文語句A、B
輸出:A的空間向量V1
1 String[]A'←IK2012(A);
2 String[]B'←IK2012(B);
3 String[]C'←A'∪B';
4 For i=0 to Length[C']do
5 TFi←C'[i]在 A'中的個數(shù);
6 If TFi=0 then
7 TFi←C'[i]在 A'中相似度最大 A'[j]的個數(shù),其中0≤j≤Length[A'];
8 Similarity←Sim(A'[j],C'[i]);
9 TFi←TFi*Similarity;
10End
11 If TFi<0.5 then
12 TFi←0;
13End
14 IDFi←Lucene(C'[i]);
15 V1.add(TFi*IDFi);
算法步驟解釋如下:
①采用IKAnalyzer分詞器實(shí)現(xiàn)對A、B的分詞,并分別賦給數(shù)組 A'、B',并求出 A'和 B'并集 C'。
②遍歷數(shù)組A',統(tǒng)計(jì)C'[i]個數(shù),并賦值給TFi。
③如果C'[i]不存在A'中,求出C'[i]與A'數(shù)組相似度值最大值元素A'[j]個數(shù),并賦值TFi;相似度值賦給變量Similarity;TFi與Similarity的乘積再賦給TFi。
④如果TFi值小于0.5,則TFi賦值0。
⑤求出C'[i]在語料庫中的IDFi值。
⑥TFi與IDFi的乘積即為空間向量V1的一個元素。
模擬智能問題答疑功能模塊實(shí)現(xiàn)對改進(jìn)的相似度算法驗(yàn)證。
選取互聯(lián)網(wǎng)中20道計(jì)算機(jī)基礎(chǔ)知識問答題,并錄入到SQL Server數(shù)據(jù)庫中作為相似度計(jì)算的語料。問題如表4所示。
表4 語料庫
利用Lucene對20道問題創(chuàng)建索引,然后分別采用傳統(tǒng)TF-IDF和改進(jìn)TF-IDF結(jié)合余弦定理相似度算法對提出的問題和問題庫中的每個問題求相似度,然后對相似度值進(jìn)行排序。傳統(tǒng)的TF-IDF算法中,TF算法不涉及關(guān)鍵詞語義的計(jì)算,單是物理詞頻的統(tǒng)計(jì)。兩種算法都采用Lucene技術(shù)實(shí)現(xiàn)IDF計(jì)算和余弦定理算法求相似度值。為了驗(yàn)證改進(jìn)后算法的計(jì)算效果,針對20道問題進(jìn)行大量人工判斷,統(tǒng)計(jì)出人工排序結(jié)果作為參考。
實(shí)驗(yàn)采用以“電腦的組成部分,常見應(yīng)用有哪些?”為檢索問題,相似度計(jì)算結(jié)果如下所示。
從圖3可以看出,改進(jìn)算法排序和人工排序曲線基本一致,傳統(tǒng)算法排序曲線與人工排序曲線重合度比較低。這說明改進(jìn)算法更加符合實(shí)際情況,更接近人的認(rèn)知水平。
圖3 三種排序結(jié)果圖
從兩種算法計(jì)算出相似度值對比圖4中可以看出,兩種算法計(jì)算出的結(jié)果是有差異的,且改進(jìn)后的相似度計(jì)算結(jié)果普遍高于傳統(tǒng)算法。傳統(tǒng)算法實(shí)驗(yàn)沒有考慮“計(jì)算機(jī)”、“電腦”等同義詞、同類詞,導(dǎo)致關(guān)鍵詞構(gòu)成的TF-IDF空間向量不同,問題相似度計(jì)算結(jié)果不同,排序也發(fā)生了變化。
圖4 兩種算法計(jì)算結(jié)果對比圖
本文通過改進(jìn)IF-IDF算法,結(jié)合余弦定理,充分利用詞語在詞林中的語義距離計(jì)算,使得句子相似度更為準(zhǔn)確,符合實(shí)際情況。從實(shí)驗(yàn)數(shù)據(jù)可知,傳統(tǒng)的TFIDF與余弦定理結(jié)合算法,沒有對詞的語義知識考慮,單純的統(tǒng)計(jì)關(guān)鍵詞物理特征值,求得句子相似度值,與實(shí)際情況不符,準(zhǔn)確性相比改進(jìn)后的算法不高。
[1]康文寧,楊志強(qiáng).相似度計(jì)算在智能答疑系統(tǒng)中的研究及應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,02:71-74.
[2]王莉軍.海量數(shù)據(jù)下的文本信息檢索算法仿真分析[J].計(jì)算機(jī)仿真,2016,04:429-432.
[3]李茂西,徐凡,王明文.機(jī)器譯文自動評價中基于IHMM的近義詞匹配方法研究[J].中文信息學(xué)報,2016,04:117-123.
[4]翟繼友.一種混合型的句子語義相似度計(jì)算方法[J].科學(xué)技術(shù)與工程,2014,28:81-85.
[5]駱正清,陳增武,胡上序.一種改進(jìn)的MM分詞方法的算法設(shè)計(jì)[J].中文信息學(xué)報,1996,03:30-36.
[6]李杰,曹謝東,余飛.基于語義相似度計(jì)算的詞匯語義自動分類系統(tǒng)[J].計(jì)算機(jī)仿真,2008,08:295-299+307.
[7]田久樂,趙蔚.基于同義詞詞林的詞語相似度計(jì)算方法[J].吉林大學(xué)學(xué)報(信息科學(xué)版),2010,06:602-608.
Words Similarity Algorithm Based on Improved TF-IDF and Cosine Theorem
ZHANG Jun-fei
(Guangzhou Medical University,Guangzhou 511436)
Puts forward a Chinese sentence similarity computing method based on improved TF-IDF and Cosine Theorem.Firstly,extracts keywords by Chinese word segmentation processing,secondly,calculates space vector which based on TF and IDF.Then,combines cosine theorem to calculate words similarity.The improved TF-IDF calculation method adopts the synonym dictionary to calculate key words and synonym word frequency statistics,and through the Lucene techniques to calculate the IDF of key words fast.The improved Chinese sentence similarity algorithm not only considers physical characteristics of keywords,but also semantic characteristics,which improves the accuracy of the Chinese sentence similarity calculation.
TF-IDF;Cosine Theorem;Tongyici Cilin;Lucene
廣州醫(yī)科大學(xué)教育科學(xué)規(guī)劃課題(No.L159208)、廣州市教育局市屬高校教育教學(xué)改革項(xiàng)目(No.B17035003)
1007-1423(2017)32-0020-05
10.3969/j.issn.1007-1423.2017.32.005
張俊飛,助理實(shí)驗(yàn)師,碩士,研究方向?yàn)橹形男畔⑻幚?/p>
2017-07-11
2017-10-25