張海玲,邵玉斌,賈繼康,龍 華,杜慶治
(昆明理工大學信息工程與自動化學院,云南 昆明 650500)
隨著信息時代的潮流發展,人們對自然語言處理NLP(Natural Language Processing)的研究也更加如火如荼。 NLP是一個交叉學科,涉及的技術范疇眾多,例如語音合成與識別、句法分析和語言模型[1 - 3]等,現已廣泛集成到Web和移動應用程序中,幫助實現人與計算機之間的自然交互,顯然已是信息社會中不可或缺的一部分。句法分析是自然語言處理中的關鍵技術之一,其基本任務是確定句子所包含的句法單位和這些句法單位之間的依存關系。賓州中文樹庫CTB(Chinese TreeBank)[4]的發布,不但為漢語句法分析提供了一個公共的訓練、測試平臺,也促進了句法分析的發展,使得句法分析成為自然語言處理應用的關鍵因素,在機器翻譯、問答系統、信息檢索與抽取和語音識別等領域都有重要的應用價值[5]。
句法分析的研究主要有基于統計和規則的方法[6,7]。由于語種的特點,特別是漢語,大部分句法分析的研究都處在字、詞、語塊的階段,在語句成分方面的研究甚少[8]。雖然目前已有多個原本為英語制定的句法分析模型被移植到CTB上來[9],但是還存在以下問題:中文不具有諸如英語、法語等其他語言那樣嚴格意義的形態變化[10,11],忽略了漢語的局限性及特點。若針對某一類語料構建句法分析器,那么該句法分析器對該類型句子的句法分析效果較為顯著[12],但若用該句法分析器對通用語料進行句法分析,其效果就會大打折扣。
從句子成分角度來看,無論是獨立語,還是具有修飾成分的句子,句法分析研究都是從字、詞角度實現。若從局部出發[13],而不是對整個句子進行層次化分析,就會存在一定的局限性。因此,本文提出了一種實現層次化分析句子成分的算法,該算法首先使用海量的真實文本作為數據集,進行目標測試;其次,以分詞及詞性標注為前提,根據語法和統計制定的語言規則為基礎,實現二、三元詞結合的句法分析模型。綜合來說該算法既保留了二元、三元的規則特性,又對語言規則進行了更全面的融合且有效提高了層次化分析準確率,相比較從字、詞的研究角度出發的基于RNN(Recurrent Neural Network)的中文二分結構句法分析方法的序列標注模型[14]和詞匯化模型[15],準確率均有明顯提升,為未來關于句法分析的研究提供了比較新穎的思路。
設S=[w1,w2,w3,…,wi-1,wi,wi+1,…,wn],其中S表示由n個詞元有序組合而成的句子,字符wi表示S的第i個詞元,wi具有表1中的某個詞性。

