專利名稱:基于變進(jìn)制編碼技術(shù)的快速詞義排歧方法
技術(shù)領(lǐng)域:
本發(fā)明屬于自然語言處理技術(shù)領(lǐng)域。
背景技術(shù):
詞義排歧(Word Sense Disambiguation,WSD)是自然語言處理研究領(lǐng)域的重要基礎(chǔ)技術(shù),在自然語言處理的各個應(yīng)用領(lǐng)域,包括機(jī)器翻譯、信息檢索、文本分類等,都有重要的應(yīng)用價值。
概括地說,詞義排歧的處理目標(biāo)就是確定句子中每個詞語的準(zhǔn)確義項。為此,需要進(jìn)行以下兩階段的處理1)確定每個詞語的所有可能義項,這可以通過對每個詞語的各個義項進(jìn)行了語義解釋或編碼的語義詞典體現(xiàn)出來;2)基于詞語的語言使用環(huán)境確定合適的意義描述,這可以利用各個詞語義項所聯(lián)系的外部知識源,包括其詞匯語義知識和百科知識,并通過局部語境中不同詞語的意義相關(guān)性計算得到。文獻(xiàn)[1]對目前的典型詞義排歧技術(shù)進(jìn)行了簡單綜述。
在目前的各種詞義排歧技術(shù)中,Guo(2002)提出的WSD技術(shù)有其處理特點(diǎn)。在詞語義項定義方面,通過對目前電子詞典的釋義文本的自動處理,提取形成各個義項釋義的原語(Primitive)描述集合,大大提高了義項描述提取的自適應(yīng)性[2];在詞語相關(guān)度計算方面,可以直接計算不同義項的源語描述集中不同源語的語義相關(guān)度,從而降低了語義相關(guān)性知識的獲取難度。同時,通過考慮語境中所有義項組合的總體意義貢獻(xiàn)情況,取得了較好的整體排歧效果[3]。其處理方法簡要描述如下假設(shè)兩個詞語的義項釋義的原語描述集分別為P1,P2,......,Pm和Q1,Q2,......,Qn,我們可以定義Σx=1mΣy=1nPrimitive_Rev(Px,Qy)]]>為這兩個義項間的語義相關(guān)值。其中Primitive_Rev(Px,Qy)表示兩個原語之間的語義相關(guān)度計算值。
這樣,如果句子中有k個詞,每個詞有ni個義項,分別通過不同的原語描述集進(jìn)行描述,那么詞義排歧時共需考慮M=Πi=0k-1ni]]>種可能的義項排列組合。對于每一種可能的排列組合中的k個義項,對任意兩個義項按照上面的公式計算它們之間的語義相關(guān)度,這樣共會求出Ck2(即 )個語義相關(guān)值,然后求出這Ck2個值的總和,作為這種可能排列組合的概念距離。詞義排歧的處理目標(biāo),就是從所有義項排列組合中選擇概念距離最小的組合路徑。
由于在這個計算過程中,我們需要對所有的義項排列組合路徑進(jìn)行一次窮舉搜索,全部計算量為k(k-1)2MP2]]>(假設(shè)每個義項釋義的源語描述集長度都為P),即時間復(fù)雜度為O(n2)。隨著k的增大,計算量是非常大的。因此,目前在使用該算法對實際句子進(jìn)行處理過程中,一般將完整的句子分成幾個片段,每段大約5個詞,分別對每段應(yīng)用上述算法,最后將所有段的結(jié)果綜合在一起作為最終結(jié)果。這種做法無疑大大降低了整個算法的處理準(zhǔn)確性。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種可大大降低計算復(fù)雜度、提高計算效率的基于變進(jìn)制編碼技術(shù)的快速詞義排歧方法。
本發(fā)明的特征在于它依次含有以下步驟(1)計算機(jī)初始化設(shè)定描述具有k個詞的輸入語句中各個詞wi的ni個義項的義項狀態(tài)空間它的列由k個詞wi從左到右排列而成,i∈
,它的行由各個詞wi的ni個義項從上到下排列而成,ni=0,1,...,ni-1,具長度可變,ni從電子語義詞典提??;TS狀態(tài)空間中所有義項描述總數(shù),TS=Σi=0k-1ni;]]>狀態(tài)路徑s0s1...sk-1,si∈
,表示句子中第i個詞的第si個義項編號,路徑總數(shù)M=Πi=0k-1ni;]]>狀態(tài)路徑的變進(jìn)制編碼p=Σi=0k-1(si*Πx=i+1k-1nx);]]>狀態(tài)路徑的變進(jìn)制解碼 義項內(nèi)容描述數(shù)組Sense[]順序存儲句子中k個詞語的所有TS個義項描述,所述之義項描述從外部語義詞典提??;狀態(tài)路徑中任意兩個義項Sense[a]和Sense[b]之間的語義相關(guān)值Sense_Rev(Sense[a],Sense[b])=Σx=1mΣy=1nPrimitive_Rev(Px,Qy),]]>其中兩個義項的原語描述集分別為P1,P2,......,Pm和Q1,Q2,......,Qn;所述之Primitive_Rev(Px,Qy)從外部語義知識庫提取;Ni,j是一個二維到一維的映射函子,表示把狀態(tài)空間中第i列第j行的義項狀態(tài)映射到義項內(nèi)容描述數(shù)組Sense[]的特定下標(biāo),具體映射公式為Ni,j=Σa=0i-1na+j;]]>path(i,p)路徑編碼為p的路徑上第i列位置上的義項狀態(tài)描述,即si=path(i,p),i∈
;total_path(i)狀態(tài)空間中第i列之前的所有可能路徑總數(shù),total_path(i)=Πa=0i-1na;]]>概念距離狀態(tài)路徑中任意兩個義項之間的語義相關(guān)值的總和;(2)輸入需要進(jìn)行詞義排歧的語句;(3)詞語義項查詢,它依次含有以下步驟(3.1)初始化i=0,j=0;(3.2)若i<k,則從語義詞典中查出句子中第i個詞的所有ni個義項描述,且順序保存在義項內(nèi)容描述數(shù)組Sense[]中的[j,j+ni]位置上;(3.3)令i=i+1,j=j(luò)+ni,重復(fù)步驟(3.2),直到i=k,終止;(4)構(gòu)造輸入語句中各義項之間的語義相關(guān)數(shù)據(jù)表,它依次含有以下步驟(4.1)設(shè)初始義項a=0;(4.2)若a<TS,則設(shè)另一義項b=0;(4.3)若b<TS,則調(diào)用語義相關(guān)值計算公式計算義項a、b之間的語義相關(guān)值relation_value[a][b]=Sense_Rev(Sense[a],Sense[b])=Σx=1mΣy=1nPrimitive_Rev(Px,Qy);]]>(4.4)令b=b+1,重復(fù)步驟(4.3),一直到b不再小于TS;(4.5)令a=a+1,重復(fù)步驟(4.1--4.3);(4.6)若a不再小于TS,終止;(5)詞語義項排歧,它依次含有以下步驟(5.1)用變進(jìn)制編碼描述狀態(tài)空間中的所有狀態(tài)路徑路徑編碼從0開始,按照變進(jìn)制數(shù)的進(jìn)位方式,每次加1得到新的路徑編碼,一直加到M-1,順序得到所有的路徑編碼。再利用變進(jìn)制編碼與狀態(tài)路徑描述之間的一一對應(yīng)關(guān)系,得到各自相應(yīng)的路徑描述;(5.2)利用變進(jìn)制編碼的進(jìn)位特點(diǎn),將相鄰路徑的狀態(tài)變化分解成互相獨(dú)立的三大部分,通過考慮它們之間的相互影響,形成四張概念距離修正值表設(shè)第i列是產(chǎn)生直接進(jìn)位的部分,稱為第二部分,該列的義項編號從m進(jìn)位為m+1;第0列到第i-1列是不發(fā)生改變的部分,稱為第一部分;第i+1列到第k-1列是產(chǎn)生進(jìn)位傳遞的部分,稱為第三部分,其中各列的義項編號從nx-1變?yōu)?,x∈[i+1,k-1];所述的四張概念距離修正值表為表1存儲第二部分的變動對第一部分產(chǎn)生影響的修正值,用rev_value_1[i][j][m]表示;
表2存儲第三部分的變動對第一部分產(chǎn)生影響的修正值,用rev_value_2[i][j]表示;表3存儲第三部分的變動對第二部分產(chǎn)生影響的修正值,用rev_value_3[i][m]表示;表4存儲第三部分的變動對自身產(chǎn)生影響的修正值,用,用rev_value_4[i]表示;(5.3)構(gòu)造步驟(5.2)所述的四張修正值表(5.31)構(gòu)造rev_value_1[i][j][m]表當(dāng)1≤i≤(k-1),且在i確定的條件下,0≤j≤(total_path(i)-1),0≤m≤(ni-2)時,它依次含有以下步驟(5.311)設(shè)i=0;(5.312)若i<k,則令j=0;(5.313)若j<total_path(i),則令m=0;(5.314)若m<ni-2,則計算rev_value_1[i][j][m]=Σa=0i-1{relation_value(Na,path(a,j),Ni,m+1)-relation_value(Na,path(a,j),Ni,m)}]]>其中,Na,path(a,j)是第a列中編碼為j的路徑上的義項;Ni,m、Ni,m+1分別是第i列中產(chǎn)生直接進(jìn)位的第m行和第m+1行處的義項;(5.315)令m=m+1,重復(fù)步驟(5.314);(5.316)若m不再小于ni-2,則令j=j(luò)+1,重復(fù)步驟(5.313)--(5.315);(5.317)若j不再小于total_path(i),則令i=i+1,重復(fù)步驟(5.312)-(5.316),一直到i不再小于k,終止;(5.32)構(gòu)造rev_value_2[i][j]表當(dāng)1≤i≤(k-2),且在i確定的條件下,0≤j≤(total_path(i)-1)時,它依次含有以下步驟(5.321)設(shè)i=1;(5.322)若i<k-1,則令j=0;(5.323)若j<total_path(i),則計算rev_value_2[i][j]=Σa=0i-1Σb=i+1k-1{relation_value(Na,path(a,j),Nb,0)-relation_value(Na,path(a,j),Nb,nb-1)]]>其中,Na,path(a,j)是第a列中編碼為j的路徑上的義項;Nb,0、Nb,nb-1分別是第b列中產(chǎn)生進(jìn)位傳遞的第0行和第nb-1行處的義項;(5.324)令j=j(luò)+1,重復(fù)步驟(5.323);(5.325)若j不再小于total_path(i),則令i=i+1,重復(fù)步驟(5.322)-(5.324),一直到i不再小于k-1,終止;
(5.33)構(gòu)造rev_value_3[i][m]表當(dāng)0≤i≤(k-2),且在i確定的條件下,0≤m≤(ni-1)時,它依次含有以下步驟(5.331)設(shè)i=0;(5.332)若i<k-1,則令m=0;(5.333)若m<ni-1,則計算rev_value_3[i][m]=Σa=i+1k-1{relation_value(Ni,m+1,Na,0)-relation_value(Ni,m,Na,na-1)}]]>其中,Ni,m、Ni,m+1分別是第i列第m行和第m+1行處的義項;Na,0、Na,na-1分別是第a列第0行和第na-1行處的義項;(5.334)令m=m+1,重復(fù)步驟(5.333);(5.335)若m不再小于ni-1,則令i=i+1,重復(fù)步驟(5.332)--(5.334),一直到i不再小于k-1,終止;(5.34)構(gòu)造rev_value_4[i]表當(dāng)0≤i≤(k-1)時,它依次含有以下步驟(5.341)設(shè)i=0;(5.342)若i<k-1,則計算rev_value_4[i]=Σa=i+1k-1Σb=a+1k-1{relation_value(Na,0,Nb,0)-relation_value(Na,na-1,Nb,nb-1)}]]>其中,Nb,0、Nb,nb-1分別是第b列第0行和第nb-1行處的義項;Na,0、Na,na-1分別是第a列第0行和第na-1行處的義項;(5.343)令i=i+1,重復(fù)步驟(5.342),一直到i不再小于k-1,終止;(5.4)詞義排歧,它依次含有以下步驟(5.41)計算編碼p=0的狀態(tài)路徑的概念距離;(5.42)令p=p+1,形成新路徑的編碼;(5.43)通過變進(jìn)制解碼得到這條路徑的具體義項狀態(tài)表示;(5.44)進(jìn)行新路徑的概念距離修正計算,它依次含有以下步驟(5.441)找到路徑中發(fā)生直接進(jìn)位的那一列,確定基本參數(shù)i,j,m;(5.442)若第一部分為空,則修正值=rev_value_3[i][m]+rev_value_4[i];(5.443)若第三部分為空,則修正值=rev_value_1[i][j][m];(5.444)若第一、三部分都不為空,則修正值=rev_value_1[i][j][m]+rev_value_2[i][j]+rev_value_3[i][m]+rev_value_4[i];(5.445)新路徑的概念距離=舊路徑的概念距離+修正值;
(5.45)在目前得到的所有路徑中選擇概念距離最小的路徑作為最佳路徑,并保存相應(yīng)的最佳路徑編碼;(5.46)重復(fù)步驟(5.42)--(5.45),直到p>=M;(5.47)通過路徑解碼得到最佳路徑的具體義項表示,處理結(jié)束;(5.5)最佳義項標(biāo)注為句子中的每個詞語賦予最佳義項描述;(5.6)結(jié)束。
針對詞義排歧問題,我們實現(xiàn)了兩種算法1)全排列枚舉算法;2)變進(jìn)制優(yōu)化算法。然后,在一般的PC兼容機(jī)上進(jìn)行了一個性能比較實驗。機(jī)器的基本配置是CPU為Intel奔騰III處理器,主頻約500MHz,內(nèi)存為256M。
表1顯示了具體的實驗數(shù)據(jù),從中可以清楚地看到,對于變進(jìn)制優(yōu)化算法,它的復(fù)雜度隨著輸入文本的長度增加,增長得并不快,而全排列枚舉算法的復(fù)雜度隨著輸入文本的長度增加,增長的速度是非常快的,對于包含10個詞的句子,如果某些詞的義項稍微多一點(diǎn)的話,就會變得很難得到結(jié)果了。這些結(jié)果驗證了我們提出的優(yōu)化算法的處理有效性。
表1兩種不同的詞義排歧算法的性能比較(表中記錄了每個句子的平均用時數(shù)據(jù))
圖1.狀態(tài)空間中相鄰編碼的路徑變化情況圖2.語義相關(guān)數(shù)據(jù)表構(gòu)建流程3.建立修正值表1的流程4.建立修正值表2的流程5.建立修正值表3的流程6.建立修正值表4的流程7.基于變進(jìn)制編碼技術(shù)的快速詞義排歧算法流程8.路徑概念距離修正處理流程9.具體實施例描述10.完整的句子詞義排歧處理流程11.詞語義項查詢流程圖
具體實施例方式
為了便于理解,我們對詞義排歧問題進(jìn)一步定義如下假設(shè)句子中有k個詞wi,每個詞wi有ni個義項,i∈
,每個義項稱為一個狀態(tài)。這樣,如果把句子中的k個詞,按照詞序從左到右排成0,1,...,k-1列,把其中第i個詞的ni個義項從上到下排成0,1,...,ni-1行(可變長度),我們就形成一個義項描述的狀態(tài)空間(參見圖1描述),其中每個詞語的義項相互之間的排列組合就形成一條狀態(tài)路徑,其總數(shù)為M=Πi=0k-1ni]]>條。每條路徑上任意兩個義項狀態(tài)的語義相關(guān)值之和(總數(shù)為Ck2=k(k-1)2]]>個)形成了路徑的概念距離。詞義排歧處理目標(biāo),就是從所有狀態(tài)路徑中選擇概念距離最小的路徑。
通過對這個復(fù)雜計算問題進(jìn)行深入研究,我們提出了一套新的優(yōu)化計算技術(shù),就是尋找一種合適的狀態(tài)路徑分解技術(shù),把一些可能重復(fù)的狀態(tài)路徑概念距離的計算結(jié)果保存起來。其主要內(nèi)容包括1)引入變進(jìn)制編碼技術(shù),對不同狀態(tài)路徑進(jìn)行統(tǒng)一編碼,使路徑和編碼一一對應(yīng)起來;2)路徑編碼從0開始,按照變進(jìn)制數(shù)的進(jìn)位方式,每次加1得到新的路徑編碼。通過編碼順序調(diào)整方便地完成整個狀態(tài)空間的路徑遍歷;3)利用變進(jìn)制編碼的進(jìn)位特點(diǎn),將相鄰路徑的狀態(tài)變化情況合理地分解成互相獨(dú)立的三大部分,通過考慮它們之間的相互影響,形成四張概念距離修正值表的優(yōu)化計算機(jī)制;4)設(shè)計精巧的數(shù)據(jù)結(jié)構(gòu),計算并保存相鄰路徑狀態(tài)變化中的概念距離修正值;5)根據(jù)相鄰路徑的不同狀態(tài)變化情況,通過檢索四張修正值表并進(jìn)行簡單的加法運(yùn)算,方便地計算出不同路徑的概念距離;這個優(yōu)化算法通過空間換時間,以很小的內(nèi)存空間消耗,使整體的時間復(fù)雜度從O(n2)降到基本上為線性常量的O(h*M),大大提高了計算效率。
我們使用了“變進(jìn)制”技術(shù)對目前的狀態(tài)路徑進(jìn)行編碼。它的基本處理機(jī)制與通常的二進(jìn)制、十進(jìn)制等進(jìn)位制類似,唯一不同的是,這些進(jìn)位制中每一位的進(jìn)位值是一樣的,比如二進(jìn)制數(shù),它的每一位都是逢二進(jìn)一。而對于變進(jìn)制下的數(shù),每一位的進(jìn)位值則不盡相同。這非常適合我們目前需要處理的句子中不同詞語的義項狀態(tài)數(shù)目不斷變化的情況。
如果把k個詞語的不同義項組成的狀態(tài)路徑描述看成是一個k位的變進(jìn)制數(shù),它的每一位進(jìn)位值按從高到低分別確定為各個詞語的義項總數(shù)n0、n1......,nk-1。那么利用通常的編碼解碼機(jī)制,我們就可以建立狀態(tài)路徑描述和變進(jìn)制路徑編碼之間的一一對應(yīng)關(guān)系。即假設(shè)狀態(tài)路徑描述為s0s1...sk-1,其中si∈
,表示句子中第i個詞的第si個義項編號。那么其相應(yīng)的變進(jìn)制路徑編碼p就可以由下式計算得到p=Σi=0k-1(si*Πx=i+1k-1nx)]]>反之,對得到的變進(jìn)制路徑編碼p進(jìn)行解碼操作,則可以得到相應(yīng)的狀態(tài)路徑中的各個義項編號,具體計算公式為 其中,運(yùn)算符 表示下界取整操作。
在此條件下,可以很方便地通過編碼調(diào)整完成對所有可能的M條狀態(tài)路徑的遍歷路徑編碼從0開始,按照變進(jìn)制數(shù)的進(jìn)位方式,每次加1得到新的路徑編碼,一直加到M-1,從而順序得到所有的路徑編碼。然后利用變進(jìn)制編碼與狀態(tài)路徑描述之間的一一對應(yīng)關(guān)系,得到各自相應(yīng)的路徑描述。
在這樣的遍歷順序下,相鄰編碼的兩條狀態(tài)路徑的變化情況呈現(xiàn)出很強(qiáng)的規(guī)律性,其典型變化情況如圖1所示。其中,實線表示的狀態(tài)路徑(編碼為p),通過變進(jìn)制進(jìn)位,變?yōu)樘摼€表示的狀態(tài)路徑(編碼為p+1)。從第i+1列到第k-1列是產(chǎn)生進(jìn)位傳遞的情況,具體狀態(tài)變化為義項編號從nj-1變?yōu)?,j∈[i+1,k-1]。第i列是產(chǎn)生直接進(jìn)位的情況,具體狀態(tài)變化為義項編號從m進(jìn)位為m+1。從第0列到第i-1列是不發(fā)生改變的情況。這樣,這種進(jìn)位狀況很自然地把相鄰路徑的變化情況分拆為三個部分第一部分從第0列到第i-1列;第二部分第i列;第三部分第i+1列到第k-1列。如圖1所示。
對于每次相鄰路徑改變,三個部分中發(fā)生變化的只有第二部分和第三部分,第一部分是不發(fā)生改變的。這種情況類似與十進(jìn)制下的路徑編碼15399到15400的變化情況。其中第一部分為不變的情況15,第二部分為產(chǎn)生直接進(jìn)位的情況3→4,第三部分為產(chǎn)生進(jìn)位傳遞的情況99→00。
這樣,如果我們計算并保存了某一改變部分對其余部分及其自身的影響而產(chǎn)生的路徑概念距離的修正值,就可以通過對前一條路徑的概念距離的修正直接得到后一條路徑的概念距離,從而避免了大量重復(fù)計算。
下面,我們分別考慮第二部分和第三部分的變動對所有三部分的影響。通過簡單的排列組合(2*3),我們可以得到如下的六種可能影響A.第二部分的變動對第一部分的影響;B.第二部分的變動對自身的影響;C.第二部分的變動對第三部分的影響;D.第三部分的變動對第一部分的變動的影響;E.第三部分的變動對第二部分的影響;F.第三部分的變動對自身的影響。
第二部分只有一列,從我們的算法可知,一列的變化對自身是沒有影響的,所以可能的影響B(tài)是可以排除的;對于可能影響C和E,其效果是一樣的,所以只需要取其中的一種就可以了。所以最后只需要考慮以下四種影響所產(chǎn)生的修正值
A.第二部分的變動對第一部分的影響;B.第三部分的變動對第一部分的變動的影響;C.第三部分的變動對第二部分的影響;D.第三部分的變動對自身的影響。
順著這個思路,我們很容易想到,對于每一次相鄰路徑變化,需要的修正值都包括了這四種值中的幾種或是全部,所以可以提前把這所有的四種修正值都計算出來,存入數(shù)據(jù)表中,到時就可以直接從表中查找修正值來從前一條路徑值計算得到后一條路徑值了。
這種修正值計算的具體處理流程為首先通過預(yù)處理,計算并保存句子中任意兩個義項狀態(tài)之間的語義相關(guān)值,形成語義相關(guān)數(shù)據(jù)表。這是進(jìn)行路徑概念距離修正計算的基礎(chǔ)。然后,設(shè)計四張修正值表,分別計算并存儲以下信息表1存儲第二部分的變動對第一部分產(chǎn)生影響的修正值表2存儲第三部分的變動對第一部分產(chǎn)生影響的修正值表3存儲第三部分的變動對第二部分產(chǎn)生影響的修正值表4存儲第三部分的變動對自身產(chǎn)生影響的修正值下面詳細(xì)說明這些表的數(shù)據(jù)結(jié)構(gòu)設(shè)計和具體計算方法。首先給出一些基本符號的定義●k,ni定義同前,不再重復(fù);●TS表示句子中k個詞語的所有義項描述總數(shù),即TS=Σi=0k-1ni]]>●Sense[]是一個一維義項內(nèi)容描述數(shù)組,順序存儲句子中k個詞語的所有TS個義項描述。這些義項描述可以通過詞語義項查詢流程從語義詞典中獲取(詳見圖11說明)●Sense_Rev(Sense[a],Sense[b])表示句子中任意兩個義項描述Sense[a]和Sense[b]之間的語義相關(guān)值。假設(shè)這兩個義項的原語描述集分別為P1,P2,......,Pm和Q1,Q2,......,Qn,那么Sense_Rev(Sense[a],Sense[b])=Σx=1mΣy=1nPrimitive_Rev(Px,Qy).]]>●Primitive_Rev(P1,P2)表示兩個原語P1和P2之間的語義相關(guān)度值,它們可以在系統(tǒng)預(yù)處理時從外部語義知識庫中獲取得到。
●Ni,j是一個二維到一維的映射函子,表示把狀態(tài)空間中第i列第j行的義項狀態(tài)映射到義項內(nèi)容描述數(shù)組的特定下標(biāo),從而得到相應(yīng)的義項描述信息(即上文提到的原語描述集)。具體映射公式為Ni,j=Σa=0i-1na+j.]]>●path(i,p)表示路徑編碼為p的路徑上第i列位置上的義項狀態(tài)描述。它建立了狀態(tài)路徑編碼p與相應(yīng)的狀態(tài)路徑描述s0s1...sk-1之間的一一對應(yīng)關(guān)系,即si=path(i,p),i∈
。
●total_path(i)表示狀態(tài)空間中第i列之前的所有可能路徑總數(shù),計算公式為total_path(i)=Πa=0i-1na.]]>它將在下面的修正值表1和表2的計算控制中發(fā)揮作用。
(0)語義相關(guān)數(shù)據(jù)表的設(shè)計修正值表計算的預(yù)處理該表的數(shù)據(jù)結(jié)構(gòu)由一個二維數(shù)組構(gòu)成,relation_value[a][b],存儲句子的義項內(nèi)容描述數(shù)組Sense[]中任意兩個義項描述之間的語義相關(guān)值,其中a,b∈
。具體計算公式為relation_value[a][b]=Sense_Rev(Sense[a],Sense[b])=Σx=1mΣy=1nPrimitive_Rev(Px,Qy).]]>這是下面四張修正值表計算的重要基礎(chǔ)數(shù)據(jù)。
完整的計算過程是一個二重循環(huán),基本流程見圖2。
(1)修正值表1的設(shè)計考慮第二部分變動對第一部分的影響表1的數(shù)據(jù)結(jié)構(gòu)由一個三維數(shù)組構(gòu)成,rev_value_1[i][j][m],其中i表示發(fā)生直接進(jìn)位的狀態(tài)列序號,j表示狀態(tài)空間中第i列之前(左邊)的一條路徑(通過編碼表示),m表示在第i列發(fā)生直接進(jìn)位變化的狀態(tài),即m→m+1。下同。
由于此時第三部分可以為空,而第一部分不能為空,因此直接進(jìn)位發(fā)生列,即第二部分的變動范圍是1≤i≤(k-1)。在i確定的條件下,j和m的變動范圍是0≤j≤(total_path(i)-1),0≤m≤(ni-2)。因為第i列共有ni-1種進(jìn)位可能。
具體計算時,需要考慮第二部分中每種進(jìn)位變化對第一部分所有路徑的影響。計算公式rev_value_1[i][j][m]=Σa=0i-1{relation_value(Na,path(a,j),Ni,m+1)-relation_value(Na,path(a,j),Ni,m)}]]>完整的計算過程是一個三重循環(huán),基本流程見圖3。
(2)修正值表2的設(shè)計考慮第三部分變動對第一部分的影響表2的數(shù)據(jù)結(jié)構(gòu)由一個二維數(shù)組構(gòu)成,rev_value_2[i][j],其中i,j的意義描述同表1。
由于此時第一部分、第三部分均不為空,因此直接進(jìn)位發(fā)生列,即第二部分的變動范圍是1≤i≤(k-2)。在i確定的條件下,j的變動范圍是0≤j≤(total_path(i)-1)。
具體計算時,需考慮第三部分中第b列(b∈[i+1,k-1])的進(jìn)位傳遞變化(狀態(tài)從nb-1變化為0)對第一部分各列的影響,并將這些影響累加起來作為第b列對第一部分的總的影響。因此,這是一個雙重累加過程。計算公式為
rev_value_2[i][j]=Σa=0i-1Σb=i+1k-1{relation_value(Na,path(a,j),Nb,0)-relation_value(Na,path(a,j),Nb,nb-1)}]]>完整的計算過程是一個二重循環(huán),基本流程見圖4。
(3)修正值表3的設(shè)計考慮第三部分變動對第二部分的影響表3的數(shù)據(jù)結(jié)構(gòu)由一個二維數(shù)組構(gòu)成,rev_value_3[i][m],其中i,m的意義描述同表1。
由于此時第三部分不為空,第一部分可以為空,因此直接進(jìn)位發(fā)生列,即第二部分的變動范圍是0≤i≤(k-2)。在i確定的條件下,m的變動范圍是0≤m≤(ni-1)。
當(dāng)?shù)趇列從第m個狀態(tài)進(jìn)位到第m+1個狀態(tài)時,需分別計算第i+1、i+2、......、k-1列的進(jìn)位傳遞變化(狀態(tài)從nx-1變化為0)對第i列的影響。計算公式為rev_value_3[i][m]=Σa=i+1k-1{relation_value(Ni,m+1,Na,0)-relation_value(Ni,m,Na,na-1)}]]>完整的計算過程是一個二重循環(huán),基本流程見圖5。
(4)修正值表4的設(shè)計考慮第三部分變動對自身的影響表4的數(shù)據(jù)結(jié)構(gòu)為一個一維數(shù)組rev_value_4[i],其中i的意義描述同表1。
由于此時第三部分和第一部分均可以為空,因此直接進(jìn)位發(fā)生列,即第二部分的變動范圍是0≤i≤(k-1)。
當(dāng)直接進(jìn)位發(fā)生在第i列時,需要分別計算第三部分中第b列(b∈[i+1,k-1])的進(jìn)位傳遞變化(狀態(tài)從nb-1變化為0)對自身的影響。計算公式為rev_value_4[i]=Σa=i+1k-1Σb=a+1k-1{relation_value(Na,0,Nb,0)-relation_value(Na,na-1,Nb,nb-1)}]]>完整的計算過程是一個二重循環(huán),基本流程見圖6。
可以證明,按照上述方法計算得到的修正值表內(nèi)容很好地反映了相鄰路徑調(diào)整時的概念距離變化情況,具體證明過程可參閱附件。另外,通過對以上四張修正值表的計算復(fù)雜度進(jìn)行深入分析,我們得到了以下結(jié)果算法總的時間復(fù)雜度為O(h*M),278<h<578.,]]>總的空間復(fù)雜度為O(2M)。其中M=n0n1...nk-1。與原始的全排列計算方法相比,雖然花費(fèi)了一定的內(nèi)存空間,但時間復(fù)雜度卻從O(k2*M)降到O(h*M),從而大大提高了處理效率。
利用上面形成的修正值計算表,我們就可以形成完整的路徑優(yōu)化處理算法。圖7顯示了這種優(yōu)化算法的基本處理流程。首先計算得到一條完整的狀態(tài)路徑(編碼p=0)的概念距離,這是以后進(jìn)行狀態(tài)路徑概念距離修正的出發(fā)點(diǎn)。然后通過調(diào)整路徑編碼得到下一條狀態(tài)路徑,通過變進(jìn)制解碼技術(shù)得到這條路徑的具體義項狀態(tài)表示。接著根據(jù)其中的不同進(jìn)位情況選擇不同的修正值表進(jìn)行路徑概念距離修正,快速得到這條新路徑的概念距離。
一般情況下,新路徑的概念距離=舊路徑的概念距離+表1的修正值+表2的修正值+表3的修正值+表4的修正值。圖8給出了路徑概念距離修正的具體處理過程。據(jù)此可以與已有的路徑概念距離進(jìn)行比較,選擇確定到目前為止最佳的狀態(tài)路徑。這個過程不斷重復(fù)進(jìn)行,直至處理完所有可能的狀態(tài)路徑。最終將得到整個狀態(tài)空間中概念距離最小的路徑作為最佳路徑。
我們以一個具體實施例來詳細(xì)介紹我們算法的處理流程假設(shè)一個句子中有5個詞,從左到右每個詞的義項數(shù)分別為2、2、3、2、4。那么它的全部義項排列路徑將有2*2*3*2*4=96條。下面,我們考察在圖7的優(yōu)化算法處理流程中,路徑編碼從31(舊路徑)變化到32(新路徑)時形成的概念距離修正處理情況(即圖7的主循環(huán)部分)。
首先,通過變進(jìn)制解碼技術(shù),得到這兩條路徑的具體路徑表示,分別為舊路徑01013,解碼過程為 新路徑01100,解碼過程為 根據(jù)兩條路徑的進(jìn)位狀態(tài)分析,可確定三個部分為第一部分第0、1列;第二部分第2列;第三部分第3、4列。參見圖9。
根據(jù)圖8的路徑概念距離修正處理流程進(jìn)行分析,發(fā)現(xiàn)需要檢索四張表得到路徑距離修正值。具體過程如下1)從表1查修正值表1計算公式中的i第二部分是第二列,因此i=2;表1計算公式中的j第一部分共有2*2=4條路徑,目前是第(0*2+1*1=)1條路徑,因此j=1;表1計算公式中的m從第2列的第0行變動到第1行,因此m=0;得到修正值1rev_value_1[2][1]
2)從表2查修正值表2計算公式中的i和j與表1計算公式中的i和j相同,分別是2和1。
得到修正值2rev_value_1[2][1]3)從表3查修正值表3計算公式中的i和m與表1計算公式中的i和m相同,分別是2和0。
得到修正值3rev_value_3[2]
4)從表4查修正值
表4計算公式中的i與表1計算公式中的i相同,是2。
得到修正值4rev_value_4[2]這樣,總的路徑概念距離修正值(舊路徑31→新路徑32)為rev_value(31,32)=rev_value_1[2][1]
+rev_value_1[2][1]+rev_value_3[2]
+rev_value_4[2]從而,我們得到新路徑(p=32)的概念距離為舊路徑(p=31)的概念距離+rev_value(31,32)利用Guo(2002)提出的詞義排歧技術(shù),我們實現(xiàn)了一個完整的自動詞義排歧處理系統(tǒng)。首先通過系統(tǒng)初始化,讀入原語描述集中任意兩個原語P1和P2之間的語義相關(guān)度值Primitive_Rev(P1,P2),它們是整個系統(tǒng)進(jìn)行詞義排歧處理的基礎(chǔ)數(shù)據(jù)。然后,針對每個待處理的句子,進(jìn)行其中各個詞語的義項排歧和標(biāo)注處理。圖10顯示了完整的句子詞義排歧處理流程。通過詞語義項檢索、語義相關(guān)數(shù)據(jù)表和修正值表計算、詞語義項排歧等階段的處理,可以得到句子中各個詞語的最佳義項描述結(jié)果。
圖11顯示了其中的第一階段詞語義項檢索基本處理流程。通過檢索語義詞典,我們可以得到句子中k個詞的所有TS個義項描述,并順序保存在義項內(nèi)容描述數(shù)組Sense[]中。而上面介紹的優(yōu)化處理技術(shù)主要集中在其中的第二、三階段。首先通過預(yù)處理(基本流程見圖2),利用檢索得到的義項內(nèi)容描述,計算得到句子中任意兩個義項描述之間的語義相關(guān)值,保存在語義相關(guān)數(shù)據(jù)表relation_value[][]中。然后順序計算得到4張修正值表(基本流程分別見圖3、圖4、圖5和圖6)。在此基礎(chǔ)上,就可以運(yùn)行我們提出的路徑優(yōu)化處理算法,完成對句子的詞語義項自動排歧工作(相關(guān)的處理流程可參閱圖7和圖8)。
這個自動詞義排歧處理系統(tǒng)可以在任何PC兼容機(jī)上,用標(biāo)準(zhǔn)C/C++程序設(shè)計語言實現(xiàn)。
參考文獻(xiàn)[1]Nancy Ide,Jean Veronis(1998)Word Sense DisambiguationThe State of the Art.Computational Linguistics,24(1),p1-41. Guo Chengming(1989)Deriving a Natural Set of Semantic Primitives from Longman Dictionary ofContemporary English.PhD dissertation.New Mexico State University. Guo Chengming(2002)Chinese sense taggging.In Proc.of Seminar on linguistic meaning representation andtheir applications over the World Wide Web(http//utmk.cs.usm.my/preCo102/papers%5CGuo-preColing.doc)
權(quán)利要求
1.基于變進(jìn)制編碼技術(shù)的快速詞義排歧方法,其特征在于,它依次含有以下步驟(1)計算機(jī)初始化設(shè)定描述具有k個詞的輸入語句中各個詞wi的ni個義項的義項狀態(tài)空間它的列由k個詞wi從左到右排列而成,i∈
,它的行由各個詞wi的ni個義項從上到下排列而成,ni=0,1,...,ni-1,具長度可變,ni從電子語義詞典提??;TS狀態(tài)空間中所有義項描述總數(shù),TS=Σi=0k-1ni;]]>狀態(tài)路徑s0s1...sk-1,si∈
,表示句子中第i個詞的第si個義項編號,路徑總數(shù)M=Πi=0k-1ni;]]>狀態(tài)路徑的變進(jìn)制編碼p=Σi=0k-1(si*Πx=i+1k-1nx);]]>狀態(tài)路徑的變進(jìn)制解碼 義項內(nèi)容描述數(shù)組Sense[]順序存儲句子中k個詞語的所有TS個義項描述,所述之義項描述從外部語義詞典提??;狀態(tài)路徑中任意兩個義項Sense[a]和Sense[b]之間的語義相關(guān)值Sense_Rev(Sense[a],Sense[b])=Σx=1mΣy=1nPrimitive_Rev(Px,Qy),]]>其中兩個義項的原語描述集分別為P1,P2,......,Pm和Q1,Q2,......,Qn;所述之Primitive_Rev(Px,Qy)從外部語義知識庫提??;Ni,j是一個二維到一維的映射函子,表示把狀態(tài)空間中第i列第j行的義項狀態(tài)映射到義項內(nèi)容描述數(shù)組Sense[]的特定下標(biāo),具體映射公式為Ni,j=Σa=0i-1na+j;]]>path(i,p)路徑編碼為p的路徑上第i列位置上的義項狀態(tài)描述,即si=path(i,p),i∈
;total_path(i)狀態(tài)空間中第i列之前的所有可能路徑總數(shù),total_path(i)=Πa=0i-1na;]]>概念距離狀態(tài)路徑中任意兩個義項之間的語義相關(guān)值的總和;(2)輸入需要進(jìn)行詞義排歧的語句;(3)詞語義項查詢,它依次含有以下步驟(3.1)初始化i=0,j=0;(3.2)若i<k,則從語義詞典中查出句子中第i個詞的所有ni個義項描述,且順序保存在義項內(nèi)容描述數(shù)組Sense[]中的[j,j+ni]位置上;(3.3)令i=i+1,j=j(luò)+ni,重復(fù)步驟(3.2),直到i=k,終止;(4)構(gòu)造輸入語句中各義項之間的語義相關(guān)數(shù)據(jù)表,它依次含有以下步驟(4.1)設(shè)初始義項a=0;(4.2)若a<TS,則設(shè)另一義項b=0;(4.3)若b<TS,則調(diào)用語義相關(guān)值計算公式計算義項a、b之間的語義相關(guān)值relation_value[a][b]=Sense_Rev(Sense[a],Sense[b])=Σx=1mΣy=1nPrimitive_Rev(Px,Qy);]]>(4.4)令b=b+1,重復(fù)步驟(4.3),一直到b不再小于TS;(4.5)令a=a+1,重復(fù)步驟(4.1--4.3);(4.6)若a不再小于TS,終止;(5)詞語義項排歧,它依次含有以下步驟(5.1)用變進(jìn)制編碼描述狀態(tài)空間中的所有狀態(tài)路徑路徑編碼從0開始,按照變進(jìn)制數(shù)的進(jìn)位方式,每次加1得到新的路徑編碼,一直加到M-1,順序得到所有的路徑編碼。再利用變進(jìn)制編碼與狀態(tài)路徑描述之間的一一對應(yīng)關(guān)系,得到各自相應(yīng)的路徑描述;(5.2)利用變進(jìn)制編碼的進(jìn)位特點(diǎn),將相鄰路徑的狀態(tài)變化分解成互相獨(dú)立的三大部分,通過考慮它們之間的相互影響,形成四張概念距離修正值表設(shè)第i列是產(chǎn)生直接進(jìn)位的部分,稱為第二部分,該列的義項編號從m進(jìn)位為m+1;第0列到第i-1列是不發(fā)生改變的部分,稱為第一部分;第i+1列到第k-1列是產(chǎn)生進(jìn)位傳遞的部分,稱為第三部分,其中各列的義項編號從nx-1變?yōu)?,x∈[i+1,k-1];所述的四張概念距離修正值表為表1存儲第二部分的變動對第一部分產(chǎn)生影響的修正值,用rev_value_1[i][j][m]表示;表2存儲第三部分的變動對第一部分產(chǎn)生影響的修正值,用rev_value_2[i][j]表示;表3存儲第三部分的變動對第二部分產(chǎn)生影響的修正值,用rev_value_3[i][m]表示;表4存儲第三部分的變動對自身產(chǎn)生影響的修正值,用,用rev_value_4[i]表示;(5.3)構(gòu)造步驟(5.2)所述的四張修正值表(5.31)構(gòu)造rev_value_1[i][j][m]表當(dāng)1≤i≤(k-1),且在i確定的條件下,0≤j≤(total_path(i)-1),0≤m≤(ni-2)時,它依次含有以下步驟(5.311)設(shè)i=0;(5.312)若i<k,則令j=0;(5.313)若j<total_path(i),則令m=0;(5.314)若m<ni-2,則計算rev_value_1[i][j][m]=Σa=0i-1{relation_value(Na,path(a,j),Ni,m+1)-relation_value(Na,path(a,j),Ni,m)}]]>其中,Na,path(a,j)是第a列中編碼為j的路徑上的義項;Ni,m、Ni,m+1分別是第i列中產(chǎn)生直接進(jìn)位的第m行和第m+1行處的義項;(5.315)令m=m+1,重復(fù)步驟(5.314);(5.316)若m不再小于ni-2,則令j=j(luò)+1,重復(fù)步驟(5.313)--(5.315);(5.317)若j不再小于total_path(i),則令i=i+1,重復(fù)步驟(5.312)-(5.316),一直到i不再小于k,終止;(5.32)構(gòu)造rev_value_2[i][j]表當(dāng)1≤i≤(k-2),且在i確定的條件下,0≤j≤(total_path(i)-1)時,它依次含有以下步驟(5.321)設(shè)i=1;(5.322)若i<k-1,則令j=0;(5.323)若j<total_path(i),則計算rev_value_2[i][j]=Σa=0i-1Σb=i+1k-1{relation_value(Na,path(a,j),Nb,0)-relation_value(Na,path(a,j),Nb,nb-1)}]]>其中,Na,path(a.j)是第a列中編碼為j的路徑上的義項;Nb,0、Nb,nb-1分別是第b列中產(chǎn)生進(jìn)位傳遞的第0行和第nb-1行處的義項;(5.324)令j=j(luò)+1,重復(fù)步驟(5.323);(5.325)若j不再小于total_path(i),則令i=i+1,重復(fù)步驟(5.322)-(5.324),一直到i不再小于k-1,終止;(5.33)構(gòu)造rev_value_3[i][m]表當(dāng)0≤i≤(k-2),且在i確定的條件下,0≤m≤(ni-1)時,它依次含有以下步驟(5.331)設(shè)i=0;(5.332)若i<k-1,則令m=0;(5.333)若m<ni-1,則計算rev_value_3[i][m]=Σa=i+0k-1{relation_value(Ni,m+1,Na,0)-relation_value(Ni,m,Na,na-1)}]]>其中,Ni,m、Ni,m+1分別是第i列第m行和第m+1行處的義項;Na,0、Na,na-1分別是第a列第0行和第na-1行處的義項;(5.334)令m=m+1,重復(fù)步驟(5.333);(5.335)若m不再小于ni-1,則令i=i+1,重復(fù)步驟(5.332)--(5.334),一直到i不再小于k-1,終止;(5.34)構(gòu)造rev_value_4[i]表當(dāng)0≤i≤(k-1)時,它依次含有以下步驟(5.341)設(shè)i=0;(5.342)若i<k-1,則計算rev_value_4[i]=Σa=i+1k-1Σb=a+1k-1{relation_value(Na,0,Nb,0)-relation_value(Na,na-1,Nb,nb-1)}]]>其中,Nb,0、Nb,nb-1分別是第b列第0行和第nb-1行處的義項;Na,0、Na,na-1分別是第a列第0行和第na-1行處的義項;(5.343)令i=i+1,重復(fù)步驟(5.342),一直到i不再小于k-1,終止;(5.4)詞義排歧,它依次含有以下步驟(5.41)計算編碼p=0的狀態(tài)路徑的概念距離;(5.42)令p=p+1,形成新路徑的編碼;(5.43)通過變進(jìn)制解碼得到這條路徑的具體義項狀態(tài)表示;(5.44)進(jìn)行新路徑的概念距離修正計算,它依次含有以下步驟(5.441)找到路徑中發(fā)生直接進(jìn)位的那一列,確定基本參數(shù)i,j,m;(5.442)若第一部分為空,則修正值=rev_value_3[i][m]+rev_value_4[i];(5.443)若第三部分為空,則修正值=rev_value_1[i][j][m];(5.444)若第一、三部分都不為空,則修正值=rev_value_1[i][j][m]+rev_value_2[i][j]+rev_value_3[i][m]+rev_value_4[i];(5.445)新路徑的概念距離=舊路徑的概念距離+修正值;(5.45)在目前得到的所有路徑中選擇概念距離最小的路徑作為最佳路徑,并保存相應(yīng)的最佳路徑編碼;(5.46)重復(fù)步驟(5.42)--(5.45),直到p>=M;(5.47)通過路徑解碼得到最佳路徑的具體義項表示,處理結(jié)束;(5.5)最佳義項標(biāo)注為句子中的每個詞語賦予最佳義項描述;(5.6)結(jié)束。
全文摘要
基于變進(jìn)制編碼技術(shù)的快速詞義排歧方法,屬于自然語言處理技術(shù)領(lǐng)域,其特征在于引入變進(jìn)制編碼技術(shù),對不同狀態(tài)路徑進(jìn)行統(tǒng)一編碼,使義項的狀態(tài)路徑與變進(jìn)制編碼一一對應(yīng)起來;按照變進(jìn)制進(jìn)位方式,通過編碼順序調(diào)整方便地完成整個狀態(tài)空間的路徑遍歷,同時以直接進(jìn)位列為分界,將相鄰路徑的狀態(tài)變化合理地分解成互相獨(dú)立的三大部分,通過考慮它們之間的相互影響形成四張概念距離修正值表;根據(jù)相鄰路徑的不同狀態(tài)變化情況,通過檢索四張修正值表對前一路徑概念距離進(jìn)行修正,方便地計算出新路徑的概念距離;本發(fā)明以空間換時間,大大降低了計算復(fù)雜度,提高了計算效率。
文檔編號G06F17/30GK1598812SQ20041000946
公開日2005年3月23日 申請日期2004年8月20日 優(yōu)先權(quán)日2004年8月20日
發(fā)明者周強(qiáng), 陳祖舜, 梅立軍, 徐偉平 申請人:清華大學(xué)