本發(fā)明涉及自然語(yǔ)言處理,特別涉及一種基于語(yǔ)義理解的中文實(shí)詞提取算法。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)及internet的逐漸成熟,傳統(tǒng)的單一關(guān)鍵詞方式已不能滿足當(dāng)前海量信息的內(nèi)容獲取需求,如何設(shè)計(jì)好問(wèn)答系統(tǒng)成為網(wǎng)絡(luò)搜索需要解決的一個(gè)重要技術(shù)。從現(xiàn)有的問(wèn)答系統(tǒng)來(lái)看,中文由于其分詞的復(fù)雜性和語(yǔ)義識(shí)別等方面的限制,成形產(chǎn)品技術(shù)相對(duì)較落后,例如,由于現(xiàn)有分詞方法必須首先設(shè)定一個(gè)匹配詞長(zhǎng)的初始值,詞長(zhǎng)過(guò)長(zhǎng)則算法的時(shí)間復(fù)雜度提高;詞長(zhǎng)過(guò)短則切分正確率降低。對(duì)于二義字段的處理也不能滿足實(shí)際用戶需要。
技術(shù)實(shí)現(xiàn)要素:
為解決上述現(xiàn)有技術(shù)所存在的問(wèn)題,本發(fā)明提出了一種基于語(yǔ)義理解的中文實(shí)詞提取算法,包括:
采用散列樹(shù)詞典建立數(shù)據(jù)檢索結(jié)構(gòu);
根據(jù)斷句表,將中文句子切分為短句,在進(jìn)行匹配分詞的同時(shí)保存匹配過(guò)程中字符串的匹配信息;
通過(guò)字符串的匹配信息以及逐詞掃描來(lái)判斷存在的二義字段,
將預(yù)切分的中間結(jié)果交給細(xì)分過(guò)程進(jìn)行處理。
優(yōu)選地,所述細(xì)分過(guò)程進(jìn)一步包括:對(duì)于預(yù)切分結(jié)果中包含的二義字段的所有切分路徑,根據(jù)訓(xùn)練語(yǔ)料庫(kù)中的詞頻信息,利用統(tǒng)計(jì)模型計(jì)算出所有切分路徑中詞的概率,概率最大的詞即是最優(yōu)詞。
優(yōu)選地,所述二義字段通過(guò)以下過(guò)程進(jìn)行消除:
設(shè)置三個(gè)參數(shù),詞性狀態(tài)矩陣a、符號(hào)概率分布矩陣b、初始狀態(tài)概率分布π;
其中詞性狀態(tài)矩陣a即為詞性狀態(tài)矩陣,把41個(gè)詞性之間的狀態(tài)轉(zhuǎn)移矩陣轉(zhuǎn)化為表的形式存儲(chǔ)其中;矩陣a的元素aij為:
aij=n(ti,tj)/n(ti)
其中n(ti,tj)是在訓(xùn)練中詞性標(biāo)記tj緊跟在ti后出現(xiàn)的次數(shù),n(ti)是標(biāo)記ti出現(xiàn)的次數(shù);
其中符號(hào)概率分布矩陣b把每個(gè)詞對(duì)應(yīng)不同的詞性概率存儲(chǔ)在其中。對(duì)詞性表中的概率,由以下公式得到詞性概率分布bjk:
bjk=n(wk,tj)/n(ti)
其中n(wk,tj)是在訓(xùn)練中詞匯wk的詞性標(biāo)注為tj出現(xiàn)的次數(shù);
參數(shù)π表示初始狀態(tài)概率分布;
輸入?yún)?shù)集λ=(a,b,π),對(duì)于給定句子確定出每個(gè)詞的詞性。令w=w1w2λwm為一個(gè)句子,wi為句子中的一個(gè)詞,又令q=q1q2λqm為句子w一個(gè)可能詞性標(biāo)注序列,qi為詞wi的一個(gè)詞性標(biāo)注結(jié)果;
將問(wèn)題轉(zhuǎn)化為在一個(gè)模型λ尋求一個(gè)詞性序列使得它能最好解釋句子w,本發(fā)明采用hmm評(píng)價(jià)標(biāo)準(zhǔn),選用單個(gè)最可能狀態(tài)qt,這個(gè)評(píng)價(jià)標(biāo)準(zhǔn)使得達(dá)到正確狀態(tài)的數(shù)目的期望值最大;
對(duì)于每一種可能的預(yù)切分路徑,首先初始化:
δ1(i)=πibi(o1)初始化時(shí)bi(o1)
歸納計(jì)算并保存回溯
δt(j)=max1<i<n[δt(j)aij]×bj(ot),2≤t≤t,1≤j≤n
其中t為時(shí)刻,aij為狀態(tài)轉(zhuǎn)移概率即詞性轉(zhuǎn)移,j為詞性狀態(tài),δt(j)是t時(shí)刻狀態(tài)為j,輸出為o1,o2,…,ot的最大概率,該變量保存到達(dá)每個(gè)結(jié)點(diǎn)的最有可能的路徑的概率;
利用動(dòng)態(tài)規(guī)劃算法計(jì)算整個(gè)網(wǎng)格的最佳路徑,最后結(jié)束并產(chǎn)生路徑(帶回溯)
p=max1<i<n[δt(j)]
至此,求得最優(yōu)路徑狀態(tài)序列及最優(yōu)權(quán)值;
對(duì)于每一種可能的預(yù)切分路徑都將計(jì)算p值,比較所有預(yù)切分路徑的p值,選擇一種最大概率p,作為輸出結(jié)果。
本發(fā)明相比現(xiàn)有技術(shù),具有以下優(yōu)點(diǎn):
本發(fā)明提出了一種基于語(yǔ)義理解的中文實(shí)詞提取算法,改進(jìn)了對(duì)分詞的二義字段處理的過(guò)程,具備更理想的時(shí)間復(fù)雜度和切分正確率。
附圖說(shuō)明
圖1是根據(jù)本發(fā)明實(shí)施例的基于語(yǔ)義理解的中文實(shí)詞提取算法的流程圖。
具體實(shí)施方式
下文與圖示本發(fā)明原理的附圖一起提供對(duì)本發(fā)明一個(gè)或者多個(gè)實(shí)施例的詳細(xì)描述。結(jié)合這樣的實(shí)施例描述本發(fā)明,但是本發(fā)明不限于任何實(shí)施例。本發(fā)明的范圍僅由權(quán)利要求書(shū)限定,并且本發(fā)明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細(xì)節(jié)以便提供對(duì)本發(fā)明的透徹理解。出于示例的目的而提供這些細(xì)節(jié),并且無(wú)這些具體細(xì)節(jié)中的一些或者所有細(xì)節(jié)也可以根據(jù)權(quán)利要求書(shū)實(shí)現(xiàn)本發(fā)明。
本發(fā)明的一方面提供了一種基于語(yǔ)義理解的中文實(shí)詞提取算法。圖1是根據(jù)本發(fā)明實(shí)施例的基于語(yǔ)義理解的中文實(shí)詞提取算法流程圖。
本發(fā)明采用散列樹(shù)詞典建立數(shù)據(jù)檢索結(jié)構(gòu),利用統(tǒng)計(jì)方法消除分詞過(guò)程中出現(xiàn)的歧義。散列樹(shù)詞典用于存儲(chǔ)字符串,實(shí)現(xiàn)字符串的快速查找。所述散列樹(shù)由首字索引和散列樹(shù)節(jié)點(diǎn)兩部分組成,在對(duì)被切分語(yǔ)句的一次掃描過(guò)程中,沿著樹(shù)鏈的根節(jié)點(diǎn)逐字匹配。根據(jù)中文編碼標(biāo)準(zhǔn)的分區(qū)數(shù)a和每分區(qū)字?jǐn)?shù)b,在散列樹(shù)節(jié)點(diǎn)中存儲(chǔ)b個(gè)數(shù)據(jù)單元,裝載中文分詞詞典。數(shù)據(jù)結(jié)構(gòu)如下:
首字索引,根據(jù)字的區(qū)位碼采用以下公式直接定位:
pos=(c1-176)×b+(c2-161)
pos為詞在首字索引節(jié)點(diǎn)中的位置,c1為詞首字第一個(gè)字節(jié)的無(wú)符號(hào)數(shù),c2為第二個(gè)字節(jié)的無(wú)符號(hào)數(shù)。
首字索引節(jié)點(diǎn)包含如下數(shù)據(jù):屬性:?jiǎn)巫质欠衿ヅ錇樵~,是否存在子樹(shù),索引字作為首字的最長(zhǎng)詞的長(zhǎng)度;子樹(shù)大?。捍嬖谧訕?shù)時(shí),首字為索引字的兩字詞的個(gè)數(shù),否則為0;子樹(shù)指針:存在子樹(shù)時(shí),指針指向子樹(shù),否則指針為空。首字索引的一個(gè)單元是所對(duì)應(yīng)字的散列樹(shù)的根節(jié)點(diǎn)。
散列樹(shù)節(jié)點(diǎn)包含單一關(guān)鍵字、是否存在子樹(shù)的標(biāo)識(shí),根節(jié)點(diǎn)到當(dāng)前節(jié)點(diǎn)關(guān)鍵字是否匹配為詞,根節(jié)點(diǎn)到當(dāng)前節(jié)點(diǎn)關(guān)鍵字為前綴的最長(zhǎng)詞的長(zhǎng)度、子樹(shù)大小,存在子樹(shù)時(shí),根節(jié)點(diǎn)到當(dāng)前關(guān)鍵字為前綴的詞的個(gè)數(shù)。否則為0、子樹(shù)指針:存在子樹(shù)時(shí),指針指向子樹(shù),否則指針為空。
把語(yǔ)句中的第n個(gè)詞作為緊接其前面的n-1個(gè)詞的馬爾可夫過(guò)程的狀態(tài)轉(zhuǎn)移,利用這些詞間的同現(xiàn)概率作為狀態(tài)間的轉(zhuǎn)移來(lái)進(jìn)行詞性標(biāo)注,通過(guò)語(yǔ)料訓(xùn)練來(lái)提取各種概率參數(shù),根據(jù)概率參數(shù)來(lái)計(jì)算出一個(gè)給定的詞可能對(duì)應(yīng)的標(biāo)記串的概率,然后按照預(yù)定義標(biāo)準(zhǔn)選擇適當(dāng)?shù)臉?biāo)記串作為輸出。
在散列樹(shù)詞典的基礎(chǔ)上,首先根據(jù)斷句表,將中文句子切分為短句,然后在進(jìn)行匹配分詞的同時(shí)保存匹配過(guò)程中字符串的匹配信息,通過(guò)字符串的匹配信息以及逐詞掃描的方法來(lái)判斷是否存在二義字段,最后將預(yù)切分的中間結(jié)果交給細(xì)分過(guò)程進(jìn)行處理。由于每個(gè)字都有被作為詞的首字進(jìn)行匹配的過(guò)程,所以可以找出所有的二義字段。經(jīng)過(guò)上述改進(jìn)的分詞算法處理之后,預(yù)切分結(jié)果中包含了二義字段的所有切分路徑。根據(jù)訓(xùn)練語(yǔ)料庫(kù)中的詞頻信息,利用統(tǒng)計(jì)模型計(jì)算出所有切分路徑中詞的概率,概率最大的詞即是最優(yōu)詞。
具體描述如下:
步驟1:對(duì)搜索語(yǔ)句進(jìn)行初步分詞預(yù)處理,即首先根據(jù)斷句表將搜索語(yǔ)句預(yù)切分為多個(gè)子串并保存;
步驟2:取預(yù)切分子串s=c0c1…cn-1,n為子串的長(zhǎng)度,并初始化變量temp=n,p=0;q=1000000;
步驟3:取s的第j個(gè)字符cj,獲得cj在首字索引中的位置;
步驟4:讀取當(dāng)前節(jié)點(diǎn)的數(shù)據(jù),包括是否匹配為詞,是否存在子樹(shù),最長(zhǎng)詞長(zhǎng),如果存在子樹(shù),讀取子樹(shù)指針和子樹(shù)大小;
步驟5:取i=j(luò)+1,如果最長(zhǎng)詞長(zhǎng)<n,轉(zhuǎn)步驟11;
步驟6:取s的第i個(gè)字符ci,讀取子樹(shù)指針中各個(gè)散列樹(shù)節(jié)點(diǎn)數(shù)據(jù):關(guān)鍵字,是否匹配為詞的屬性,最長(zhǎng)詞長(zhǎng),子樹(shù)指針和子樹(shù)大小。利用二分法在以每個(gè)關(guān)鍵字為起點(diǎn)、子樹(shù)大小為距離的區(qū)間中匹配ci,如果匹配失敗,則ci-1ci不形成詞;
此時(shí),如果i-1>q,則保存cpcp+1...ci-1的相關(guān)信息到二義字段集合中,并將s右移i-p個(gè)字,同時(shí),令n=temp-(i-p),轉(zhuǎn)步驟3;
否則如果i-1≤q,保存cpcp+1...ci-1成詞信息,將s從p處右移i-j個(gè)字,令n=temp-(i-j+1),轉(zhuǎn)步驟3;
步驟7:讀取子樹(shù)指針中各個(gè)散列樹(shù)節(jié)點(diǎn)數(shù)據(jù),包括關(guān)鍵字,是否匹配為詞,最長(zhǎng)詞長(zhǎng),子樹(shù)指針,子樹(shù)大??;
步驟8:如果最大詞長(zhǎng)為n且匹配為詞,則保存匹配后的詞ci+1-nci+2-n...ci;
步驟9:如果該詞是第一次匹配成功,記p=i+1-n,q=i,j=p+1,轉(zhuǎn)步驟3;否則,j=i,轉(zhuǎn)步驟3;
步驟10:i=i+1,轉(zhuǎn)步驟6;
步驟11:s左移一個(gè)字,n=n-1,轉(zhuǎn)步驟3;
步驟12:如果二義字段集合不為空,則進(jìn)行消歧處理;否則,分詞結(jié)束。
上述消歧處理進(jìn)一步包括:
設(shè)置三個(gè)參數(shù),詞性狀態(tài)矩陣a、b、π;
其中詞性狀態(tài)矩陣a即為詞性狀態(tài)矩陣,把41個(gè)詞性之間的狀態(tài)轉(zhuǎn)移矩陣(41×41)轉(zhuǎn)化為表的形式存儲(chǔ)其中。矩陣a的元素aij為:
aij=n(ti,tj)/n(ti)
其中n(ti,tj)是在訓(xùn)練中詞性標(biāo)記tj緊跟在ti后出現(xiàn)的次數(shù),n(ti)是標(biāo)記ti出現(xiàn)的次數(shù)。
其中符號(hào)概率分布矩陣b,把每個(gè)詞對(duì)應(yīng)不同的詞性概率存儲(chǔ)在其中。對(duì)詞性表中的概率,由以下公式得到詞性概率分布bjk:
bjk=n(wk,tj)/n(ti)
其中n(wk,tj)是在訓(xùn)練中詞匯wk的詞性標(biāo)注為tj出現(xiàn)的次數(shù)。
參數(shù)π表示初始狀態(tài)概率分布。
輸入?yún)?shù)集λ=(a,b,π),對(duì)于給定句子確定出每個(gè)詞的詞性。令w=w1w2λwm為一個(gè)句子,wi為句子中的一個(gè)詞。又令q=q1q2λqm為句子w一個(gè)可能詞性標(biāo)注序列,qi為詞wi的一個(gè)詞性標(biāo)注結(jié)果。將問(wèn)題轉(zhuǎn)化為在一個(gè)模型λ尋求一個(gè)詞性序列使得它能最好解釋句子w,本發(fā)明采用hmm評(píng)價(jià)標(biāo)準(zhǔn),選用單個(gè)最可能狀態(tài)qt,這個(gè)評(píng)價(jià)標(biāo)準(zhǔn)使得達(dá)到正確狀態(tài)的數(shù)目的期望值最大。
對(duì)于每一種可能的預(yù)切分路徑,首先初始化:
δ1(i)=πibi(o1)初始化時(shí)bi(o1)
歸納計(jì)算并保存回溯
δt(j)=max1<i<n[δt(j)aij]×bj(ot),2≤t≤t,1≤j≤n
其中t為時(shí)刻,aij為狀態(tài)轉(zhuǎn)移概率即詞性轉(zhuǎn)移,j為詞性狀態(tài),δt(j)是t時(shí)刻狀態(tài)為j,輸出為o1,o2,…,ot的最大概率,該變量保存到達(dá)每個(gè)結(jié)點(diǎn)的最有可能的路徑的概率。利用動(dòng)態(tài)規(guī)劃算法計(jì)算整個(gè)網(wǎng)格的最佳路徑。
最后結(jié)束并產(chǎn)生路徑(帶回溯)
p=max1<i<n[δt(j)]
至此,求得最優(yōu)路徑狀態(tài)序列及最優(yōu)權(quán)值。
對(duì)于每一種可能的預(yù)切分路徑都將計(jì)算p值,比較所有預(yù)切分路徑的p值,選擇一種最大概率p,作為輸出結(jié)果。
綜上所述,本發(fā)明提出了一種基于語(yǔ)義理解的中文實(shí)詞提取算法,改進(jìn)了對(duì)分詞的二義字段處理的過(guò)程,具備更理想的時(shí)間復(fù)雜度和切分正確率。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該理解,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算系統(tǒng)來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算系統(tǒng)上,或者分布在多個(gè)計(jì)算系統(tǒng)所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算系統(tǒng)可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)系統(tǒng)中由計(jì)算系統(tǒng)來(lái)執(zhí)行。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
應(yīng)當(dāng)理解的是,本發(fā)明的上述具體實(shí)施方式僅僅用于示例性說(shuō)明或解釋本發(fā)明的原理,而不構(gòu)成對(duì)本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。此外,本發(fā)明所附權(quán)利要求旨在涵蓋落入所附權(quán)利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修改例。