高順峰 張再躍
摘 要:傳統(tǒng)句子相似度算法沒有全面考慮句子結構與語義特征,影響相似度計算準確性,對此提出一種基于句法塊向量的句子相似度計算方法。該方法綜合考慮句子的語義信息與結構信息,首先構建兩句子的語義依存關系樹,然后進行一些被動轉(zhuǎn)換等操作,最后根據(jù)詞向量構建各個句法塊向量并通過余弦值計算句子相似度。在常規(guī)句子對中進行測試實驗,結果表明,綜合句子結構與語義信息可提高相似度計算準確性。一般句子相似度計算正確率達到92%,比傳統(tǒng)方法提高8%~10%。
關鍵詞:句子相似度;語義依存樹;詞向量;自然語言處理;句法結構
DOI:10. 11907/rjdk. 201048
中圖分類號:TP301文獻標識碼:A 文章編號:1672-7800(2020)010-0106-05
Abstract:Traditional sentence similarity algorithms do not fully consider the structure and semantic characteristics of sentences, which affects the accuracy of similarity calculation. In this regard, a new calculation method for sentence similarity based on syntactic block vectors is proposed. The feature of this method is to comprehensively consider the semantic and structural information of the sentence. It first constructs the semantic dependency tree of the two sentences, then performs some important operations, such as passive conversion, etc., and finally constructs each syntactic block vector and sentence vector based on the word vector sentence similarity is calculated from the cosine value. Tested in regular sentence pairs, the experimental results show that the comprehensiveness of sentence structure and semantic information can improve the accuracy of similarity calculations. For general sentence similarity calculations, the accuracy rate reaches 92%, which is 8% to 10% higher than the traditional method.
Key Words: sentence similarity; dependency syntax tree; word embedding; natural language processing; syntactic structure
0 引言
度量句子之間的相似性是自然語言處理一項基本且重要的任務,廣泛應用于信息檢索、文本聚類、問答系統(tǒng)、文本分類、機器翻譯等。句子相似度計算是這些任務中基礎且重要的步驟。近年出現(xiàn)許多句子相似度計算方法,如基于Word2Vec、GloVe、FastText或其改進版本、基于同義詞詞林的句子相似度計算方法等。Word2Vec、GloVe利用詞向量計算句子相似度,充分利用句中的相似詞,但沒有考慮句子順序結構,這點往往會對一些否定句以及被動句的相似度計算造成較大影響[1]?;谕x詞詞林的方法利用同義詞詞林編碼以及結構特點,同時考慮詞語的相似性及相關性,但未包含詞語的語義信息,對相似度計算有一定影響[2]。
以上方法各有優(yōu)勢與不足,但均沒有考慮到中文句法成分的特殊性與差異性,沒有充分利用句子的語義信息與結構信息。鑒于此,提出一種基于句法塊向量的句子相似度算法(Sentence Similarity Method Based on Syntax Block Vector,SSSB),更大程度考慮句子的語義特征與結構特征,利用句子語義依存關系獲取句子的句法塊,通過詞向量構造句法塊向量與句子向量,增加被動句轉(zhuǎn)換和否定句判斷,以此提高句子相似度精確性。
一般中文句子句法成分包括主語、謂語、賓語、定語、補語、狀語等。其中主、謂、賓是句子主干,定、補、狀是句子枝葉。不同的自然語言處理任務需要的句法成分也不同,比如新聞標題更強調(diào)主語、謂語和賓語。一個句子可以沒有主語或主語承前、蒙后省略,一個句子也可以沒有賓語,但一個句子絕不能沒有謂語,沒有謂語的句子就不存在。因此,本文以謂語為中心對句子進行分析。利用句子的句法結構和句子向量對句子進行相似度計算。與傳統(tǒng)的Jaccard算法、TF-IDF算法和基于詞向量的句子相似度算法相比具有更高的準確性。
1 相關工作
1.1 詞向量
詞是最小和最有意義的語言單位,廣泛應用于基于神經(jīng)網(wǎng)絡的分布式表示,也稱為單詞向量。該方法使用神經(jīng)網(wǎng)絡模擬目標詞與上下文之間的關系,使其可以代表復雜的背景。李小濤等[3]提出基于詞向量的詞語間離和句子相似度模型,該方法結合詞向量與傳統(tǒng)語義解析兩者優(yōu)點,在相似度計算上取得很好效果,但是該方法只注重詞的語義信息而忽略了句子的結構信息。本文在此基礎上引入句子的結構信息和句向量,以提高相似度計算的準確性。
谷歌公司發(fā)布的開源詞向量訓練工具 word2vec主要實現(xiàn)CBOW和skip-gram兩種模型,其中一詞多義問題采用k-means算法解決。skip-gram模型是包含輸入層、隱藏層和輸出層的三層神經(jīng)網(wǎng)絡模型,由于此模型簡單且訓練參數(shù)少,所以其訓練效率很高。Word2vec以任意大小的文本集合作為輸入,通過無監(jiān)督訓練得到包含所有詞向量的二進制文件。之后再利用高維向量作為輸入,把深度學習應用到NLP的諸多領域中,詞向量本身蘊含的語義信息可直接作為詞相似度計算的依據(jù)。如Mikolov[4]發(fā)現(xiàn)[vec(berlin)-vec(germany)+vec(france)][≈vec(paris)],其中vec表示單詞向量,這表明詞向量之間的相似度也可以表示成詞在語義層面的相似度,本文就是采用word2vec的skip-gram模型構造詞向量。
1.2 語義依存樹
語句由詞組成,通常包括主語(詞)、謂語(詞)和賓語(詞)3個主要成分,當然還可能有其它成分,如定語、補語、狀語和語氣助詞等。作為句子,謂語成分是不可忽略的,因而句子的謂語詞稱為該句子的“核心成分”。詞與詞之間存在一定的關系,如主、謂之間的“施事關系(nsubj)”、謂語和賓語之間的“受事關系(dobj)”等,這些關系稱為詞與詞之間的依存關系。隨著統(tǒng)計自然語言處理的演化,針對語句的語義依存樹廣泛應用。語義依存關系樹最先由法國語言學家L.Tesniere[5]在1959年提出,主要方法是將句子按照一定規(guī)則分解,分析詞與詞之間的語義依存關系,并通過樹的形式將詞語之間的依存關系直觀展現(xiàn)出來。
如果[S=w1w2wn]是含有[n]個詞的句子,那么[S]的語義依存樹可表示為二元組[TS=(NS, ES)],其中,[NS={w0,w1,wn}]為結點集,由語句[S]的各個分詞加上引入的根結點[w0(root)]組成;[ES={e1,e2,,em}]為邊集,每條邊[et=(depk,wi,wj)]為一個三元組,表示語句[S]中的詞[wi,wj]具有依存關系[depk]。如果[wk]是語句[S]中的核心成分,那么[e1=(Root,w0,wk)]表示[wk]是樹的根節(jié)點。
語義依存關系分析是信息論研究領域的重要內(nèi)容之一,其最核心的思想是闡明一個完整句子中各組成部分之間的相互關系。其中,主成分一般為句子核心詞,通常起著支配其它成分的作用,而修飾成分則被用來描述語境,起修飾作用并受主成分支配。通過語義依存樹,可以得到句子中詞與詞之間的依賴關系,從而分析出句子的主謂賓結構。目前,構建語法依存樹的常用方法是哈工大提出的較為完善的封裝式語義依存樹構建方法[6]。
以語句“一個老人修好了自行車”為例,構建其語義依存關系樹。首先經(jīng)分詞得到結點集[NS={Root,一,個,老人,] [修好,了,自行車}],其中,“修好”是核心成分,因而有[e1=(Root,root,修好)],“人”和“修好”是施事關系“nsubj”, 即主語和謂語,所以可定義[e2=(nsubj,人,修好)];“自行車”和“修好”是受事關系“dobj”,即賓語和謂語,所以可定義[e3=(dobj,修好,自行車)],等等。最終得到語句“一個老人修好了自行車”的語義關系依存樹如圖1所示。
利用語句的語義關系依存樹,很容易得到句子主語、謂語和賓語以及其它成分之間的關系,為計算句子相似度帶來極大便利。
1.3 句子相似度模型
句子相似度計算模型較多,如基于距離的相似度算法、基于語義的相似度算法、基于空間向量模型的TF-IDF方法、基于詞向量的Jacard相似度算法和基于字向量的相似度算法等[7]。
(1)基于距離的相似度算法2001年由張煥炯等[8]提出,該方法建立文本集與碼字集之間的一一對應關系,然后借用編碼理論中漢明距離概念,由漢明距離計算公式計算句子相似度。與傳統(tǒng)方法相比,它具有簡便、快速等優(yōu)點,但是準確率相對較差。
(2)TF-IDF方法[9]是一種句子相似度計算統(tǒng)計方法,用來評估一個字詞對一個文件集中的其中一份文件的重要程度,其重要性隨其在文件中出現(xiàn)的次數(shù)增加而增加,但同時隨著其在語料庫中出現(xiàn)的頻率增加而降低。該方法是以大規(guī)模語料庫為基礎的方法,在信息檢索領域非常流行。其中單詞向量以語料庫中的關鍵詞確定,關鍵詞確定是TF-IDF的重要工作,計算公式如下:
TF為歸一化后的詞頻,描述詞在文檔中的頻率。其中,[ni,j]是該詞在文件中出現(xiàn)的次數(shù),[knk,j]為文件所有詞數(shù)。IDF為逆文檔頻率,起降低通用詞作用。某一特定詞語的IDF,可由總文件數(shù)和包含該詞語之文件的數(shù)取以10為底的對數(shù)計算得到。其中[|D|]是語料庫中的文件總數(shù)。[|{j:ti∈dj}|]是包含詞語[ti]的文件數(shù),[dj]為包含詞語[ti]的文件。若該詞語不在語料庫中則會導致分母為零,因此一般情況下使用[|{j:ti∈dj}|+1]。TF-IDF值由TF與IDF的乘積得到。某一特定文件內(nèi)的高頻率詞語,以及該詞語在整個文件集合中的低頻率文件,可以產(chǎn)生高權重的TF-IDF。因此,TF-IDF更適合過濾掉常見的詞語,保留重要的詞語。TF-IDF在句子相似度的應用主要是找出兩個句子的關鍵詞組,再計算各關鍵詞的詞頻并將其向量化,最后通過余弦公式計算句子的相似度。相似度計算公式如下:
其中,[ω(i1≤i≤n)]為關鍵詞組在[Sx]中出現(xiàn)的次數(shù),[β(i1≤i≤n)]為關鍵詞組在[Sy]中出現(xiàn)的次數(shù)。該方法只考慮句子的結構信息,沒有考慮句子的語義信息,本文在此基礎上增加句子的語義信息以及句子的被動轉(zhuǎn)換操作,以提高相似度計算的準確性。
(3)句子的語義依存關系是衡量句子相似度的方法之一, Li等[8]提出一種基于語義的句子相似度計算方法,該方法通過計算兩句句子的有效搭配計算句子相似度,公式如下:
其中,[W1]表示[Sx]與[Sy]之間詞的有效匹配權值,[W2]表示[Sx]與[Sy]之間單詞的有效匹配權值。[PairCount1]是[Sx]到[Sy]的有效詞匹配數(shù),[PairCount2]是[Sy]到[Sx]的有效詞匹配數(shù)。用[W1]與[W2]的和除以[PairCount1]與[PairCount2]的最大值。該方法僅利用詞的句法匹配初步判別兩個句子的相似程度,但不能從整體上考慮句子的句法信息,因此計算的相似度不全面。SBSS不僅考慮句子的結構信息,還引入句法塊以及詞向量方法,增加句子的句法信息,使相似度計算更加準確。
(4)Jaccard相似度改進算法2018年由田星等[10]提出,該方法首先通過訓練將每個詞語映射為語義層面的高維向量,然后計算各個詞向量之間的相似度,高于閾值α的作為共現(xiàn)部分。雖然考慮了句子的語義信息,但缺乏句子的結構信息,也缺乏對句子正否定的判斷,因而影響相似度計算的準確性。
2 句子相似度算法
傳統(tǒng)的相似度算法[4]缺乏對句子多元信息的綜合考量,如前述的TF-IDF方法只考慮句子的詞頻信息,并未關注詞義與句子的結構信息,易導致較低的句子相似度準確度。如Word2vec方法[6]僅僅考慮詞義而忽視句子的結構信息,從而引起句子相似度的偏差計算。鑒于此,筆者設計一種Sentence Similarity Method Based On Syntax Block Vector(SSSB)模型。該模型對詞義與句子的結構信息加以綜合考慮,創(chuàng)新性地引入否定句判斷與被動句轉(zhuǎn)換,增加相似度計算的精確性。設計的SSSB模型不同于傳統(tǒng)的相似度算法,其結合了詞向量和句子的句法依賴關系,首先通過句子的句法依賴關系抽取句子的句法塊,其次利用詞向量構造句子的句法塊向量和句向量,進而利用所得到的句向量余弦值表示句子的相似度,以提升相似度的準確性。
2.1 句法塊概念與模型基本框架
句法塊是根據(jù)句子的主謂賓區(qū)分的,分為主語塊、謂語塊和賓語塊。設[S=w1w2wn]是含有[n]個詞的句子,[S]的語義依存樹可表示為二元組[TS=(NS, ES)],其中,[NS={w0,w1,,wn}]為結點集,由語句[S]的各個分詞加上引入的根結點[w0](root)組成;[ES={e1,e2,,em}]為邊集,其中每條邊[et=(depk,wi,wj)]為一個三元組,表示語句[S]中的詞[wi,wj]具有依存關系[depk];[ek]中[depk]值為“nsubj”或 “nsubjpass”時,[ek]中的[wi]為主語;[ek]中[depk]值為“dobj”或“iobj”時,[ek]中的[wi]為謂語;[ek]中[depk]值為“iobj”時,[ek]中的[wj]為賓語。將主謂賓分別表示為[ws]、[wp]、[wo],其中主語[ws∈Su],謂語[wp∈Pr],賓語[wo∈Oc]都表示句子中的一個詞。將主謂賓的修飾詞分別表示為[s_modifier]、[p_modifier]和[o_modifier],主語修飾詞[s_modifier]是[Es]中所有與主語[ws]有依賴關系的詞;謂語修飾詞[p_modifier]是[Es]中所有與謂語[wp]有依賴關系的詞;賓語修飾詞[o_modifier]是[Es]中所有與賓語[wo]有依賴關系的詞;主要的依賴關系值[depk]如表1所示,主謂賓及主謂賓修飾詞如下:
主語塊由主語與主語的修飾詞組成,謂語塊由謂語與謂語的修飾詞組成,賓語塊由賓語與賓語的修飾詞組成,那么主語塊、謂語塊和賓語塊可分別表示為[Su={ws}?] [s_modifier],[Pr={wp}?p_modifier],[Ob={wo}?o_modifier],最終得到句子S的句法塊[Sblock=(Su,Pr,Oc)]。
SSSB模型基本框架分為:①解析部分:解析句子語義依存關系;②構造部分:完成句法塊向量的構造;③計算部分:進行句子相似度計算,其模型結構如圖2所示。
2.2 SSSB模型計算過程
SSSB模型計算步驟如下:
(3)被動轉(zhuǎn)換。一般被動句對于主動句而言結構是倒置的,導致某些相似句子被誤判為不相似句,為此增加被動轉(zhuǎn)換步驟,將一般被動句轉(zhuǎn)為主動句形式。中文被動句主要分為標志型被動句和無標志型被動句[11],本文主要針對標志型被動句進行被動轉(zhuǎn)換。標志型被動句由“被”、“叫”、“教”、“讓”、“給”等5個介詞作為被動標志,不妨稱之為“被動詞”。被動語句的一般形式可表示為:
其中[N1]為主語,[N2]為賓語,其主動句式一般可表示為
為增加句子相似度計算的準確性,對被動形式的句子進行被動轉(zhuǎn)換,得到句子的主動形式,本文只檢測一般被動句,對于復雜被動句暫不考慮。
首先檢測句子是否存在作為被動標志的5個介詞“被”“叫”“教”“讓”“給”,若存在,則對句子進行被動轉(zhuǎn)換,互換主語塊與賓語塊。對于一般被動句[S],交換[S]的主語塊與賓語塊,原本[S]的主語塊和賓語塊為[Su={ws}?]? [s_modifier]和[Ob={wo}?o_modifier],被動轉(zhuǎn)換后使[Su={wo}?o_modifier],[Ob={ws}?s_modifier],之后再根據(jù)句法塊和詞向量構建句法塊向量。
(4)構建句法塊向量??紤]到句子的語義信息,將句法塊中的詞轉(zhuǎn)為詞向量。句法塊向量由塊中單詞向量的加權和表示,每個句法塊都有一個核心詞。句法塊向量和詞向量在不同的向量空間中雖然維數(shù)一樣,但不能作比較。句子[S]的句法塊向量計算公式如下:
其中,[BVi]表示句子第[i]個句法塊的塊向量,i=1表示主語塊,i=2表示謂語塊,i=3表示賓語塊。[Nxi]表示句子[Sx]中第[i]個句法塊的所有單詞,[wj]表示塊中的第j個單詞,[λj]表示第j個單詞的權重(離關鍵詞越近權重越高,由人工調(diào)試)。[e(wj)]表示第j個單詞的向量。句法塊向量最后將拼接到句子中形成兩個句子的句向量。
(5)拼接塊向量并計算句子相似度。拼接塊向量前先判斷塊中是否含有否定詞,如“不” “沒”等。用[αi]表示句法塊中否定詞個數(shù)。句子向量構造如下:
其中,[BV1]、[BV2]、[BV3]分別表示主語塊向量、謂語塊向量、賓語塊向量,[λ1]、[λ2]、[λ3]為負調(diào)節(jié)因子,根據(jù)句法塊中否定詞數(shù)量取值。
3 實驗結果與分析
3.1 實驗數(shù)據(jù)
本文相似度實驗數(shù)據(jù)集均來自Tang等[12]提供的chineseSTS數(shù)據(jù)集,數(shù)據(jù)集共有12 747個句子對,由于訓練時間過長,選取5 000對和人工編寫的400對作為實驗數(shù)據(jù),其中相似和不相似句子各占50%。本文詞向量訓練數(shù)據(jù)集采用百度百科、維基百科語料。深度學習框架使用Word2vec的Skip-grams模型,維度設置為200維。
3.2 實驗指標評價
用準確性衡量各方法優(yōu)劣,計算公式如下:
T:真實為0,預測也為0或者真實為1,預測為1;
F:真實為0,預測為1或者真實為1,預測為0;
其中,Accuracy為準確率,最大值為1,最小值為0。
3.3 對比實驗分析
將本文模型與傳統(tǒng)的Jaccard算法、基于TF-IDF的算法和基于詞向量的兩種傳統(tǒng)句子相似度算法作對比實驗,結果表明,本文提出的基于詞向量和語義依存的句子相似度方法結合了句子語義信息與結構信息,計算效果較好。本文方法與同類方法的準確率對比結果如表2所示。
表2為不同句子相似度算法在數(shù)據(jù)集上的準確率,表3為不同相似度算法計算特定例句的得分情況。對比表2與表3,說明本文提出的句子相似度模型具有較高準確率,特別適用于被動語句的相似度計算,符合人們對漢語語言的認知。
4 結語
本文提出一種基于詞向量和語義依存樹的句子相似度模型,研究了句法塊在句子級語義相似度中的作用及中文被動句的轉(zhuǎn)換等。為在一定程度上保證句子中單詞順序,將構造好的句法塊嵌入到句子中,通過計算句子對向量的夾角余弦值求得相似度值。由于中文句子句法復雜,不同應用所側(cè)重的句法塊不一樣,本文模型未考慮所有的句法成分,也未考慮所有的被動句轉(zhuǎn)換。后續(xù)研究要進一步考慮句法結構中的句法要素,增加對無標志型被動句的轉(zhuǎn)換,在不同自然語言處理任務中構建句子對的相似度計算模型。
參考文獻:
[1] PENNINGTON J,SOCHER R,MANNING C D. Global vectors for word representation[M].? In Emnlp, 2014.
[2] 李婉婉,張英俊,潘理虎. 基于語義相似度的本體概念更新方法研究[J]. 計算機應用與軟件,2018,35(4):15 - 20.
[3] 李小濤,游樹娟,陳維. 一種基于詞義向量模型的詞語語義相似度算法[J]. 自動化學報,2019,25(6):1-16.
[4] MIKOLOV T. Statistical language models based on neural networks[R].? Technical report, Google Mountain View ,2012.
[5] 特斯尼埃. 結構句法基礎[J]. 當代語言學報,1985,33(2):19-21.
[6] LIU T, CHE W, LI Z. Language technology platform. journal of chinese information processing[J]. Journal of Chinese Information Processing, 2011, 25(6): 53-62.
[7] 何穎剛,王宇. 一種基于字向量和LSTM的句子相似度計算方法[J]. 長江大學學報(自然科學版),2019,16(1):88-94.
[8] 張煥炯,王國勝,鐘義信. 基于漢明距離的文本相似度計算[J].? 計算機工程與應用,2001,28(19):56-61.
[9] 趙勝輝,李吉月,徐碧,等. 基于TFIDF的社區(qū)問答系統(tǒng)問句相似度改進算法[J]. 北京理工大學學報,2017,37(9):982-985.
[10] 田星,鄭瑾,張祖平. 基于詞向量的Jaccard相似度算法[J]. 計算機科學,2018,45(7):186-189.
[11] 張興旺. 現(xiàn)代漢語被動句的界定及其分類[J]. 陰山學刊,2008,17(1):15-19.
[12] TANG S C, BAI Y Y, MA F Y. Chinese semantic text similarity trainning dataset[D]. Xian:Xian University of Science and Technology,2016.
(責任編輯:杜能鋼)