尹慶宇 張宇 劉挺
摘要:對于搜索引擎而言,如何能夠正確理解用戶提出的問題十分重要。而在識別問句的過程中,如何能夠?qū)π问讲煌Z義相似的問句進行相似性識別后,歸一化處理,則會對整個搜索引擎的效果有一個明顯的提升。對此,本文提出了一種基于機器學習的問句相似性判別模型,從數(shù)據(jù)集的構(gòu)建到特征的提取,探究了相應的解決方案。本文創(chuàng)新性地從5個方面提取了不同類型的特征,并將其應用到整個分類器的建模過程中。實驗結(jié)果表明,該方法能夠在現(xiàn)有的語料上取得令人滿意的結(jié)果,F(xiàn)值達到了83%。
關(guān)鍵詞:相似度:問句;機器學習
0引言
搜索引擎正確理解用戶輸入的查詢是十分必要的。在實際應用中對于同一個問題,不同用戶的提問形式往往不同。比如用戶想得到一個U盤格式化的方法,那么有些人會問:“如何對U盤格式化”,還有些人可能會問:“怎么對U盤格式化”,或者“U盤格式化的方法?”等等。如果一個搜索引擎能夠?qū)⑦@些相似問題理解為同一個意思,就能夠正確返回給用戶結(jié)果。但是,有些問題雖然形式上比較接近,用戶問的卻是完全不同的意思。比如用戶提問“姚明是誰的爸爸”和“姚明的爸爸是誰”,如果搜索引擎將這2個問題視為同一個,返回的結(jié)果之一就是錯誤的,因此,搜索引擎應該能夠?qū)⑦@些問題很好地區(qū)分開。
本文將相似問句判別視為一個二元分類問題,即對于兩個問句,或者二者可以歸一化,或者不可以?,F(xiàn)有的判別方法主要分為兩種:基于規(guī)則的和基于統(tǒng)計機器學習的。基于規(guī)則的方法是根據(jù)數(shù)據(jù)的特點抽出一些模板,然后利用模板去匹配句子,如果句子匹配的模板為相似模板,那么二者為相似的句子,反之則不是?;诮y(tǒng)計機器學習的方法是利用一些標注好的數(shù)據(jù),抽取特征,選取一個適當?shù)臋C器學習方法訓練一個分類器,然后利用這個分類器對新數(shù)據(jù)進行二元分類?;谝?guī)則的方法受模板所限覆蓋面不是很大,但是相對來說比較準確。模板的抽取方式可以采取人工方式或者從標注好的數(shù)據(jù)中自動抽取?;诮y(tǒng)計機器學習方法的優(yōu)點是適用面比較廣,即便是對于數(shù)據(jù)集中沒有出現(xiàn)過的形式,如果抽取的特征恰當,仍能夠正確地對其進行分類。
1研究方法
主要研究內(nèi)容分以下幾點。首先是數(shù)據(jù)問題,即如何獲取數(shù)據(jù),以及對于獲取的數(shù)據(jù)應該做何處理。然后是具體的實現(xiàn)方法,這也是本課題的核心內(nèi)容。最后是評價問題,即如何評價系統(tǒng)的判別結(jié)果的好壞。本文將對上述問題分別進行說明。
1.1數(shù)據(jù)獲取及處理
首先,需要獲取到若干問題對,然后才能對這些問題對進行分類處理(可歸一化,不可歸一化)。在中文領(lǐng)域,沒有公開的問題對語料,因此,選取了百度知道這個平臺,從網(wǎng)上抓取需要的問題對。
爬蟲算法的流程如圖1所示。其基本流程為:從一系列種子(Seed)網(wǎng)頁開始,使用這些種子網(wǎng)頁中的URL鏈接去獲取其它頁面,把這些網(wǎng)頁中的URL鏈接依次提取出來,訪問URL鏈接對應的頁面。在網(wǎng)絡爬蟲中,使用哈希表記錄一個頁面是否被訪問過,未被訪問的URL鏈接則放入隊列。由調(diào)度算法,每次從隊列中取出一個URl.然后通過HTTP協(xié)議爬取對應頁面,保存到網(wǎng)頁庫。整個過程不斷重復,直到有足夠的網(wǎng)頁被訪問過,或者已達到其它的既定目標。
由百度知道上爬取了若干網(wǎng)頁原始數(shù)據(jù)后,需要從中抽取有用的信息,即問題對。由此可知在一個問題的頁面中,存在有如下兩部分內(nèi)容一類似問題和相關(guān)知識,這兩部分內(nèi)容恰好可以構(gòu)成所需要的問題對,如圖2所示。問題是:iphone好用么(http://zhidao.baidu.com/question/542432940.html)。人們抽取了其中的“類似問題”塊同原始問題組成問題對,作為正例(可歸一化的問題對),抽取其中“相關(guān)知識”塊同原始問題組成負例(不可歸一化的問題對)。這樣,就獲取了充足的問題對。
1.2一致性判別方法
研究中采用機器學習的方法來處理兩個問句的一致性問題。采用邏輯斯蒂回歸算法進行分類。為了能夠更好地對問題進行判別,除一些基本特征外,人們還從5個方面抽取了問句的相似度信息。表1中列出了抽取的特征,下邊將分別介紹在計算相似度上所使用的方法。
HowNet(即知網(wǎng))是一部詳盡的中文語義知識詞典,被廣泛應用于計算詞和句子的相似度任務上。雖然和其它的語義詞典一樣,也有一個反映知識結(jié)構(gòu)的樹狀層次體系,但實際上有著本質(zhì)的不同。在WordNet中,概念是描述詞義的最小單位,所以,每一個概念都是這個層次體系中的一個結(jié)點。而在知網(wǎng)中,每一個概念由多個義原組成,概念本身不是這個層次體系中的結(jié)點,而義原才是。
對于2個詞W1和W2,如果W1有n個概念[S11,S12…,Sln],W2有m個概念:[S21,S22…,S2m],W1和W2的相似度Sim(W1,W2)為各個概念的相似度的最大值,如公式(1)。
因為所有的概念都最終歸結(jié)于用義原來表示,所以義原的相似度計算是概念相似度的基礎(chǔ)。由于所有的義原根據(jù)上下位關(guān)系構(gòu)成樹狀的義原層次體系,可以簡單的通過語義距離計算相似度。義原的語義距離如公式(2)。
其中,S1,S2表示2個義原,d是S1,S2在義原層次體系中的路徑長度。α是一個可調(diào)節(jié)的參數(shù),在本課題實現(xiàn)的基于HowNet的詞匯語義相似度計算方法中α=0.5。2個詞的相似度計算方法如公式(3)。
樹核(String kernel)算法是通過字符串結(jié)構(gòu)上的特征來計算字符串之間的相似度。Stringkernel計算預處理后的問題對之間的相似度數(shù)值,主要是基于字符串核函數(shù)的方法。即首先將給定的字符串(問題對)拆分成子串集合(子串的長度可通過參數(shù)調(diào)節(jié)),然后通過核函數(shù)計算子串集合之間的相似度,從而通過線性合并得出問題對之間的相似度。
利用Term Weight來計算相似度的方法也是基于向量空間模型(VSM)文本相似度量的一種方法。與用tfidf計算相似度的方法不同之處在于給詞項賦權(quán)的方法。本文沒有直接用詞頻等統(tǒng)計信息來給詞項賦權(quán),而是利用了搜索引擎,通過搜索結(jié)果的重合率來為句子中的詞項賦權(quán)。為詞項賦權(quán)所用具體方法如下:
(1)將整個句子放進baidu中檢索,記錄前20個檢索結(jié)果。
(2)去掉一個詞,再將句子放人baidu中檢索,記錄前20個檢索結(jié)果。
(3)計算第二次的檢索結(jié)果占第一次的檢索結(jié)果的百分比,然后用1減,得到的數(shù)值即可認為是這個詞在句子中的重要性分數(shù)。詞的分數(shù)越大,說明越重要,其權(quán)重就越大。
通過這個方法可以得到一個句子中每個詞項的權(quán)重。但是,考慮到如果對每個句子都要放人搜索引擎中檢索多次,時間消耗比較大,所以采用機器學習中的SVM-RANK算法,通過學習來達到自動對句子中的詞項賦權(quán)的目的。
對于句子,首先要做預處理,預處理包括分詞,詞性標注,句法依存分析等,以獲得詞語本身的詞性特點以及詞語之間的句法上的關(guān)系。對于句子中的每個詞項選取以下特征:
(1)NOUN:該詞是否是名詞。
(2)S&C:該詞是否是主語或者賓語。
(3)TermFreq(詞頻):詞語在整個文檔中出現(xiàn)的次數(shù)。
(4)DocFreq(文檔頻率):整個文檔中出現(xiàn)該詞的文檔的個數(shù),
通過這種方式,可以得到一個句子中每個詞項的權(quán)重,同tfidf方法一樣,為每個文本(問句)建立向量空間模型,通過余弦計算得到2個句對之間的相似度,
在網(wǎng)頁排序算法中,一般認為,如果一個網(wǎng)頁被很多其它網(wǎng)頁鏈接,那么這個網(wǎng)頁相對來說是比較重要的網(wǎng)頁。模仿這種思想,從一個句子的依存樹中,通過各個詞項的依存關(guān)系,也對各個詞的權(quán)重做出了衡量。
利用這個方法得到的權(quán)重,也能夠從一定方面反應詞項在句子中的重要性。利用這樣的方法,通過人度給一個句子中的詞賦權(quán)。對于詞w.其權(quán)重公式為W=In/Norm。這里的In表示詞W的依存鏈人度。Norm為這個句子中所有詞的人度和。賦權(quán)后,利用權(quán)重為問句建立向量空間模型,然后通過余弦計算得到2個句對之間的相似度。
其它特征的提取包括了一些比較常規(guī)的特征,如2個句對的詞數(shù)差、句對的長度差、句對的包含關(guān)系等。上文所述的種種特征都能夠從某些方面來得到2個問句的相似信息,但是并沒有對句子中的詞序做出區(qū)分。比如對于這樣兩個問句:“謝霆鋒爸爸是誰”,“謝霆鋒是誰爸爸”。已經(jīng)提取的特征沒有辦法區(qū)分這種關(guān)系,因此引入了另外一類特征一句法結(jié)構(gòu)特征。
在這類體征中,人們借助了二元組的思想,對于每個問句構(gòu)建了一個“二元組”。構(gòu)建方式如下:通過依存句法樹,然后在這顆樹上獲取HED、SBV、VOb.3個節(jié)點的信息作為句子的二元組,然后通過比較2個句子的二元組成分是否一致作為特征加入分類器。對于句子“謝霆鋒是誰兒子”,其二元組抽取為“謝霆鋒”,“是”,“誰”。而句子“謝霆鋒兒子是誰”的二元組則會被抽取為“兒子”,“是”,“誰”。通過這類特征的提取,能夠很好地從詞序的關(guān)系上獲取問句的相似信息。
1.3 評價規(guī)則
本系統(tǒng)中采用在自然語言處理領(lǐng)域常用的3個評價指標,對實驗結(jié)果進行評價。即準確率(precision)、召回率(recall)和F值(Fl Score)。
2實驗結(jié)果
實驗中共計標注了4000個問題對。采用測試和訓練的語料比例為1:4.即80%的數(shù)據(jù)用來訓練,余下20%的數(shù)據(jù)用來測試。在測試的過程中,采用5輪迭代取平均的測試方法,得到最終的準確率p.召回率R和F值見表2。
從結(jié)果中不難看出,在提問類句子歸一化問題上,基本達到了實用的水平,能夠從一定程度上對問句是否能歸一化做出判斷。
3結(jié)束語
隨著大數(shù)據(jù)時代的到來,人們被海量的信息淹沒。如何從海量的信息中找到所需要的信息是目前的一大挑戰(zhàn)。對于同一個問題,不同用戶的提問形式往往不同,因此如何判斷用戶輸入查詢的語義是否一致對改善搜索性能具有重要意義。本研究將這一問題定義成了一個二元分類問題,即查詢的語義是否一致。然后,在百度知道上面爬取了大量的語義查詢對,并對其進行了人工標注。為了能夠覆蓋查詢的語義信息,人們對問句從不同方面提取了幾十個特征,如HowNet相似度、String Kernel相似度、tf-idf相似度、Term Weight、依存句法分析等特征。選擇了二項邏輯斯蒂回歸方法構(gòu)建分類器,該方法在標注的數(shù)據(jù)集上F值達到了0.83。本文在問句一致性的研究上提出了相對有效的語義一致性判斷算法。為提問類句子歸一化研究做出了一些探索。雖然,本文取得了不錯的實驗結(jié)果,但是還存在很多問題:例如訓練數(shù)據(jù)稀疏問題:自然語言處理工具的分析錯誤等問題,這些問題將有待進一步研究解決。