楊 顥,徐 清,邵幫麗,奚雪峰*,付保川
(1.蘇州科技大學(xué) 電子與信息工程學(xué)院,江蘇 蘇州 215009;2.蘇州市虛擬現(xiàn)實(shí)智能交互及應(yīng)用技術(shù)重點(diǎn)實(shí)驗(yàn)室,江蘇 蘇州 215009;3.蘇州市公安局,江蘇 蘇州 215131)
句法分析作為自然語言處理中的一項(xiàng)核心任務(wù),對(duì)信息抽取、自動(dòng)問答及機(jī)器翻譯等自然語言處理上游任務(wù)起著重要的作用。句法分析就是識(shí)別出句子中所包含的句法單位以及句法單位之間的相互關(guān)系,并將分析結(jié)果自動(dòng)表示成句法樹結(jié)構(gòu)。其主要工作可看作是從連續(xù)的句子線性序列到具有形式化樹結(jié)構(gòu)的轉(zhuǎn)換任務(wù)[1]。
句法分析工作最早開始于20 世紀(jì)50 年代,人們?cè)谶M(jìn)行機(jī)器翻譯任務(wù)研究時(shí)發(fā)現(xiàn)必須找到一種更深層次的句子表達(dá)方法,便開始了自然語言句法結(jié)構(gòu)分析任務(wù)的研究。目前的句法分析方法主要分為基于規(guī)則和基于統(tǒng)計(jì)兩大類[2]。英文句法分析任務(wù)開始較早,同時(shí)有認(rèn)可度較高的數(shù)據(jù)集支持,其中具有代表性的如美國賓夕法尼亞州大學(xué)標(biāo)注的賓州樹庫[3],因此新的算法往往首先在英文數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn),最終延伸到其他語言的研究。Cross 等人[4]結(jié)合LSTM 神經(jīng)網(wǎng)絡(luò)基于句子成分的跨度(span)提出了一個(gè)移進(jìn)歸約的系統(tǒng),在英文賓州樹庫上的實(shí)驗(yàn)結(jié)果F1值為91.30%,法語上F1值為83.31%;Socher 等人[5]則使用了一個(gè)結(jié)構(gòu)遞歸的神經(jīng)網(wǎng)絡(luò)(Recursive Neural Network,RNN)來學(xué)習(xí)句法樹中的遞歸結(jié)構(gòu),也取得了一些成果;Hall 等人[6]提出直接從句法樹表層提取有效特征而不是通過分析句法樹內(nèi)部標(biāo)記關(guān)系,將句法分析工作的難點(diǎn)轉(zhuǎn)化成了特征工程,從而不需要考慮句法問題,大大降低了句法分析算法的復(fù)雜度,其F1值達(dá)到了89.2%。
相對(duì)于英文句法分析,中文句法中語義關(guān)系更加復(fù)雜,同時(shí)因?yàn)槿狈^為成熟的標(biāo)注理論,標(biāo)準(zhǔn)漢語樹結(jié)構(gòu)語料庫的建設(shè)也相對(duì)滯后,這使得漢語的句法分析技術(shù)發(fā)展緩慢[2]。Fung P 等人[7]采用轉(zhuǎn)換學(xué)習(xí)的方法進(jìn)行分詞/詞性標(biāo)注,用極大熵模型識(shí)別短語,在第一版CTB 上測試F1值達(dá)到了75.09%;徐潤華[8]首先自行構(gòu)建了一個(gè)具有百萬級(jí)別搭配型的詞語搭配知識(shí)庫,將詞語搭配知識(shí)和基于句法功能匹配的句法分析算法相結(jié)合,構(gòu)建了一個(gè)基于詞語搭配知識(shí)和語法功能匹配的句法分析器(CGFM),在新華社新聞?wù)Z料開放數(shù)據(jù)集上F1值約80%。
因?yàn)橹形南鄬?duì)復(fù)雜的語法結(jié)構(gòu),中文的句法結(jié)構(gòu)分析大都聚焦于對(duì)句子進(jìn)行分詞和詞性標(biāo)注,分詞和詞性標(biāo)注的好壞直接決定了分析器的好壞?;谶@一現(xiàn)狀,筆者嘗試采用雙向LSTM 神經(jīng)網(wǎng)絡(luò),并引入注意力機(jī)制[9],提出一種深度的端到端模型,將分詞、詞性標(biāo)注及句法結(jié)構(gòu)放在一起分析,簡化了句法分析任務(wù),降低了研究人員在分詞和詞性標(biāo)注上的專業(yè)性要求。在中文標(biāo)準(zhǔn)數(shù)據(jù)集CTB9 上的實(shí)驗(yàn)表明,具有一定可行性和較好的識(shí)別率。
CTB 項(xiàng)目1998 年開始于賓夕法尼亞州大學(xué),自2001 年發(fā)布Chinese Treebank 2.0 以來,16 年發(fā)布的最新版Chinese Treebank 9.0 已經(jīng)成為了一個(gè)具有多樣化數(shù)據(jù)來源且數(shù)量龐大的中文句法結(jié)構(gòu)數(shù)據(jù)集。賓州英文樹庫(PTB)的建立,驗(yàn)證了英文詞性標(biāo)注及語法分析器English Part-Of-Speech(POS)Taggers 和Parsers的可用性,為中文樹庫的發(fā)展奠定了基礎(chǔ)[3]。中文樹庫建設(shè)團(tuán)隊(duì)借鑒英文樹庫經(jīng)驗(yàn)并尋求專業(yè)的中文語言學(xué)家的幫助,最終將樹庫的標(biāo)注任務(wù)劃分為分詞、詞性標(biāo)注和切分短語結(jié)構(gòu)三個(gè)子任務(wù),以實(shí)現(xiàn)對(duì)不同層次的句法成分組合特點(diǎn)進(jìn)行細(xì)致的描述[10]。其標(biāo)注策略沿用了英文骨架分析(skelton parsing)的思想,形成比較扁平的句法結(jié)構(gòu)樹,并對(duì)短語的功能進(jìn)行了標(biāo)記[11]。CTB 結(jié)構(gòu)如圖1 所示。
圖1 CTB 數(shù)據(jù)集結(jié)構(gòu)
人工將大量的普通中文語句標(biāo)注成標(biāo)準(zhǔn)化的句法結(jié)構(gòu)樹,將耗費(fèi)巨大的人力物力。同時(shí)即便有統(tǒng)一的標(biāo)注存在,但其中仍然存在著標(biāo)注人員個(gè)人的主觀色彩,不可避免的使得最終的標(biāo)注標(biāo)準(zhǔn)化結(jié)果間存在差異。該文的主要任務(wù)是借用深度神經(jīng)網(wǎng)絡(luò),完成從自然語句到標(biāo)準(zhǔn)化句法結(jié)構(gòu)樹的自動(dòng)生成標(biāo)注工作。
中文樹庫的數(shù)據(jù)集分為raw、segmened、postagged、bracketed 四個(gè)部分,文中選取了其中raw 和bracketed兩部分作為原始數(shù)據(jù)來源。利用word2vec 模型對(duì)原句進(jìn)行詞向量轉(zhuǎn)換[12],并將原數(shù)據(jù)轉(zhuǎn)換成包含原句及其對(duì)應(yīng)的樹結(jié)構(gòu)的二元組作為神經(jīng)網(wǎng)絡(luò)的輸入來訓(xùn)練模型。最終實(shí)現(xiàn)輸入原句得到相應(yīng)的樹結(jié)構(gòu)的效果。
如圖2 所示,文中所采用的方法,首先,將CTB 數(shù)據(jù)集原始數(shù)據(jù)轉(zhuǎn)換成標(biāo)準(zhǔn)的二元組作為輸入,該二元組包括原始句子及其對(duì)應(yīng)的句法分析樹;然后,通過Tuple2Instance 方法,將標(biāo)準(zhǔn)二元組轉(zhuǎn)化成模型的輸入Instance,每一個(gè)Instance 包括句法樹中的句子關(guān)系、短語關(guān)系、詞性標(biāo)注、分詞四個(gè)部分;接著,將Instance 作為輸入,訓(xùn)練下文所提到的Encoder-Decoder 模型;最后,經(jīng)過調(diào)參及訓(xùn)練得到最優(yōu)模型。
圖2 算法流程圖
將樹結(jié)構(gòu)的自動(dòng)生成看作一個(gè)Seq2Seq 任務(wù)[13],輸入中文自然語句X=(x1,x2,…,xn),其中xi表示句子中的第i 個(gè)單詞,n 表示句子長度;輸出序列Y=(y1,y2,…,ym),其中m 表示得到的樹結(jié)構(gòu)序列長度。希望由給定的輸入序列X 得到語義解析樹Y 的條件概率p(Y|X)
其中yj表示輸出序列中的第j 個(gè)token,Y1j-1表示輸出序列中的第1 個(gè)到第j-1 個(gè)序列,表示輸出的自然語句。筆者針對(duì)這個(gè)Seq2Seq 任務(wù),結(jié)合CTB 的結(jié)構(gòu)[10]表示和Liu 等人[14]相關(guān)工作提出了一種Encoder-Decoder 模型。模型結(jié)構(gòu)如圖3 所示。
圖3 文中模型結(jié)構(gòu)
2.3.1 編碼結(jié)構(gòu)
文中采用雙向的長短時(shí)記憶網(wǎng)絡(luò)(bi-LSTM)作為編碼器[15],意在通過該編碼器將輸入的中文句子Χ 轉(zhuǎn)化成向量表示。首先,將句子中的每一個(gè)token xi都轉(zhuǎn)化成一個(gè)向量表示,其中表示隨機(jī)初始化的詞嵌入,表示預(yù)訓(xùn)練的詞嵌入,W1表示(dw+dp)×dinput維度的矩陣,其中w、p 和input 分別表示分詞的詞向量、預(yù)訓(xùn)練的詞向量和輸入分詞的維度,b1是一維n 列的隨機(jī)向量,“+”表示將橫向拼接在一起。最終通過該編碼器得到句子的隱層單元表示
2.3.2 深層解碼結(jié)構(gòu)
實(shí)驗(yàn)證明,輸入序列的長度將對(duì)神經(jīng)網(wǎng)絡(luò)的預(yù)測結(jié)果產(chǎn)生一定影響,而自然漢語語句標(biāo)注成標(biāo)準(zhǔn)的CTB 樹結(jié)構(gòu)后,其長度增加了不少。在文中的測試集上統(tǒng)計(jì)顯示,自然語句的平均長度為30,標(biāo)注過后的樹結(jié)構(gòu)平均長度為99。筆者對(duì)CTB 樹結(jié)構(gòu)分析發(fā)現(xiàn),每個(gè)樹結(jié)構(gòu)序列中包含Syntactic Brackets、POS tags、分詞三個(gè)部分?;诖私Y(jié)構(gòu),文中提出了一種深層解碼結(jié)構(gòu),將CTB 樹結(jié)構(gòu)序列拆分成以下三個(gè)層次,分別為分詞,其中p、u、v 分別表示對(duì)應(yīng)的個(gè)數(shù)。每個(gè)部分在端到端框架下分開進(jìn)行解碼預(yù)測,其概率分布可表示為
①Syntactic Brackets 預(yù)測
在這里采用了一個(gè)序列解碼器如圖3 第一層上所示,預(yù)測結(jié)構(gòu)中的每一個(gè)token 對(duì)應(yīng)樹結(jié)構(gòu)中的父節(jié)點(diǎn),詞條間關(guān)系及詞條詞性當(dāng)作其子節(jié)點(diǎn),以插入的機(jī)制插入合適的位置,該解碼器的隱層單元如下
結(jié)構(gòu)中的token 的概率分布表示如下
其中權(quán)重βji為
②POS tags 預(yù)測
POS tags 的預(yù)測與之前所做的Syntactic Brackets 預(yù)測密切聯(lián)系,在每個(gè)Syntactic Bracket 中可能包含著k 個(gè)分詞和k 個(gè)POS tags,因此,可以將POS tags 表示為,其中表示第k 個(gè)中的第mk個(gè)POS tags。
其詞向量表示
故該解碼器的隱層單元表示如下
POS tags 預(yù)測的概率分布如下
③分詞預(yù)測
分詞的預(yù)測基于Syntactic Brackets 和POS tags 預(yù)測,每一個(gè)關(guān)系內(nèi)僅對(duì)應(yīng)一個(gè)分詞。故分詞序列可表示為;詞向量表示為。POS tags 的隱藏單元的輸出作為分詞預(yù)測的輸入,其解碼單元隱藏層如下
分詞預(yù)測的概率分布如下
中文樹庫共包含來自于報(bào)刊新聞、雜志文章、廣播會(huì)話等八個(gè)大類的3 726 條數(shù)據(jù)(見表1)。該次實(shí)驗(yàn)分別選取了新聞、雜志文章及微博三個(gè)大類的1 155 篇文章作為數(shù)據(jù)的原始輸入。此外筆者對(duì)這1 155 篇文章進(jìn)行了簡單的數(shù)據(jù)清洗,選取了其中句子長度在20 到80 之間的句子,并且去除掉了其中含有特殊符號(hào)及網(wǎng)址的句子,最終得到了10 012 條數(shù)據(jù),共包含23 198 個(gè)字符。并通過word2vec 將數(shù)據(jù)訓(xùn)練得到100 維的詞向量。文中選取了10 012 條數(shù)據(jù)中的7 288 條數(shù)據(jù)作為訓(xùn)練集,1 724 條數(shù)據(jù)作為驗(yàn)證集,1 000 條數(shù)據(jù)作為測試集進(jìn)行實(shí)驗(yàn)。
表1 CTB 數(shù)據(jù)來源及分布
筆者的實(shí)驗(yàn)軟件采用Python(2.7.12 版本)、Pytorch(1.1.0 版本)、CUDA(10.1 版本),實(shí)驗(yàn)操作系統(tǒng)為Ubuntu16.04;硬件計(jì)算平臺(tái)采用英特爾I5、16G 內(nèi)存、英偉達(dá)GTX2080TI、11G 顯存。實(shí)驗(yàn)?zāi)P驮贘.M.Liu[14]模型基礎(chǔ)上,經(jīng)過預(yù)處理等代碼修改后形成該系統(tǒng)模型代碼(模型開源代碼地址:https://github.com/dressnotycoon/Chinese-syntactic-analysis/)。
與文中實(shí)驗(yàn)?zāi)P拖啾葘?duì)的系統(tǒng)有如下五類:
①HMM+中心驅(qū)動(dòng)模型[16]采用傳統(tǒng)機(jī)器學(xué)習(xí)方法,首先,應(yīng)用基于隱馬爾科夫模型(HMM)的方法進(jìn)行一體化的分詞/詞性標(biāo)注;然后,利用中心驅(qū)動(dòng)模型進(jìn)行短語識(shí)別。在賓州中文樹庫CTB1 數(shù)據(jù)集上取得了F1值76.4%的成果。
②K-best 句法分析器融合算法[17]提出了一個(gè)基于線性模型的通用框架,以結(jié)合來自多個(gè)解析器的k 個(gè)最佳解析輸出。通過將當(dāng)時(shí)表現(xiàn)最好的頭部驅(qū)動(dòng)的詞法化模型和基于潛在注釋的非詞法化模型相結(jié)合,在賓州中文樹庫CTB5 上F1值為85.5%。
③向上學(xué)習(xí)方法改進(jìn)的移進(jìn)-歸約算法[18]在傳統(tǒng)的移進(jìn)-歸約句法分析系統(tǒng)上進(jìn)行改進(jìn),首先利用伯克利句子分析器對(duì)大規(guī)模的無標(biāo)注數(shù)據(jù)進(jìn)行自動(dòng)標(biāo)注,將標(biāo)注的結(jié)果再作為改進(jìn)分析器的額外訓(xùn)練數(shù)據(jù),在賓州中文樹庫CTB5 上F1值為82.4%。
④基于條件隨機(jī)場模型的分塊算法[2]將漢語句法分析分為三個(gè)階段:首先,基于條件隨機(jī)場模型將句子分塊;其次,對(duì)各句子塊進(jìn)行句法分析得到句子塊級(jí)別的句法樹;最后,將各句子塊句法樹整合成完整的句子結(jié)構(gòu)樹。在賓州中文樹庫CTB8 上F1值為75%。
⑤抽取lookahead 特征的移進(jìn)-歸約算法[19]利用一個(gè)快速的神經(jīng)模型來提取前向特征,并構(gòu)建了一個(gè)雙向的LSTM 模型,該模型利用完整的句子信息來預(yù)測每個(gè)單詞的開頭和結(jié)尾的成分的層次結(jié)構(gòu),在賓州中文樹庫CTB5 上F1值為85.5%。
這里筆者使用精確率、召回率、F1值[20]來評(píng)價(jià)文中模型的優(yōu)劣,其中精確率表示預(yù)測的結(jié)果中正確的短語結(jié)構(gòu)個(gè)數(shù),計(jì)算公式為
召回率表示我們預(yù)測結(jié)構(gòu)的全面性,計(jì)算公式為
精確率和召回率通常情況下相互制約,因此,筆者按照評(píng)價(jià)習(xí)慣引入了F1值來平衡兩者關(guān)系,即
首先對(duì)在驗(yàn)證集上得到的F1值分布進(jìn)行了統(tǒng)計(jì),如圖4 所示。其中F1值超過0.9 的數(shù)據(jù)占總測試數(shù)的13.6%,且這部分平均的F1值為0.956;F1值超過0.8 的數(shù)據(jù)占總測試數(shù)據(jù)的47.3%,且平均F1值為0.876;F1值超過0.7 的數(shù)據(jù)占總測試數(shù)據(jù)的82.1%,且平均F1值為0.826。
圖4 F1 值分布
此外,該文也對(duì)驗(yàn)證集上不同長度的語句的F1值進(jìn)行了統(tǒng)計(jì)分析。文中驗(yàn)證集的句子長度在5 到60 之間,平均長度為29,如圖5 所示,發(fā)現(xiàn)當(dāng)句子長度增大的時(shí)候不管是精確率還是召回率都緩慢的降低,其中在句子長度小于20 的時(shí)候表現(xiàn)較好,但是整體上維持在一個(gè)不錯(cuò)水平,F(xiàn)1值保持在0.70 以上。
圖5 不同長度的語句的F1 值、召回率及精確率
最后選取了同樣使用賓州中文樹庫CTB作為數(shù)據(jù)集的算法系統(tǒng),與文中所提到的方法進(jìn)行了對(duì)比。由表2 可見,模型1 由于賓州中文樹庫CTB1 發(fā)布較早、數(shù)據(jù)量較少,因此結(jié)果相對(duì)較差。模型2 由于融合了當(dāng)時(shí)表現(xiàn)極為優(yōu)秀的句法分析系統(tǒng),因此也有較好的結(jié)果。模型3和模型5 均針對(duì)移進(jìn)-歸約算法做出了一定的修改,其中模型3 將其他句法分析器得到的分析結(jié)果作為自己分析器額外的訓(xùn)練數(shù)據(jù),其他分析器的精度也將影響其分析器本身的結(jié)果,故其F1值略低于模型5。模型4 將句子分塊操作,再整合各塊句法子樹的方法,在一定程度上影響了句子的完整性,其在CTB5 上的結(jié)果較差,但針對(duì)其文中提到的特定信息檢索系統(tǒng)有一定幫助。由表2 可知,模型6 具有可行性且具有一定分析效果,但仍然有進(jìn)一步提升的空間。未來繼續(xù)增加訓(xùn)練數(shù)據(jù),相信將得到更好效果。
表2 算法系統(tǒng)對(duì)比
深度學(xué)習(xí)及神經(jīng)網(wǎng)絡(luò)算法給句法分析任務(wù)提供了新的方法和可能,但完全的中文句法結(jié)構(gòu)分析任務(wù)仍然是中文信息處理中的一個(gè)難題。目前還面臨著諸多的難題,比如:缺少相關(guān)的樹結(jié)構(gòu)數(shù)據(jù)集、照搬英文的標(biāo)注理念是否完全適合中文的語法習(xí)慣等。文中采用的深度學(xué)習(xí)算法,直接提供了一種序列到序列的轉(zhuǎn)換方法,使研究人員不需要再對(duì)中文分詞及詞性標(biāo)注做太多的工作,但是仍然需要依賴龐大的數(shù)據(jù)量。未來將逐步擴(kuò)大訓(xùn)練的數(shù)據(jù)量,并探索新的方法,能夠更好的適應(yīng)中文特有的句法結(jié)構(gòu),以期望進(jìn)一步提高分析器的性能。