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