賈繼康, 邵玉斌, 龍 華, 杜慶治
(昆明理工大學(xué) 信息工程與自動(dòng)化學(xué)院, 昆明 650500)
自然語言處理(natural language processing, NLP)目前已廣泛集成到Web和移動(dòng)應(yīng)用程序中, 實(shí)現(xiàn)了人與計(jì)算機(jī)之間的自然交互, 內(nèi)容包括語音合成與識(shí)別、 機(jī)器翻譯、 句法分析等. 句法分析作為自然語言處理中的關(guān)鍵技術(shù)之一已被廣泛應(yīng)用, 如文本校對(duì)、 句型識(shí)別、 詞義消岐等[1]. 句法分析的基本任務(wù)是確定句子所包含的句法單位及這些句法單位之間的依存關(guān)系, 句法分析器分為自頂向下和自底向上分析器. 自頂向下分析器從頂部到底部(樹根、 文法的開始符號(hào)到葉子、 語言的終結(jié)符號(hào))為輸入的符號(hào)串建立分析樹, 自底向上分析器是根據(jù)形式文法的重寫規(guī)則, 自葉子開始逐級(jí)向上歸約, 直到構(gòu)造出表示句子結(jié)構(gòu)的推導(dǎo)樹為止.
層次句法分析是一種典型的自底向上分析方法. Abney等[2]提出的組塊概念是句法分析的先驅(qū); Ramshaw等[3]在組塊分析中增加了{(lán)B,I,O}標(biāo)記概念, 促進(jìn)了句法分析的發(fā)展; Ratnaparkhi[4]提出了最大熵模型的句法分析器, 奠定了層次句法分析的基礎(chǔ); Pascale等[5]將最大熵模型應(yīng)用于中文句法分析, 實(shí)現(xiàn)了基于字的統(tǒng)計(jì)句法分析器. 句法分析與句式結(jié)構(gòu)的研究密不可分, 但多數(shù)研究都是探討漢語的句子結(jié)構(gòu)格局, 對(duì)將句式研究成果應(yīng)用到信息處理中的研究報(bào)道較少, 這主要是因?yàn)橹形男畔⑻幚碇芯渥咏Y(jié)構(gòu)的形式化處理在很大程度上模糊了漢語的句式結(jié)構(gòu), 因此很難從句法樹結(jié)構(gòu)中獲取句式結(jié)構(gòu). 目前, 針對(duì)語言句式的研究多數(shù)采用字類、 句式搭配或特征詞等方法.
從句式的角度, 無論修飾結(jié)合、 還是語言獨(dú)立成句, 在字、 詞或語塊角度實(shí)現(xiàn)的句法研究, 都有一定的局限性, 僅能解決局部問題, 不能做到對(duì)整個(gè)句子實(shí)現(xiàn)層次性的分析. 因此, 本文提出一種基于規(guī)則與句法合成的層次化語句分析識(shí)別算法, 該算法以句式識(shí)別框架為基礎(chǔ), 以二、 三詞元結(jié)合的層次化語句分析模型為前提, 使用具有代表性的人民日?qǐng)?bào)作為數(shù)據(jù)集, 進(jìn)行目標(biāo)測試. 測試結(jié)果表明, 該算法既保留了二、 三詞元的規(guī)則特性, 又對(duì)規(guī)則庫進(jìn)行了更全面地融合, 有效提高了層次化語句分析的準(zhǔn)確度, 進(jìn)一步提升了句式識(shí)別的精度, 驗(yàn)證了算法的適用性和有效性.
圖1 語句分析識(shí)別系統(tǒng)框架
本文使用已處理好帶有正確詞性標(biāo)注的海量數(shù)據(jù)集作為輸入語料, 如圖1所示, 依次經(jīng)過語句識(shí)別框架, 二、 三元相結(jié)合語句分析模型和多層協(xié)調(diào)的句式識(shí)別算法, 根據(jù)語句識(shí)別框架與句式識(shí)別規(guī)則庫匹配, 按定義好的正確句式規(guī)則模板識(shí)別是否為一個(gè)句子; 判別是否需要二、 三元結(jié)合模型對(duì)句子層次化解析、 合成; 二、 三元模型獲取的結(jié)果經(jīng)過多層協(xié)調(diào)句式識(shí)別算法, 最終輸出判別及解析結(jié)果.
采用漢語詞性標(biāo)記集, 共99個(gè)(22個(gè)一類, 66個(gè)二類, 11個(gè)三類)[6]. 為了句式識(shí)別的高效性及文中所涉及規(guī)則模板制定的簡易、 合理性, 將表1中細(xì)分(pos2)所示的詞性標(biāo)記集簡化為粗記(pos1)表示, 最后實(shí)現(xiàn)語料標(biāo)注.
表1 詞性標(biāo)識(shí)簡化
由于句法分析的第一步都基于詞性標(biāo)注, 因此詞性標(biāo)注的優(yōu)劣直接影響實(shí)驗(yàn)結(jié)果的精確度. 本文以現(xiàn)有規(guī)則和統(tǒng)計(jì)方法相結(jié)合的詞性標(biāo)注概念為基礎(chǔ), 實(shí)現(xiàn)詞性最優(yōu)標(biāo)注. 假設(shè)字符串序列W={w1w2w3…wi-1wiwi+1…wn},M={m1m2m3…mi-1mimi+1…mn}, 其中:W表示由n個(gè)詞元有序組合成的句子;M是W對(duì)應(yīng)的詞性序列; 字符wi表示W(wǎng)的第i個(gè)詞元, 最終wi將具有表1中pos1的詞性之一. 例如: (wi|mi)表示wi的詞性為mi.
由于漢語詞具有多類詞性, 因此根據(jù)漢語詞性標(biāo)記集可對(duì)一個(gè)詞進(jìn)行多種詞性劃分, 而考慮到生詞的詞性標(biāo)注在統(tǒng)計(jì)方法中通常通過合理處理詞匯的發(fā)射概率解決, 從而詞性標(biāo)注問題即轉(zhuǎn)化為求條件概率P(M/W)中最大的M, 即
(1)
其中:W′={w1,w2,…,wi}表示待選詞元序列;M′={m1,m2,…,mi}表示與W′相對(duì)應(yīng)的詞性序列. 由條件概率公式可得:
(2)
其中P(W)與M′,W′無關(guān), 為常數(shù), 故可省略, 即可簡化為
(3)
由于W′和W是子屬關(guān)系, 進(jìn)一步可得
(4)
由式(4)可知, 計(jì)算概率P(W′,M′)是分詞和詞性標(biāo)注問題的關(guān)鍵, 根據(jù)一階Markov的性質(zhì)[7]可得:
其中:P(mi|mi-1)為隱含Markov模型(HMM)中的狀態(tài)轉(zhuǎn)移概率;P(wi|ti)為詞匯的發(fā)射概率. 由于海量語料中含有大量的生詞, 假設(shè)詞匯序列W中有生詞xj, 其詞性可標(biāo)注為mj, 根據(jù)HMM的假設(shè),xj的詞性mj由wj的詞性mj-1決定, 則
(6)
其中M為詞性種類的數(shù)目. 根據(jù)Bayes公式, 詞匯的發(fā)射概率為
(7)
將式(6)代入式(7), 可得
(8)
對(duì)式(7)中的各概率值采用最大似然估計(jì), 可得
(9)
其中:C(mj),C(mk),C(wj-1)分別為詞性mj,mk和詞wj-1在訓(xùn)練語料中出現(xiàn)的次數(shù);C(mkmj),C(wj-1mk)分別為詞性串mkmj和wj-1mk同時(shí)出現(xiàn)的次數(shù). 經(jīng)過上述處理可更精準(zhǔn)地對(duì)語句實(shí)現(xiàn)詞性標(biāo)注.
基于中文句子結(jié)構(gòu)的分類有主謂句(動(dòng)詞謂語句式表、 形容詞謂語句式表、 主謂謂語句、 名詞謂語句)和非主謂句(無主語、 獨(dú)語句), 為了驗(yàn)證算法的可行性, 以現(xiàn)代漢語八百詞中給出的動(dòng)詞謂語句式表作為構(gòu)建規(guī)則依據(jù)[8]. 表2為識(shí)別框架規(guī)則庫, 其中model1列構(gòu)建了78條規(guī)則, 每行字符串作為一個(gè)規(guī)則獨(dú)立體.
由于句式表自身特點(diǎn)導(dǎo)致規(guī)則串長度不一, 因此為實(shí)現(xiàn)句子在系統(tǒng)中更快、 更高精度地被識(shí)別, 用快速排序方法對(duì)字符向量進(jìn)行升序排序, 最終可得如表2中model2所示的規(guī)則模板. 為了驗(yàn)證最終結(jié)果, 根據(jù)動(dòng)詞謂語句式中給出的句式結(jié)構(gòu), 提煉出如表2所示的句式規(guī)則庫. 在規(guī)則庫的基礎(chǔ)上構(gòu)建句式識(shí)別框架.
表2 識(shí)別框架規(guī)則庫
如當(dāng)字符串W={她|r唱過|v女高音|n}時(shí), 分別對(duì)應(yīng)的詞性為{r,v,n}. 而當(dāng)序號(hào)為2時(shí), model2={r,v,n}, 從而在規(guī)則掃描過程中會(huì)被成功匹配. 因此, 從語句中提煉出的句式規(guī)則能很好地用于句式檢錯(cuò)中. 在規(guī)則集的基礎(chǔ)上構(gòu)建句式識(shí)別框架, 如圖2所示. 由圖2可見, 訓(xùn)練語料首先被詞性標(biāo)注, 然后利用句式識(shí)別算法和句式規(guī)則庫進(jìn)行交互匹配, 最終輸出識(shí)別結(jié)果.
1.4.1 合成規(guī)則的構(gòu)建 為實(shí)現(xiàn)句法合成規(guī)則制定的有效性、 簡易性, 所有詞性類別都在給定的詞性標(biāo)注集中以表1中的pos1表示法作為簡易化詞性識(shí)別標(biāo)記, 最終得到由詞和詞性組成的詞元串W為
W={w1|m1,w2|m2,…,wi-1|mi-1,wi|mi,wi+1|mi+1,…,wn|mn},
詞元串w1w2w3…wi-1wiwi+1…wn中的{wi,wi+1}為W中相鄰的兩個(gè)詞, 記為一個(gè)二元組Ti, 所在位置不可顛倒, 即{wi,wi+1}≠{wi+1,wi}. 同理, 將{wj-1,wj,wj+1}記為一個(gè)三元組Tj, 其中i,j?n. 根據(jù)語法形式的合理性對(duì)現(xiàn)代漢語句子組織信息原則及現(xiàn)代漢語語法進(jìn)行研究, 并對(duì)漢語句法分析進(jìn)行解讀, 通過表1所示的詞性標(biāo)記集與語法和統(tǒng)計(jì)得出的語言規(guī)則相結(jié)合, 實(shí)現(xiàn)如表3所示的二、 三元句法合成規(guī)則的構(gòu)建. 其中:mi-1,mi,mi+1分別表示對(duì)應(yīng)詞的詞性; “*”表示無, 即當(dāng)前行為一個(gè)二元句法合成規(guī)則;hc_m表示Ti或Tj是合成詞的詞性.
表3 二、 三元句法合成規(guī)則
圖2 句式識(shí)別框架
圖3 二、 三元規(guī)則匹配示意圖
圖3描述了如何根據(jù)表3合成規(guī)則庫文件實(shí)現(xiàn)詞串中由{mi,mi+1}或{mi-1,mi,mi+1}匹配合成得到hc_m. 根據(jù)圖3, 獲取當(dāng)前Ti或Tj的詞性, 如序號(hào)為3時(shí),mi-1=v,mi=u,mi+1=n, 則hc_m=n. 即根據(jù){mi-1,mi,mi+1}或{mi,mi+1}滿足句法合成規(guī)則:
Ti={mi,mi+1},Tj={mj-1,mj,mj+1},
Mhc_m=P(xi|mi)={mi,mi+1}或Mhc_m=P(xj|mj)={mj-1,mj,mj+1},
(10)
其中Mhc_m為詞單元Ti或Tj的詞性合成結(jié)果. 詞單元Ti或Tj合成一個(gè)新詞并具有新的詞性, 記為
(11)
1.4.2 二、 三元層次化分析 輸入句子的字串序列W={w1|m1,w2|m2,…,wi|mi,…,wj|mj,…,wn|mn}, 層次化分析滿足:
(12)
在層次化分析過程中按倒序的原則實(shí)現(xiàn)規(guī)則庫匹配合成, 并非根據(jù)下標(biāo)i或j升序的方式得到ti或tj.ti或tj可能還會(huì)再與相鄰字符wi實(shí)現(xiàn)匹配, 直至規(guī)則庫中無可匹配為止.
按照W′={wn|mn,wn-1|mn-1,…,wi|mi,…,w1|m1}的順序掃描W′實(shí)現(xiàn):
式(13)是對(duì)式(12)的一個(gè)分析合成解釋, 表示根據(jù)表3中的句法合成規(guī)則, 按倒序原則對(duì)W′和規(guī)則庫中所對(duì)應(yīng)的詞性進(jìn)行交互, 實(shí)現(xiàn)規(guī)則匹配. 若倒序過程與規(guī)則庫中的hc_m屬性相同, 則輸出第i/j次合成句子成分結(jié)果Wi或Wj. 在Wi,Wj基礎(chǔ)上, 有
(14)
在最新合成句子成分結(jié)果Wi/Wj的基礎(chǔ)上, 繼續(xù)進(jìn)行規(guī)則交互輸出Wi+1/Wj+1, 其中Wi/Wj為第i/j(i,j?n)次合成句子成分結(jié)果,Wi+1/Wj+1是通過在Wi/Wj合成的基礎(chǔ)上再次根據(jù)表3的合成規(guī)則按圖3所述匹配方式實(shí)現(xiàn)合成, 直到無規(guī)則可匹配則合成結(jié)束. 例如, 字符串:
W={中國|n的|u改革|v開放|v和|c現(xiàn)代化|v建設(shè)|v繼續(xù)|v向前|v邁進(jìn)|v},
其中, “|”前為詞, “|”后為其對(duì)應(yīng)的詞性. “v”和“v”可進(jìn)行匹配合成, 根據(jù)掃描規(guī)則, “向前”和“邁進(jìn)”可成功匹配為“向前邁進(jìn)|v”, 如式(12)中的W1; 繼續(xù)由后向前的原則進(jìn)行掃描, 實(shí)現(xiàn)“繼續(xù)|v”和“向前邁進(jìn)|v”進(jìn)行匹配結(jié)合, 得到“繼續(xù)向前邁進(jìn)|v”, 如式(12)中的W2; 同理, 依次循環(huán), 得到Wi={我們的|n改革開放|v和|c現(xiàn)代化建設(shè)繼續(xù)向前邁進(jìn)|v}, 繼續(xù)獲得“改革開放|v”, “和|c”以及“現(xiàn)代化建設(shè)繼續(xù)向前邁進(jìn)|v”進(jìn)行組合而成“改革開放和現(xiàn)代化建設(shè)繼續(xù)向前邁進(jìn)|v”, 如式(12)中的Wj; 直至最后得到“我們的改革開放和現(xiàn)代化建設(shè)繼續(xù)向前邁進(jìn)|s”, 具有“s”的標(biāo)志或已無可匹配的規(guī)則, 從而層次化解析達(dá)到最優(yōu)即結(jié)束.
1.4.3 層次化語句分析算法 基于現(xiàn)代漢語語法研究中對(duì)層次分析法的思想以及在漢語上對(duì)句法分析和規(guī)則的研究, 進(jìn)而通過由語法和統(tǒng)計(jì)得出的語言分析規(guī)則實(shí)現(xiàn)層次化語法算法. 本文首次提出了二、 三詞元相結(jié)合模型, 實(shí)現(xiàn)層次化語句分析算法, 其流程如圖4所示.
圖4 層次化語句分析算法流程
算法步驟如下:
1) 讀取語句W={w1|m1,w2|m2,w3|m3,…,wi|mi,…,wn|mn};
2) 按照wi+1wi順序遍歷二、 三元規(guī)則文本;
3) 將W和規(guī)則進(jìn)行匹配;
5) 若二元規(guī)則與W不匹配, 則按照mi+1,mi,mi-1倒序方式與三元規(guī)則匹配;
7) 若三元規(guī)則不符合匹配, 則輸出Wi-1或Wj-1, 其中Wi-1/Wj-1表示上一步合成的結(jié)果;
8) 繼續(xù)判斷是否可繼續(xù)分解Wi/Wj/Wi-1/Wj-1;
9) 循環(huán)第步驟2)~8);
10) 合成結(jié)果轉(zhuǎn)換為能被識(shí)別的XML格式形式;
11) 將XML格式實(shí)現(xiàn)為可識(shí)別為目錄樹形結(jié)構(gòu);
12) 語句層次化分解可視化.
在層次化語句分解過程中, 利用分詞和詞性標(biāo)注模型對(duì)句子的詞序列獲取當(dāng)前最新詞性并實(shí)現(xiàn)標(biāo)注, 例如:
S={小明|n和|c小|a賈|n歡樂|a地|u騎|v小藍(lán)|n車|n去|v呈貢區(qū)|n飯店|n吃|v鍋包肉|n}.
圖5為具體的層次化分過程. 經(jīng)過層次化語句分解后, 將得到的Wi/Wj最終轉(zhuǎn)化為能被識(shí)別的樹形結(jié)構(gòu)格式, 進(jìn)而實(shí)現(xiàn)語句解析可視化結(jié)果, 如圖6所示.
圖5 語句分解示例
圖6 層次化語句解析可視化示例
1.5 基于多層協(xié)調(diào)的句式識(shí)別算法
圖7 多層協(xié)調(diào)句式識(shí)別算法流程
句法分析中, 針對(duì)句式的研究通常只從句子中的搭配關(guān)系、 特定句式框架、 特定字符等說明其方法的作用, 但在針對(duì)一個(gè)完整的字符串序列時(shí), 這些方法將不再適用. 本文提出的句式識(shí)別算法解決了該類問題, 算法流程如圖7所示, 其中X表示句式識(shí)別框架及規(guī)則模板的構(gòu)建, 即W在句式識(shí)別框架中通過規(guī)則模板能否匹配成功, 如果匹配失敗, 則W通過二、 三元語句分析實(shí)現(xiàn)層次化合成. 算法流程如下:
1) 輸入句子詞序列W;
2) 對(duì)W詞性標(biāo)注;
3) 利用規(guī)則模板實(shí)現(xiàn)與W交互匹配, 其中W?X當(dāng)且僅當(dāng)Vwi∈W?wi∈X;
4) 若步驟3)中W能與X匹配成功, 則成功輸出識(shí)別結(jié)果;
5) 若步驟3)中W與X無法匹配, 則W通過二、 三元語句分析模型實(shí)現(xiàn)W的層次化合成;
6) 循環(huán)步驟3)~6);
7) 輸出分析合成識(shí)別結(jié)果.
為驗(yàn)證本文方法的有效性, 在漢語數(shù)據(jù)集上進(jìn)行測評(píng)實(shí)驗(yàn).
為驗(yàn)證實(shí)驗(yàn)結(jié)果的可靠性, 本文選擇1998年1月份的人民日?qǐng)?bào)進(jìn)行測試, 對(duì)語料按每個(gè)“!”、 “?”或“?!弊鳛橐痪鋭澐? 在操作過程中分別使用9 000,11 000,13 000句作為測試集, 對(duì)測試集進(jìn)行等差形式的疊加. 此外, 本文采用傳統(tǒng)的精確率(P)、 召回率(R)和F1值作為實(shí)驗(yàn)結(jié)果的評(píng)價(jià)標(biāo)準(zhǔn), 其中:
(15)
其中平均召回率R和平均F1值的獲取采用與平均精確率同樣的方法.
為測試層次化語句識(shí)別算法的效果, 分別只在語句識(shí)別算法A和基于層次化模型的語句識(shí)別算法B下實(shí)現(xiàn)測試, 實(shí)驗(yàn)結(jié)果列于表4. 由表4可見, 在模型A和B中, 精確率、 召回率都隨測試條數(shù)的增加而呈現(xiàn)升序, 證明了語句識(shí)別算法的可行性. 實(shí)驗(yàn)結(jié)果導(dǎo)致未能成功識(shí)別的主要原因如下:
1) 由于在句式識(shí)別框架中, 規(guī)則模板的制定只從單一的動(dòng)詞謂語句式表獲取, 規(guī)則制定不全面, 所以導(dǎo)致在句子識(shí)別過程中不能更多地識(shí)別;
2) 根據(jù)語言規(guī)則, 在二、 三元語句層次化分析中規(guī)則庫的建立不完善, 所以導(dǎo)致在語句層次化分析、 合成過程中覆蓋不全面;
3) 由于語料處理的不規(guī)范, 在層次化分析規(guī)則庫中, 語料與規(guī)則庫不能成功匹配, 所以導(dǎo)致句子分析、 合成難度增大, 從而未能成功合成;
4) 由于在設(shè)定“!”、 “?”或“?!弊鳛橐痪鋭澐謺r(shí), 未能概括全面導(dǎo)致每句過長, 句式識(shí)別規(guī)則庫中與之無法匹配, 所以導(dǎo)致句子不能識(shí)別.
表4 語句識(shí)別算法實(shí)驗(yàn)結(jié)果
在模型A中, 平均精確率、 平均召回率分別為72.86%和62.67%; 在模型B中, 平均精確率、 平均召回率分別為84.65%和77.15%. 可見模型B的平均精確率比模型A的平均精確率高, 表明語句識(shí)別算法合理、 有效, 層次化語句分析中只要規(guī)則足夠合理、 全面, 就能更好地達(dá)到語句分析識(shí)別算法的精度.
綜上所述, 針對(duì)在自然語言研究中, 基于句法的發(fā)展受漢語自身特點(diǎn)限制的問題, 本文基于較有代表性的人民日?qǐng)?bào)語料, 通過由語法和統(tǒng)計(jì)得出的語言規(guī)則實(shí)現(xiàn)了中文的語句分析和識(shí)別, 使層次化語句分析識(shí)別的平均精確率、 平均召回率分別達(dá)84.65%和77.15%, 效果較理想.