Table 1 part-of-speech tag set
其中,第2~4列分別表示詞性、詞性粗分以及細分表示。nr,vd,rr和ad依次表示:人名、副動詞、人稱代詞和形容詞性慣用語。
按照句法合成規則,將句子S通過S1→S2→…→Si迭代合成,最終得到最優合成結果Si,其中0≤i 具體句子的層次化分析,如圖1所示。 Figure 1 Hierarchical analysis diagram圖1 合成示意圖 圖1中,Source為原始句子及其詞性,Target為目標合成句子及其詞性。第i+1步是在第i步的基礎上合成的,例如,第2步是在第1步基礎上利用規則[n n],將“鄧小平”與“同志”合成得到“鄧小平同志”。 在制定句法規則時將采用中國科學院計算技術研究所漢語詞性標記集[16],其共計99個詞性標記(22個一類,66個二類,11個三類)。為了在制定規則時能夠實現有效性及合理性,即采用詞性標記集作為規則需要,詞性標記集如表1所示。 在句子S=[w1,w2,…,wi-1,wi,wi+1,…,wn]中,詞元wi具有表1中的某個詞性。例如:(wi|ti)表示wi的詞性為ti。 S中相鄰的2個詞(wi,wi+1)記為一個二元詞單元ui,所在位置不可顛倒,即(wi,wi+1)≠(wi+1,wi)。由于漢語詞通常具有多類詞性,根據漢語詞性標記集可對一個詞進行多種詞性劃分,而在統計方法中,以條件概率來判定詞語劃分和詞性標注結果。中文詞匯與其對應詞性的最佳組合為: (1) 其中,W=[w1,…,wn]表示n個詞元組成的有序序列,T=[t1,…,tn]表示與W相對應的詞性序列。由條件概率公式可得: (2) 式(2)中分母P(S)與詞元序列、詞性序列無關,為常數,故可省略,式(2)即可簡化為: [Wbest,Tbest]=arg maxP(W,T,S) (3) 由于求解句子S的最優詞元和詞性的組合,即為求解每一部分的最優詞元W和詞性T的組合,進一步可得: (4) 由式(4)可知,如何計算概率P(W,T)是分詞和詞性標注問題的關鍵,根據一階馬爾科夫過程[17]的性質可得: P(W,T)=P(T)P(W|T)= P(t1,t2,…,tn)P(w1,w2,…,wn|t1,t2,…,tn)≈ (5) 由于詞的詞性同上下文中的詞及其詞性都有密切聯系,即根據式(5)可得: P(W,T)=P(T)P(W|T)= P(t1,t2,…,tn)P(w1,w2,…,wn|t1,t2,…,tn)= P(t1,t2,…,tn,w1,w2,…,wn)= (6) 為了在層次化分解過程中能夠獲取當前唯一詞性,需要進一步實現適當的線性平滑,對式(6)進行變形: P(ti,wi|ti-1,wi-1)= P(t1|ti-1,wi-1)·P2(wi|ti-1,wi-1,ti) (7) 實現線性插值平滑: P(ti,ti-1,wi-1)= λ1P(ti|ti-1,wi-1)+(1-λ1)P(ti-1,ti) (8) P(wi,ti-1,wi-1,ti)= λ21P(wi|ti-1,wi-1,t1)+(1-λ21)· [λ22(P(wi|ti-1,ti)+(1-λ22)P(wi|ti))] (9) 其中, (10) 通過極大似然估計法獲取概率P(x|y),從而選擇更為恰當的合成詞性,其中λ1,λ21,λ22為平滑參數,P(ti,wi|ti-1,wi-1)是根據前一個詞及詞性實現對當前的詞及詞性的概率估計。 在NLP領域中,分詞和詞性標注是一項基礎且重要的任務。在分詞和詞性標注正確的情況下,可進行句法分析。例如,S=[我|n,是|v,中國|n,人|n],通過P(x|y)=count(中國,人)/count(人)進行概率估計,根據ui=(wi,wi+1),從而(中國|n,人|n)=(中國人|n),即得到一個新合成詞ui為“中國人”,詞性ti為名詞,其中合成詞是通過2.1節所描述的句法規則實現合成。若出現S=[我|n,是|v,中|v,國|n,人|n]分詞和詞性標注不準確的情況,則會出現“是中”“國人”這樣的新合成詞,從而對句法分析造成影響。但是,目前分詞和詞性標注技術已較為成熟,可以忽略這種極少數的情況。 為了實現句法合成規則制定的有效性和簡易性,所有詞性類別都將以給定詞性標注集中的粗分表示作為詞性標記,最終得到由詞和詞性組成的句子S,如下所示: S=[w1|t1,w2|t2,…,wi-1|ti-1,wi|ti, wi+1|ti+1,…,wn|tn] 根據對漢語句法分析的研究和理解,以及句式結構之間的相關性[18,19],本文將提煉出的詞性標記集和語言之間的常見規則集合結合到一起,構建出表2所示的二元句法規則庫。其中,pi,pi+1表示符合二元詞性規則的初始詞性,po表示二元合成詞性。 Table 2 Binary syntactic synthesis rule base 根據圖1所述合成方式,獲取二元詞ui的詞性。例如num=3時,pi=v,pi+1=v,則po=v,即二元詞詞性為動詞。(pi,pi+1)滿足句法合成規則: ui=(wi,wi+1) (11) Pt=(ti,ti+1) (12) Pt為二元詞ui的詞性合成結果。ui的新詞性記為: (ui|Pt)=(wi|ti,wi+1|ti+1) (13) Pt由二元詞性(ti,ti+1)決定,根據表2中的二元規則庫和圖2所述的匹配過程合成,Pt=po。 對句子S實現層次化分析合成: S=[w1|t1,w2|t2,w3|t3,…,wn|tn] S1=[w1|t1,w2|t2,u1|t′1,…,wn|tn], u1=(w3,w4) S2=[w1|t1,w2|t2,u1|t′1,…,u2|t2,…,wn|tn], u2=(w10,w11) S3=[w1|t1,u3|t′3,…,u2|t′2,…,wn|tn], u3=(u1,w2) ? Si=[…,u3|t′3,…,u2|t′2,…,ui|t′i,…], ui=(wi,wi+1) ? (14) 句子詞元按照倒序的原則,規則庫按照自頂向下的方法進行解析。句子S匹配合成得到ui,新的Si再次遍歷規則庫進行下一次的匹配合成,其中ui可能還會與相鄰字符wi實現匹配,直至規則庫中無可匹配規則為止。 按照S′=[wn|tn,wn-1|tn-1,…,wi|ti,…,w1|t1]的順序掃描S′實現: [wn|tn,wi|ti,…,w1|t1](pi,pi+1)=Si (15) 式(15)是針對式(14)的一個說明,表示依據表2中的句法合成規則,實現按照倒序原則對S′和規則庫中所對應的詞性進行交互,實現規則匹配。如若倒序過程中,句子中詞元的詞性與規則庫中的po屬性相同,則輸出第i次合成句子的結果Si。在Si基礎上再通過匹配規則進行合成,輸出Si+1: […,u3|t′3,…,ui|t′i,…](pi,pt+1)=Si+1 (16) 其中,Si為第i(1≤i≤n)次合成句子成分結果,Si+1是在Si合成的基礎上再依據表2的合成規則,按照圖1所述方式實現合成,直到沒有規,則可匹配則合成結束。 三元句法合成規則庫與二元的構建原則類似,如表3所示。 Table 3 Ternary syntactic sythesis rule base 其中,pi-1,pi和pi+1表示符合三元詞性規則的初始詞性,pe表示三元合成詞性。根據表3所述句法合成規則,S=[w1,w2,w3,…,wi-1,wi,wi+1,…,wn]滿足: vt=(wi-1,wi,wi+1) (17) Pt=(ti-1,ti,ti+1) (18) 其中,相鄰的3個詞(wi-1,wi,wi+1)記為一個三元詞vt。Pt為詞單元vt的詞性合成結果,即Pt=pe。根據式(11)~式(13)所述原則,合成的新詞元vt具有新的詞性,記為: (wi-1|ti-1,wi|ti,wi+1|ti+1)=(vt|Pt) (19) 句子S層次化分析滿足: S1=[v1|t′1,…,wi|ti,…,wn|tn], v1=(w1,w2,w3) S2=[v1|t′1,…,v2|t′2,…,wn|tn], v2=(w10,w11,w12) ? Si=[v1|t′1,…,v2|t′2,…,vt|t′t], vt=(wi-1,wi,wi+1) ? (20) 在層次化分析過程中,句法解析同二元過程,即句子詞元按照倒序的原則,規則庫按照自頂向下的方法進行解析,而并非依據字符下標i升序。按照三元規則庫實現匹配,輸出Si,產生新的合成詞vt,再次依據規則匹配輸出,一直到沒有可匹配規則為止,其中0≤i (ti-1,ti,ti+1)=Pt=pe (21) 其中ti-1,ti,ti+1是3個連續詞元各自的詞性。掃描S′則需要滿足: [wn|tn,…,wi|ti,…,w1|t1] (pi-1,pi,pi+1)=Si (22) 句子解析過程中判斷匹配是否滿足Pt,如若倒序過程中滿足Pt等于pe,即符合三元規則,輸出第i次合成句子成分的結果Si,在最新合成句子成分結果的基礎上繼續進行合成,直到沒有可匹配的合成規則,合成結束。其中0≤i 3.3.1 算法分析及流程 本文利用句法中詞性間的緊密聯系性,對句法規則進行了總結和統計,首先提出了二元和三元的層次化模型。但是,由于中文本身的復雜性和語義多變性,獨立的二元或者三元模型在進行漢語句法結構分析時具有一定的局限性,效果不佳,為了更好地適應句式成分,于是本文提出了二元詞與三元詞相結合的模型,進而實現層次化句法分析。具體流程如圖2所示。 Figure 2 Diagram of hierarchical statement analysis algorithm 圖2 層次化語句分析算法流程圖 二元和三元規則匹配的具體流程如圖3所示。根據表2和表3的規則庫文件,實現由pi,pi+1或pi-1,pi,pi+1匹配合成得到po或pe。其中,POS_t是由句子S=[w1,…,wi-1,wi,wi+1,…,wn]獲取的詞性序列[t1,t2,…,ti-1,ti,ti+1,…,tn-1,tn],對該序列從右至左依次獲取詞性,對連續詞元的詞性進行規則庫匹配,合成新的ui的詞性,再對原詞性序列進行替換,直至遍歷完POS_t。 Figure 3 Rule matching diagram圖3 規則匹配示意圖 3.3.2 層次化解析 具體算法描述如算法1所示。 算法1基于二元與三元模型相結合的句法規則層次化分析算法 輸入:語句S=[w1|t1,…,wi|ti,…,wn|tn]。 輸出:可視化的語句層次化分析。 步驟1按照從右至左的順序提取(ti,ti+1); 步驟2按自頂向下的方式遍歷二元規則文件; 步驟4如若二元規則文本與S不匹配,則按照ti+1titi-1倒序方式遍歷三元規則文件; 步驟5三元規則文本和S進行匹配; 步驟7如若S與三元規則不匹配,則輸出Si-1,其中Si-1表示上一步合成的結果; 步驟8繼續解析Si/Si-1; 步驟9循環步驟2~步驟8,判別Si/Si-1是否能繼續被合成; 步驟10將Si/Si-1轉換為XML格式; 步驟11將XML格式轉化為可識別目錄樹形格式文本。 其中,在句式中能合成的二元詞匯普遍多于三元詞匯,所以算法設計先遍歷二元規則,在層次化語句分析過程中,利用分詞和詞性標注模型獲取句子中每個詞元的當前最新詞性,并對其進行標注,例如中文句: S=[小明|n,和|c,小賈|n 歡樂|a 地|u 騎|v,小藍|n,車|n,去|v,呈貢區|n,飯店|n,吃|v,鍋包肉|n] 圖4所示為該中文句的具體的層次化解析過程。 Figure 4 Statement decomposition example圖4 語句解析示例 將整個層次化語句解析過程轉化為能夠被識別的樹形結構格式,進而實現語句解析可視化結果,如圖5所示。 Figure 5 Hierarchical statement parsing visualization example圖5 層次化語句解析可視化示例 本文實驗采用了1998年人民日報的語料和CTB數據集(部分),其中人民日報選擇22 565個句子,CTB數據集選擇10 362個句子,按照程序兼容性格式處理后作為實驗測試語料。通過二元和三元詞相結合的層次化分析方法實現語句的分析合成。 語句分析評價指標主要有:準確率P、召回率R和F-score,如式(23)~式(25)所示: (23) (24) (25) 其中,A為系統反饋的正確的解析結果個數;B為系統反饋的錯誤的解析結果個數;C為文本中總的句子個數。 通過二元、三元以及二者相結合改進模型的3種方式,分別對語料文件逐句處理,若句子最終合成結果為S,則將該句子記為系統反饋正確的解析結果;否則,記為系統反饋的錯誤的解析結果。若句子包含不可識別的詞性或標點符號,則表示系統反饋不能解析該句子。 為驗證本文方法的準確率及適用性,將實驗分為3組進行。首先對語料進行選取和預處理操作,然后分別構建二元模型、三元模型以及結合模型,對3種模型進行實驗,最終得到如表4所示的實驗結果。 通過二元規則模型,在人民日報語料上所獲取的準確率、召回率分別為70.41%,61.02%;通過三元規則模型語句分析所獲取的準確率、召回率分別為53.52%,46.00%,造成未能成功解析語句的主要原因有: (1) 對于準確率評判規則的定義不夠全面,導致反饋分析結果比較單一。 (2) 二元和三元規則的設定未能較全覆蓋語料,導致層次化分解結果出現誤差。 (3) 三元規則合成的結果值偏低,是由于語料中涉及連詞的部分并不很多,且三元規則基數小于二元規則基數,所以合成難度較大。 Table 4 Experimental results of statement hierarchical analysis 4) 由于語料庫中詞性種類偏多,在解析過程中可能未識別未登錄詞性,從而導致無法進行句法識別分析。 在改進模型中,在人民日報語料和CTB語料上的準確率、召回率分別是82.04%,80.83%和80.57%,79.16%,與其他模型相比明顯提高。而從字、詞的研究角度出發的較新的句法分析文獻[18,19]中提出的基于RNN的中文二分結構句法分析方法中的RNN-INT模型和基于詞匯化模型的漢語句法分析,其準確率分別為42.99%,77.57%。本文算法在文獻[18,19]的基礎上進一步提高了句法分析識別的準確率,同時本文所提方法是一種較新穎的句式結構研究方法。從實驗結果可以看出,只要獲取詞元的詞性和定義的層次化語句合成規則能夠滿足語料需求,同時評判結果的指標足夠全面,實驗最終得到的語句解析的準確率也就會相應提高。 在自然語言研究中,依存句法的發展始終受到漢語自身特點的限制。由于目前關于句法分析的研究大部分是從字、詞角度出發的,準確率相對而言不夠高,而從句式結構角度出發的研究相對較少,所以本文基于海量的人民日報語料,通過由語法和統計得出的語言規則,從而實現了中文的語句分析和區別于依存句法可視化句法樹分析,準確率達到82.04%,效果比較理想。本文所提方法相較于已有的依存句法方法更為靈活、新穎,對之后進一步進行文本校對、機器翻譯和信息抽取等工作具有很好的參考價值。 由于中文本身的復雜性和語義多變性等特點,使得對漢語進行句法分析研究較為困難,而本文提出的在語言規則下的句法分析算法,能夠針對句式成分,在層次化分析過程中得到有效、良好的效果。但是,隨著社會的發展,很多詞都會潛移默化地產生額外的詞性,若作為句法分析基礎工作的分詞和詞性標注不夠準確,則會增加句法分析的難度。后續需要對本文方法做進一步完善。
2.2 詞元結合規則及詞性最優模型

3 句法合成的依存關系模型構建
3.1 二元層次化模型構建

3.2 三元層次化模型構建

3.3 二、三元結合層次化模型構建






4 實驗設計與結果分析
4.1 實驗設計
4.2 結果與分析

5 結束語