谷 波,王瑞波,李濟(jì)洪,李國(guó)臣
(1.山西大學(xué) 計(jì)算機(jī)與信息技術(shù)學(xué)院,山西 太原030006;2.山西大學(xué) 軟件學(xué)院,山西 太原030006;3.太原工業(yè)學(xué)院,山西 太原030008)
句法分析是自然語(yǔ)言處理中常用的核心技術(shù)之一,許多自然語(yǔ)言處理任務(wù)都依賴(lài)于它。通常來(lái)說(shuō),句法分析的任務(wù)是將詞的線性序列表示為一個(gè)句子,分析成一棵樹(shù)結(jié)構(gòu)的形式。
句法分析的理論大致上可以分為兩類(lèi),一類(lèi)是基于喬姆斯基提出的短語(yǔ)結(jié)構(gòu)文法[1-3]的上下文無(wú)關(guān)文法(CFG),以及之后擴(kuò)展的概率上下文無(wú)關(guān)文法(PCFG)[4-5],一般將這種分析方法稱(chēng)之為成分(constituency)句法分析,分析的結(jié)果是一棵短語(yǔ)結(jié)構(gòu)樹(shù),葉子節(jié)點(diǎn)是詞,樹(shù)的所有的中間節(jié)點(diǎn)都是短語(yǔ)(成分);另一類(lèi)是基于L Tesniere提出的依存語(yǔ)法理論,這種分析一般稱(chēng)之為依存(dependency)分析[2],依存分析的結(jié)果是一棵依存樹(shù),依存樹(shù)描述的是句子中詞語(yǔ)之間非對(duì)稱(chēng)的二元關(guān)系。本文所指的層次句法分析是前一種,即成分句法分析。
早期的成分句法分析大多是基于給定的文法(也稱(chēng)為產(chǎn)生式或規(guī)則)進(jìn)行的。這種方法需要事先人工構(gòu)建句法規(guī)則,容易實(shí)施。但缺點(diǎn)是不能解決句法多義性問(wèn)題,且人工構(gòu)建的句法規(guī)則通常不能覆蓋全部的句子或短語(yǔ)的形式。為此,Briscoe[6]等提出了一個(gè)基于概率的自底向上的LR分析器,而Collins[7]則是在自頂向下的句法分析過(guò)程中使用概率來(lái)進(jìn)行剪枝。近年來(lái),主流的一些句法分析方法則轉(zhuǎn)向于基于無(wú)規(guī)則的自底向上的移進(jìn)歸約的分析[8-10],這類(lèi)方法使用分類(lèi)器根據(jù)當(dāng)前分析棧和輸入隊(duì)列的特征,對(duì)移進(jìn)和歸約的動(dòng)作進(jìn)行概率判斷,選擇當(dāng)前特征下最有可能的動(dòng)作執(zhí)行,從而自底向上地構(gòu)建出句法樹(shù)。Liu[11]等則在移進(jìn)歸約分析中通過(guò)BiLSTM抽取Lookahead特征來(lái)提高分析器的性能,該系統(tǒng)在賓州英文樹(shù)庫(kù)上的F1值達(dá)到了91.7%,在賓州中文樹(shù)庫(kù)CTB 5.1上的F1值達(dá)到了85.5 %。Cross[12]等也利用了LSTM基于句子成分的跨度(span)提出了一個(gè)移進(jìn)歸約的系統(tǒng),在英文賓州樹(shù)庫(kù)上的實(shí)驗(yàn)結(jié)果F1值為91.30%,法語(yǔ)上F1值為83.31%。Socher[13]等則直接使用一個(gè)結(jié)構(gòu)遞歸的神經(jīng)網(wǎng)絡(luò)(recursive neural network,RecNN)學(xué)習(xí)句法樹(shù)的遞歸結(jié)構(gòu),進(jìn)行了英文的句法分析。另外,也有研究者融合多個(gè)句法分析器進(jìn)行句法分析,通過(guò)重排候選樹(shù)集合提高了句法分析的性能[14],當(dāng)使用人工正確的分詞和詞性標(biāo)注時(shí),該分析器在中文賓州樹(shù)庫(kù)CTB2上的F1值為89.8%,在中文賓州樹(shù)庫(kù)CTB 5上的F1值為86.8%。朱慕華[15]等則是使用向上學(xué)習(xí)策略,提高了系統(tǒng)的速度,最終的系統(tǒng)在中文賓州樹(shù)庫(kù)CTB 5.1的F1值達(dá)到了82.4%。目前這些方法中都用到詞性標(biāo)注,而且詞性標(biāo)注正確率對(duì)于系統(tǒng)的最終性能影響非常大。
然而賓州樹(shù)庫(kù)的詞性標(biāo)注體系與國(guó)內(nèi)主流的中文詞性標(biāo)注體系還是有較大差別的。在國(guó)內(nèi)主流的詞性標(biāo)注體系中,中文里的詞無(wú)論在句子中主語(yǔ)還是謂語(yǔ)位置,其詞性基本上是確定的,也就是說(shuō),動(dòng)詞可以做主語(yǔ)、賓語(yǔ)是常態(tài)。在中文里,連續(xù)多個(gè)詞標(biāo)注為動(dòng)詞也是常見(jiàn)之事,因此,按照英文以詞性為基礎(chǔ)的句法分析方法似乎不太合適。
對(duì)中文句法分析的研究,文獻(xiàn)中大多是借鑒英語(yǔ)的句法分析方法,少有從中文的句法分析理論出發(fā)來(lái)研發(fā)相應(yīng)的技術(shù)。許多語(yǔ)言學(xué)家認(rèn)為,中文是意合語(yǔ)言,形式標(biāo)記不明顯,相比較英文而言,中文句法分析較難。特別是完全中文句法分析(既有樹(shù)結(jié)構(gòu)又有樹(shù)節(jié)點(diǎn)成分的短語(yǔ)類(lèi)型)技術(shù)更難。朱德熙[16]和陸儉明[17]先生的現(xiàn)代漢語(yǔ)語(yǔ)法理論認(rèn)為中文的短語(yǔ)和句子是屬于同一個(gè)層面的范疇,中文句子結(jié)構(gòu)與短語(yǔ)結(jié)構(gòu)是同構(gòu)的。中文句子并不像英文那樣詞構(gòu)成短語(yǔ),短語(yǔ)構(gòu)成句子,句子主要是SVO結(jié)構(gòu)。中文的詞構(gòu)成短語(yǔ),詞也可直接構(gòu)成句子,短語(yǔ)與句子之間是實(shí)現(xiàn)關(guān)系,不是構(gòu)成關(guān)系。句子與短語(yǔ)的結(jié)構(gòu)都可以二分結(jié)構(gòu)來(lái)分析,中文的層次分析法就是二分結(jié)構(gòu)的句法分析。依照這個(gè)理論體系,自動(dòng)句法分析只需要每次對(duì)各成分一分為二。本文探索基于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)機(jī)器學(xué)習(xí)模型,來(lái)實(shí)現(xiàn)二分結(jié)構(gòu)的句法分析。相較于傳統(tǒng)的成分句法分析,本文方法主要有以下幾個(gè)特點(diǎn):
第一,對(duì)句子只做二分的結(jié)構(gòu)分析,不做短語(yǔ)類(lèi)型識(shí)別。依據(jù)層次分析理論,中文句子的結(jié)構(gòu)是層次二分結(jié)構(gòu),結(jié)構(gòu)類(lèi)型與短語(yǔ)結(jié)構(gòu)類(lèi)型相同。在中文里,相比較而言句子的層次結(jié)構(gòu)是理解句意的關(guān)鍵,因此我們只做層次結(jié)構(gòu)分析。這樣可以使得中文的短語(yǔ)以及整個(gè)句子的分析統(tǒng)一在一個(gè)二分結(jié)構(gòu)的框架內(nèi),使得句法分析的問(wèn)題從形式上得以簡(jiǎn)化,也使得算法實(shí)現(xiàn)起來(lái)比較簡(jiǎn)潔、高效。
第二,基于哈夫曼編碼來(lái)表示句法樹(shù)。由于采用二分的結(jié)構(gòu),我們語(yǔ)料庫(kù)中標(biāo)注的句子都是一個(gè)滿(mǎn)二叉樹(shù)。把中間節(jié)點(diǎn)按照哈夫曼編碼的方式進(jìn)行標(biāo)記,使得語(yǔ)料庫(kù)中的句子標(biāo)注形式非常簡(jiǎn)單(沒(méi)有像傳統(tǒng)的樹(shù)庫(kù)那樣使用多重括號(hào)對(duì)的形式),方便閱讀、存儲(chǔ)以及后期的分析處理。
第三,使用RNN模型,只用詞特征。該方法沒(méi)有使用基于轉(zhuǎn)移的移進(jìn)歸約的方法,也不是基于chart的自頂向下的方法,而是通過(guò)遞歸地使用序列標(biāo)注器進(jìn)行句法分析。相對(duì)于基于CFG的句法分析方法,這種方法的優(yōu)點(diǎn)是不需要詞性信息,也不需要中心詞信息或者分析棧和輸入隊(duì)列等的特征。本文的方法直接以詞序列為輸入,通過(guò)同時(shí)學(xué)習(xí)詞表示向量(word-embedding)和模型參數(shù),訓(xùn)練得到一個(gè)序列標(biāo)注器,遞歸地使用序列標(biāo)注器來(lái)進(jìn)行句法分析。
第四,使用hinge-loss的詞間隔標(biāo)注策略。我們把句法分析看成是一個(gè)將序列逐層二分的問(wèn)題,其任務(wù)就是每次尋找一個(gè)可以將序列一分為二的最優(yōu)的間隔標(biāo)記位置,即尋找使得分割序列的間隔最大的得分位置,并以hinge-loss作為損失函數(shù)。這樣在使用RNN時(shí)可以有效地利用間隔左右兩邊所有詞的信息來(lái)共同確定詞間隔的標(biāo)注。
第五,用m×2交叉驗(yàn)證序貫檢驗(yàn)比較模型的性能。傳統(tǒng)模型比較方法是在驗(yàn)證集上直接對(duì)比大小,從統(tǒng)計(jì)意義上來(lái)說(shuō)是不可靠的。本文采用了m×2交叉驗(yàn)證(以下簡(jiǎn)寫(xiě)為m×2 CV)序貫t-檢驗(yàn)。m×2 CV是將語(yǔ)料進(jìn)行m次兩等份切分,從而得到指標(biāo)估計(jì)的方差估計(jì),逐步增加m構(gòu)建相應(yīng)的序貫t-檢驗(yàn),使得對(duì)算法模型的性能的對(duì)比更加準(zhǔn)確、可靠。
除了本文提出的在hinge-loss損失下,對(duì)詞間隔進(jìn)行標(biāo)注的RNN模型(簡(jiǎn)稱(chēng)RNN-INT)外,還對(duì)比了RNN[18-19]模型(recurrent neural network,RNN)和LSTM[20-21]模型,以及條件隨機(jī)場(chǎng)(CRF)[22]模型各自在不同窗口下的性能。結(jié)果表明本文提出的RNN-INT模型在窗口為1時(shí)取得最好的結(jié)果,并且在m×2 交叉驗(yàn)證的序貫t-檢驗(yàn)中是顯著優(yōu)于其他模型的。在測(cè)試集上,以PARSE-VAL[23]的評(píng)測(cè)體系,短語(yǔ)的塊F1值達(dá)到了71.25%,整句的正確率達(dá)到了約43%。
論文內(nèi)容安排如下,第1節(jié)介紹中文二分結(jié)構(gòu)樹(shù)庫(kù)的標(biāo)注方案,第2節(jié)介紹把二分結(jié)構(gòu)句法分析轉(zhuǎn)換為序列分割問(wèn)題以及采用的標(biāo)記方案,第3節(jié)介紹RNN-INT模型,第4節(jié)是實(shí)驗(yàn)設(shè)置方案以及m×2 CV序貫t-檢驗(yàn)方法,第5節(jié)是結(jié)果與分析,第6節(jié)是總結(jié)以及下一步計(jì)劃進(jìn)行的工作。
根據(jù)中文層次分析法的理論,中文的每個(gè)句法成分都可以看成是由左、右兩個(gè)子成分構(gòu)成,給定的中文句子均可分析成一棵滿(mǎn)二叉樹(shù)(full binary tree)。從朱德熙先生的觀點(diǎn)來(lái)看,除了少數(shù)外來(lái)詞,中文的絕大多數(shù)多字詞內(nèi)部也是二分結(jié)構(gòu)的,詞的內(nèi)部結(jié)構(gòu)關(guān)系、短語(yǔ)的內(nèi)部結(jié)構(gòu)以及句子的內(nèi)部結(jié)構(gòu)關(guān)系是一致的。因此,如果將字作為最終葉節(jié)點(diǎn)的話(huà),這種二分結(jié)構(gòu)甚至可以將中文的分詞一并納入到一個(gè)句子的二分句法結(jié)構(gòu)中。
中文的二分句法結(jié)構(gòu)中的句法成分有6種內(nèi)部結(jié)構(gòu)[16-17],包括偏正結(jié)構(gòu)、述賓結(jié)構(gòu)、述補(bǔ)結(jié)構(gòu)、主謂結(jié)構(gòu)、聯(lián)合結(jié)構(gòu)和連謂結(jié)構(gòu)。除了聯(lián)合和連謂結(jié)構(gòu)可能出現(xiàn)三個(gè)或三個(gè)以上的并列的成分,其他4種都是自然的二分結(jié)構(gòu)。對(duì)于三個(gè)或三個(gè)以上的成分構(gòu)成的聯(lián)合或連謂結(jié)構(gòu),采用從左到右的順序?qū)⑵湟来芜M(jìn)行二分處理。
依據(jù)以上分析原則,我們標(biāo)注了一個(gè)中文樹(shù)庫(kù),每棵標(biāo)注的句法樹(shù)是滿(mǎn)二叉樹(shù),即樹(shù)中任何一個(gè)非葉子節(jié)點(diǎn)的句法成分,都由左、右兩個(gè)子樹(shù)(子成分)組成。目前樹(shù)庫(kù)中有30 034個(gè)簡(jiǎn)單句(無(wú)標(biāo)點(diǎn)),都是從北大新聞?wù)Z料(有人工分詞和詞性標(biāo)注,但我們沒(méi)有使用詞性)標(biāo)注中選取的,沒(méi)有標(biāo)注成分的內(nèi)部結(jié)構(gòu)。
一個(gè)句子的二分結(jié)構(gòu)句法形式是一個(gè)滿(mǎn)二叉樹(shù),可以采用哈夫曼編碼進(jìn)行標(biāo)記,這種表示方式可以以一種非遞歸的線性的形式描述出遞歸的二分的層次結(jié)構(gòu)的句法樹(shù)的全部信息。這樣要比括號(hào)對(duì)的表示形式更加簡(jiǎn)潔、直觀,方便標(biāo)注人員閱讀和標(biāo)記,也便于存儲(chǔ)。因此我們?cè)谡Z(yǔ)料庫(kù)中對(duì)詞的間隔使用了哈夫曼編碼進(jìn)行標(biāo)記(huff-labels)。給定一個(gè)有n個(gè)詞的句子,對(duì)其n-1個(gè)間隔(或稱(chēng)為句法成分的切分位置)進(jìn)行標(biāo)記,將一個(gè)二叉的句法樹(shù)的結(jié)構(gòu),表示成n-1個(gè)數(shù)字。具體的標(biāo)記方法如下:
(1) 句法樹(shù)的根節(jié)點(diǎn)的編碼標(biāo)記為1;
(2) 對(duì)于句法樹(shù)中的非根中間節(jié)點(diǎn),假定其父節(jié)點(diǎn)的編碼為h,按照如下方式確定其對(duì)應(yīng)的哈夫曼的編碼:
a) 如果該節(jié)點(diǎn)是其父節(jié)點(diǎn)的左子節(jié)點(diǎn),則其編碼為父節(jié)點(diǎn)的哈夫曼編碼乘以2,即h*2。
b) 如果該節(jié)點(diǎn)是其父節(jié)點(diǎn)的右子節(jié)點(diǎn),則其編碼為父節(jié)點(diǎn)的哈夫曼編碼乘以2,然后再加1,即h*2+1。
例如,“我們 班 有 許多 外國(guó) 學(xué)生”,對(duì)應(yīng)的句法樹(shù)形式如圖1所示。
圖1 二分結(jié)構(gòu)句法樹(shù)的哈夫曼編碼標(biāo)記
圖1中,矩形表示句法樹(shù)的葉子節(jié)點(diǎn)(詞),圓形表示句法樹(shù)中非葉子節(jié)點(diǎn)(短語(yǔ)),圓形中間的數(shù)字表示該間隔位置對(duì)應(yīng)的哈夫曼編碼(圖中顯示的是其二進(jìn)制形式)。通過(guò)實(shí)線連接的葉子和非葉子節(jié)點(diǎn)構(gòu)成了一棵二分結(jié)構(gòu)的成分句法樹(shù)(滿(mǎn)二叉樹(shù))。圖中用虛線鏈接的兩個(gè)圓形節(jié)點(diǎn),是為了清楚地顯示非葉子節(jié)點(diǎn)和它對(duì)應(yīng)的詞間隔的位置而增加的。我們以文本格式保存二分結(jié)構(gòu)句法樹(shù),并且使用分號(hào)“;”將句子和它的對(duì)應(yīng)的哈夫曼編碼十進(jìn)制序列分開(kāi),并列放在一行中,編碼之間也用空格分隔。這樣就把一個(gè)句子和它的二分結(jié)構(gòu)的句法樹(shù)的編碼描述放在一行中,表示成一個(gè)線性形式。最終的表示示例如下:
我們 班有 許多 外國(guó) 學(xué)生;2 1 3 7 15。
本文采用自頂向下的分析方法,將句法分析看作把一個(gè)序列逐層向下分割為兩個(gè)子序列的遞歸過(guò)程。每次都把一個(gè)長(zhǎng)序列分割成兩個(gè)短的子序列,然后再分別對(duì)兩個(gè)短的序列進(jìn)行遞歸分割,直到分隔至每個(gè)詞。這樣句法分析就轉(zhuǎn)換為一個(gè)逐層的序列標(biāo)注問(wèn)題,從而可以把機(jī)器學(xué)習(xí)中序列標(biāo)注技術(shù)應(yīng)用到二分結(jié)構(gòu)的句法分析上。
如果對(duì)句子的所有可能句法樹(shù)都計(jì)算其得分,然后選擇得分最大句法樹(shù)為最終分析結(jié)果,這樣的計(jì)算量是非常巨大的。Socher[13]等使用RecNN對(duì)英文進(jìn)行句法分析時(shí)使用了貪心算法,他們?cè)趯?shí)驗(yàn)中發(fā)現(xiàn),在每步保存k個(gè)最好的子樹(shù),最終的句法分析結(jié)果并不比僅保存一個(gè)最好的子樹(shù)的結(jié)果好。本文采用了貪心算法,每一次二分的時(shí)候,只保留當(dāng)前序列劃分為左右兩個(gè)子序列的最大得分的結(jié)果,即只考慮當(dāng)前最優(yōu),而不考慮最終得到的樹(shù)的全局最優(yōu)。
序列標(biāo)記策略有多種[24-25],不同的序列標(biāo)記方案在不同的機(jī)器學(xué)習(xí)模型下的性能是有明顯差異的。我們針對(duì)二分結(jié)構(gòu)句法分析任務(wù)提出了一種對(duì)詞間隔進(jìn)行標(biāo)記的方案,下面以例句“我們 班 有 許多 外國(guó) 學(xué)生”進(jìn)行說(shuō)明。對(duì)于切分后的左右兩個(gè)成分,都按照從左到右深度優(yōu)先的順序進(jìn)行描述。
(1) BI標(biāo)記:每次切分都是劃分成兩整塊,沒(méi)有組塊分析任務(wù)中的塊外詞,所以把傳統(tǒng)的BIO標(biāo)記中的O去掉,B表示當(dāng)前詞是一個(gè)成分的開(kāi)始,I表示當(dāng)前詞是一個(gè)成分的內(nèi)部;若成分由一個(gè)詞構(gòu)成,把這個(gè)詞標(biāo)為B。這種標(biāo)記關(guān)注的是第二個(gè)成分的B標(biāo)記(右邊成分的第一個(gè)詞)的識(shí)別,示例見(jiàn)表1。
表1 BI標(biāo)記示例
(2) LR標(biāo)記:每次切分出的左右兩個(gè)子成分,可以通過(guò)左右兩種標(biāo)記分別標(biāo)出對(duì)應(yīng)的詞,把左邊成分的詞都標(biāo)為L(zhǎng),把右邊成分的詞都標(biāo)為R。從L到R的轉(zhuǎn)換的位置,決定了切分的位置,示例見(jiàn)表2。
表2 LR標(biāo)記示例
(3) BEO標(biāo)記:把緊鄰分割位置的左右兩個(gè)詞作為重點(diǎn)考慮,分割位置左邊的詞標(biāo)為B,分割位置右邊的詞標(biāo)為E,其他的詞標(biāo)為O。這種標(biāo)記方式重點(diǎn)關(guān)注緊鄰切分位置的左右兩個(gè)詞,示例見(jiàn)表3。
表3 BEO標(biāo)記示例
(4) INT標(biāo)記(間隔標(biāo)記):這種標(biāo)記方式不是標(biāo)記詞,而是標(biāo)記詞與詞之間的間隔。n個(gè)詞的句子序列,有n-1個(gè)間隔,把分割位置的間隔標(biāo)記為1,其他間隔標(biāo)記為0。這種方式直接對(duì)間隔進(jìn)行標(biāo)記,從而避免了前面其他幾種標(biāo)記方案中把對(duì)詞標(biāo)記轉(zhuǎn)成對(duì)間隔的劃分時(shí)所產(chǎn)生的不一致現(xiàn)象,示例見(jiàn)表4。
表4 間隔標(biāo)記(INT)示例
假設(shè)給定了一個(gè)訓(xùn)練好的序列標(biāo)注器M,當(dāng)給定一個(gè)由詞序列“w1w2…wi…wn”組成句子S作為輸入,序列的二分結(jié)構(gòu)的遞歸分割處理算法如下:
1. 把句子S: w1 w2…wi… wn,看成詞序列作為輸入,每個(gè)詞的索引固定。2. 調(diào)用序列分割程序,S為其參數(shù)(1) 如果S長(zhǎng)度為1,返回。(2) 如果S長(zhǎng)度為2,將兩個(gè)詞分成兩個(gè)左右子序列,并把第一個(gè)詞的索引,記為此次分割的位置,返回。(3) 如果S長(zhǎng)度大于2,調(diào)用M對(duì)序列w1 w2 …wi… wn進(jìn)行分割。假設(shè)得到的兩個(gè)子序列分別為w1…wi和wi+1 … wn,將左邊序列最后一個(gè)詞的索引i記為此次分割的位置。然后分別把w1…wi和wi+1… wn分別作為新的參數(shù)S,遞歸調(diào)用序列分割程序(轉(zhuǎn)2)。3. 根據(jù)序列分割程序每次保存的分割的索引信息,生成一棵滿(mǎn)二叉樹(shù)作為分析結(jié)果。
第2節(jié)將二分結(jié)構(gòu)句法分析轉(zhuǎn)換為遞歸的序列分割(標(biāo)注)問(wèn)題,對(duì)序列標(biāo)注任務(wù),目前性能比較好的是條件隨機(jī)場(chǎng)模型(CRF)和神經(jīng)網(wǎng)絡(luò)模型(RNN,LSTM)。在最初的實(shí)驗(yàn)中(數(shù)據(jù)分為訓(xùn)練集,驗(yàn)證集,測(cè)試集,沒(méi)有使用交叉驗(yàn)證),對(duì)RNN和CRF中都使用了除間隔標(biāo)記(INT)之外的多種標(biāo)記策略進(jìn)行了實(shí)驗(yàn),發(fā)現(xiàn)RNN使用BI標(biāo)記要好很多,而CRF中使用BEO和LR的結(jié)果也優(yōu)于其他標(biāo)記。因此后續(xù)的交叉驗(yàn)證實(shí)驗(yàn)中,對(duì)CRF選擇了LR和BEO兩種標(biāo)記,對(duì)RNN和LSTM則只選擇了BI。針對(duì)詞間隔標(biāo)記策略,我們基于RNN結(jié)構(gòu)提出了RNN-INT模型,采用hinge-loss為損失函數(shù),在每個(gè)詞間隔上計(jì)算得分并進(jìn)行標(biāo)記。
本文的RNN-INT模型,基于Elman[19]提出的RNN結(jié)構(gòu),所以我們先簡(jiǎn)單介紹RNN結(jié)構(gòu)。三層的RNN網(wǎng)絡(luò),分為輸入層、隱層和輸出層。
輸入層:可以采用Collobert[26]等的方法,將詞庫(kù)中的每個(gè)詞都表示成一個(gè)向量(word-embedding),并對(duì)當(dāng)前詞采用開(kāi)窗口的方式。假設(shè)每個(gè)詞對(duì)應(yīng)的word-embedding維數(shù)大小為d,窗口(對(duì)稱(chēng))大小為s,拼接后可以得到一個(gè)大小為d*s的輸入向量x。
隱層:對(duì)于句子中的詞按照從左向右的順序依次傳遞給網(wǎng)絡(luò),假設(shè)當(dāng)前時(shí)刻t的輸入向量為xt,輸入層連接到隱層的權(quán)重矩陣為Wh x,隱層連接到隱層的權(quán)重矩陣是Wh h,隱層的偏置向量為bh,隱層的激活函數(shù)為σ,t時(shí)刻隱層的計(jì)算如式(1)所示。
ht=σ(Wh xxt+Wh hht -1+bh)
(1)
輸出層:是一個(gè)softmax層。有幾個(gè)類(lèi)別標(biāo)記,最終的輸出層就有幾個(gè)輸出單元,假定當(dāng)前時(shí)刻t,隱層連接到輸出層的權(quán)重矩陣是Who,輸出層的偏置向量是bo輸出層的公式如式(2)所示。
yt=softmax(Wh oht+bo)
(2)
Socher[13]等在用RecNN來(lái)做句法分析,也用了hinge-loss損失函數(shù),通過(guò)計(jì)算相鄰成分的得分,遞歸地對(duì)相鄰成分進(jìn)行合并。本文與其不同之處是,首先,我們是自頂向下的分析,從整句出發(fā),遞歸對(duì)句子進(jìn)行二分,直到不能分割為止;Socher等則使用自底向上的方案,遞歸地對(duì)兩個(gè)成分進(jìn)行融合直至形成一個(gè)節(jié)點(diǎn)。其次,Socher等對(duì)兩個(gè)相鄰節(jié)點(diǎn)計(jì)算融合得分的時(shí)候,只使用這兩個(gè)節(jié)點(diǎn)的信息,而我們則是采用了RNN的方式,考慮了間隔左、右兩邊的整個(gè)成分的信息。第三,Socher的方法為了遞歸應(yīng)用RecNN,要保證每個(gè)節(jié)點(diǎn)的向量等長(zhǎng),需要對(duì)兩個(gè)子節(jié)點(diǎn)連接后得到的兩倍長(zhǎng)的向量進(jìn)行線性變換,從而使父節(jié)點(diǎn)的向量和子節(jié)點(diǎn)的向量等長(zhǎng),而我們?cè)谛蛄卸趾?,?duì)兩個(gè)子序列獨(dú)立再分,所以不涉及節(jié)點(diǎn)的融合。
從中文的特點(diǎn)知道,句法中短語(yǔ)的識(shí)別不僅由構(gòu)成短語(yǔ)的詞決定,還需要由短語(yǔ)前后的所有詞共同決定,而傳統(tǒng)的組塊分析方法主要依賴(lài)相鄰的詞??紤]到這種二分結(jié)構(gòu)句法的形式,采用直接對(duì)詞之間的間隔進(jìn)行標(biāo)記的方法,并且把能分割的位置標(biāo)記為1,不能分割的標(biāo)記為0。采用貪心策略進(jìn)行逐層二分結(jié)構(gòu)的句法分析,每一次分析都是把一個(gè)成分切分成左、右兩個(gè)子成分,即只能有一個(gè)詞間的間隔位置被標(biāo)記為1,其他的間隔位置都是0。
RNN-INT模型可以看作在輸入層和隱層有兩個(gè)獨(dú)立的子網(wǎng)絡(luò),分別對(duì)應(yīng)正向詞序列(來(lái)自于間隔左邊的詞)和反向詞序列(來(lái)自于間隔右邊的詞)。正向隱層和反向隱層的兩個(gè)輸出向量,在同一個(gè)輸出層進(jìn)行了合并。我們需要使得真實(shí)切分的間隔的得分大于其他間隔的得分,所以輸出層沒(méi)有進(jìn)行softmax,而是對(duì)正反兩個(gè)隱層的輸出,和對(duì)應(yīng)的權(quán)重向量進(jìn)行內(nèi)積運(yùn)算,然后再把這兩個(gè)值求和作為該間隔上的得分。網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 RNN-INT網(wǎng)絡(luò)結(jié)構(gòu)
輸入的中文句子sen=“w1w2…wn”,wi對(duì)應(yīng)句子中的從左向右看的第i個(gè)詞。
輸入層:與前面所述相似,對(duì)每個(gè)間隔,有兩個(gè)輸入向量(分別由間隔左、右兩邊的詞得到)。所以對(duì)于每個(gè)間隔,可以看作有兩個(gè)輸入層,一個(gè)正向輸入層從左向右依次接收詞序列(w1w2…wi);另一個(gè)為反向輸入層,從右向左依次接收詞序列(wn,wn-1…wi+1)。
輸出層:兩個(gè)隱層的輸出在同一個(gè)輸出層進(jìn)行合并。因?yàn)檩敵鰧幼罱K的輸出是一個(gè)得分,score所以輸出層只有一個(gè)輸出單元,也不需要softmax運(yùn)算。Wof和ho b分別表示正向隱層、反向隱層與輸出層之間的權(quán)重矩陣;ho表示輸出層的偏置向量。在t時(shí)刻輸出層輸出的scoret計(jì)算如式(5)所示。
(5)
損失函數(shù):對(duì)序列進(jìn)行一次切分時(shí),只有一個(gè)詞間隔可以是實(shí)際的切分點(diǎn),因此需要使得這個(gè)間隔點(diǎn)的得分大于其他詞的間隔點(diǎn)的得分。假設(shè)有n個(gè)間隔位置,每個(gè)間隔位置的真實(shí)切分標(biāo)記為yi(需要把前面的0轉(zhuǎn)成-1表示不在此處切分,1表示在此處切分),則對(duì)序列的一次分割的hinge-loss損失函數(shù)如式(6)所示。
(6)
訓(xùn)練采用隨機(jī)梯度下降算法,損失進(jìn)行反向傳播,更新詞表示向量和神經(jīng)網(wǎng)絡(luò)的權(quán)重。測(cè)試時(shí),對(duì)一個(gè)詞序列,把得分最大的間隔作為切分的位置。
目前我們的樹(shù)庫(kù)共有30 034個(gè)簡(jiǎn)體中文單句,句子只使用分詞信息,沒(méi)有標(biāo)點(diǎn),也沒(méi)有使用詞性。先從整個(gè)語(yǔ)料庫(kù)中隨機(jī)抽出6 000個(gè)句子作為測(cè)試集,剩下的24 034個(gè)句子作為建模的數(shù)據(jù)(以下記為D),然后將D使用m×2交叉驗(yàn)證(簡(jiǎn)記為m×2CV),Wang[27-28]等從理論和模擬實(shí)驗(yàn)上證明,m×2CV 方法是較好的模型比較方法,并且更適用于文本數(shù)據(jù)。
除了將句子包括在訓(xùn)練集中外,同時(shí)將句子的二叉樹(shù)的每個(gè)成分都抽取出來(lái),也獨(dú)立看作一個(gè)句子,并加入訓(xùn)練集中作為訓(xùn)練樣本(只含兩個(gè)詞的成分除外,在之前實(shí)驗(yàn)中發(fā)現(xiàn),如果在訓(xùn)練集中加入這兩個(gè)詞的成分,會(huì)對(duì)序列標(biāo)注器產(chǎn)生干擾,訓(xùn)練序列標(biāo)注器去掉這些會(huì)輕微提高句法分析的性能,所以在最終的訓(xùn)練集合中把這兩個(gè)詞的成分都刪除了)。例如,前面圖1中的句子,“我們 班 有 許多 外國(guó) 學(xué)生”,經(jīng)過(guò)抽取成分,可抽取出三個(gè)樣例:我們 班 | 有 許多 外國(guó) 學(xué)生,有 | 許多 外國(guó) 學(xué)生,許多 | 外國(guó) 學(xué)生。
在CRF[注]https://github.com/taku910/crfpp模型的實(shí)驗(yàn)中,對(duì)于LR、BEO標(biāo)記方案,分別記為CRF-LR和CRF-BEO;RNN和LSTM模型基于Theano[29]進(jìn)行了實(shí)現(xiàn),這兩個(gè)模型下都用BI標(biāo)記,所以模型后面不再加BI后綴。并且在這兩個(gè)模型下對(duì)是否采用雙向(bi),以及是否在最后一層使用了viterbi算法(vtb)的方式(即CRF方式)都進(jìn)行了實(shí)驗(yàn)。本文提出的在詞的間隔上進(jìn)行標(biāo)記的方案,稱(chēng)為RNN-INT。在每種模型下,都使用了對(duì)稱(chēng)窗口,窗口大小從0(只取當(dāng)前詞自己)到7。因?yàn)檎Z(yǔ)料中的句子都是簡(jiǎn)單句,而且平均長(zhǎng)度在10個(gè)詞左右,所以沒(méi)有再取更大的窗口。在RNN和LSTM的實(shí)驗(yàn)中,均采用sigmoid激活函數(shù)。
完全句法分析中,多數(shù)文獻(xiàn)中采用了塊準(zhǔn)確率,或者塊召回率,或者塊F1值作為評(píng)價(jià)指標(biāo)[23]。本文以塊F1值作為評(píng)價(jià)指標(biāo),由于語(yǔ)料基本都是單句,我們把整句正確率作為考察指標(biāo)。
Wang[27-28]分析了常用的模型性能對(duì)比的t-檢驗(yàn)存在的問(wèn)題,提出模型性能比較的正則化m×2交叉驗(yàn)證序貫t-檢驗(yàn)方法。理論和模擬驗(yàn)證該檢驗(yàn)是相對(duì)保守的檢驗(yàn),可以得到更為可信的結(jié)論。Wang[27]等所給的3×2 CV t-檢驗(yàn)自然可以擴(kuò)展為相應(yīng)的兩模型性能比較的m×2 CV序貫t-檢驗(yàn),描述如下:
給定兩個(gè)機(jī)器學(xué)習(xí)模型A、B及模型評(píng)價(jià)指標(biāo)MA、MB,記M=MA-MB為兩個(gè)模型性能之差,不妨假設(shè)MB為Baseline模型的性能。
原假設(shè):H0:M≤0備擇假設(shè):H1:M>0。
∽Cm·t(2m-1)
(7)
本文m先取3。表5是模型的塊F1和整句正確率在3×2交叉驗(yàn)證下的平均值。無(wú)論塊F1值還是整句正確率,RNN-INT模型取窗口1的結(jié)果最好,達(dá)到68.93和39.88。圖3和圖4顯示了模型的塊F1值和整句正確率隨著窗口大小的變化趨勢(shì),不同模型各自在不同的窗口下取得其最好性能。但趨勢(shì)都是隨著窗口增大,結(jié)果變好,隨后趨于平穩(wěn)或者略有下降。窗口增大模型的性能逐漸趨于接近。我們認(rèn)為可能當(dāng)窗口增大時(shí)對(duì)于之前性能低的模型會(huì)增加信息,性能也提升;對(duì)于性能已經(jīng)很高的模型,反而增加了噪聲使其性能下降。和之前預(yù)想不同,RNN和LSTM在該任務(wù)下性能相差不大,這可能和句子長(zhǎng)度相對(duì)較短有關(guān),使得LSTM沒(méi)有發(fā)揮其長(zhǎng)時(shí)記憶的優(yōu)勢(shì),且由于其參數(shù)明顯比RNN多,所以性能不高,甚至當(dāng)窗口為0的時(shí)候,由于參數(shù)個(gè)數(shù)較多,但輸入數(shù)據(jù)較少,性能反而是所有模型下最低的。雙向模型和使用viterbi算法對(duì)性能都有明顯的提升,但窗口小于3時(shí),雙向模型性能提高得多,當(dāng)窗口大于等于3時(shí),viterbi算法對(duì)性能提升得多,同時(shí)使用雙向且結(jié)合viterbi算法都取得各自最好的結(jié)果。
我們?cè)趍×2CV下對(duì)RNN-INT和其他模型進(jìn)行差異的顯著性t-檢驗(yàn)。在各模型各個(gè)窗口下,塊F1和整句正確率的相關(guān)性非常大,整體相關(guān)系數(shù)為0.98,說(shuō)明這兩個(gè)指標(biāo)有高度的正相關(guān)。這也符合我們的直觀認(rèn)識(shí),句法塊識(shí)別對(duì)的越多,對(duì)應(yīng)的整句識(shí)別正確的也越多。我們?nèi)∧P偷膲KF1值最高的窗口,為該模型的窗口大小配置,都與RNN-INT在1窗口下進(jìn)行t檢驗(yàn)。表6是模型比較的m×2CV t-檢驗(yàn)的結(jié)果。從表6中的結(jié)果看,RNN-INT與其他模型的性能之差都大于零,最少也高出近1個(gè)百分點(diǎn),且大部分檢驗(yàn)在m=3時(shí)t-檢驗(yàn)就顯著,少部分在m=6下才顯著。RNN-INT與RNN_bi_vtb和LSTM_bi_vtb的整句正確率,即使在m=6時(shí)也不顯著,且差異值及方差的估計(jì)在m=4,5,6時(shí)已經(jīng)基本穩(wěn)定,說(shuō)明再增加m已無(wú)明顯效果,故停止序貫實(shí)驗(yàn)。
圖3 模型在不同窗口下的模型塊F1值
圖4 模型在不同窗口下的模型整句正確率
塊F1整句正確率窗口大小0123456701234567CRF_LR51.1255.7358.1562.1364.0164.6564.6564.6013.9318.1527.3733.8836.2537.0436.8336.79CRF_BEO54.5165.0366.8766.7066.3866.1566.0765.9818.9833.1536.0335.8435.4935.1635.2635.10RNN54.5959.0264.5766.2366.7066.6666.4566.3921.6227.8534.9036.0836.4536.1935.7435.56RNN_bi62.9666.6066.7366.3866.0665.9565.8665.8032.6137.5337.1736.7936.2236.0636.0835.77RNN_vtb56.1359.4065.2967.1067.3467.4567.2767.0224.8129.1236.5738.0437.9737.7837.6337.22RNN_bi_vtb64.4166.5967.8467.6968.0267.4766.9866.8334.6137.6338.5538.3838.5937.9537.4237.17LSTM41.7559.4464.6466.1066.0466.0866.2165.643.7228.5735.3036.4436.2036.1836.2035.59LSTM_bi63.0766.5066.5866.6866.1766.0865.7465.6532.7137.5337.1237.2836.4536.2135.7935.71LSTM_vtb57.3259.5865.5167.0767.3067.3066.9966.5626.1229.2936.6637.9937.8737.7237.1736.96LSTM_bi_vtb64.5867.5368.1467.5367.7767.3067.2767.0034.8538.7438.9838.3538.3637.8037.6937.31RNN_INT66.0368.9367.9467.4067.2267.0266.8266.7235.7839.8837.8736.8836.5936.2135.8235.56
表6 RNN-INT與其他模型對(duì)照的t-檢驗(yàn)p-值表
注:**表示顯著水平為0.01下顯著,*表示顯著水平為0.05下顯著。
根據(jù)以上分析,以數(shù)據(jù)集D進(jìn)行模型選擇的最終結(jié)果為詞特征在1窗口下的RNN-INT模型,以此模型將全部數(shù)據(jù)D(即交叉驗(yàn)證的訓(xùn)練、驗(yàn)證集合并)為最終的訓(xùn)練集,重新訓(xùn)練RNN-INT模型。在最終的RNN-INT模型上,用6組不同的隨機(jī)數(shù)初始化權(quán)重和詞表示向量,得到在測(cè)試集的結(jié)果,如表7所示。最終在測(cè)試集(6 000句)上得到平均塊F1值為71.252%,平均整句正確率的結(jié)果為42.998%。
表7 RNN-INT模型不同初始值在測(cè)試集的結(jié)果
表5顯示基于神經(jīng)網(wǎng)絡(luò)的方法優(yōu)于CRF方法,一個(gè)可能的原因是這類(lèi)方法在域外詞的處理上有優(yōu)勢(shì)。不同于CRF模型直接使用詞本身作為離散特征,在神經(jīng)網(wǎng)絡(luò)模型中將詞轉(zhuǎn)換成了詞的向量表示形式,是一種連續(xù)的特征,當(dāng)遇到域外詞時(shí),通過(guò)其周?chē)挠騼?nèi)詞的向量也可以反映出一部分域外詞的信息,從而降低了域外詞的影響。
在3×2交叉驗(yàn)證實(shí)驗(yàn)中,我們以驗(yàn)證集中的句子中是否出現(xiàn)了訓(xùn)練集中沒(méi)有見(jiàn)過(guò)的詞為準(zhǔn),把驗(yàn)證集分成含有域外詞和不含域外詞兩個(gè)子集,簡(jiǎn)記為OOD(out of domain),IND(in domain),分別在兩個(gè)子集上計(jì)算指標(biāo)值。經(jīng)統(tǒng)計(jì)6組交叉驗(yàn)證的驗(yàn)證集中OOD的句子占比均大致在一半左右,占比平均為51.5%。我們對(duì)比了RNN-INT與CRF-LR模型。下面是在OOD和IND上分開(kāi)統(tǒng)計(jì)的結(jié)果。
表8 OOD上的結(jié)果
表9 IND上的結(jié)果
從表8可以看出,在域外詞集OOD上,RNN-INT比CRF-LR的塊F1高出2.3%,整句正確率高出4.4%; 而在域內(nèi)詞集IND表9上卻只高出1.7%,整句正確率指標(biāo)上高出3.4%。因此,在處理域外詞上,RNN-INT與CRF-LR相比還是有一定的優(yōu)勢(shì)的。
對(duì)我們的實(shí)驗(yàn)結(jié)果進(jìn)行分析總結(jié),可以得出以下結(jié)論。
(1) RNN-INT性能最優(yōu)。在所有的實(shí)驗(yàn)中,本文所提出的RNN-INT模型性能最好,對(duì)比其他模型,在性能上有顯著的提高。該結(jié)果可能有以下幾種原因。
詞的間隔是中文成分之間分割的重要信息。我們認(rèn)為不論是組塊分析還是完全句法分析,成分的形成本質(zhì)上是由兩個(gè)成分兩邊的所有詞共同決定的,不僅僅是兩成分間隔相鄰的少數(shù)詞。特別是在二分結(jié)構(gòu)的句法分析中,采用RNN對(duì)詞之間的間隔進(jìn)行標(biāo)記,是利用了間隔左、右的所有詞,抓住了成分整體的信息,從而提高標(biāo)記的正確率。
在RNN-INT中使用hinge-loss損失函數(shù),并使用正向、反向RNN計(jì)算詞的間隔的得分,這在一定程度上考慮了一個(gè)序列的全局信息,從而使得訓(xùn)練得到的網(wǎng)絡(luò)更可靠。另外,實(shí)驗(yàn)中發(fā)現(xiàn)RNN-INT模型相對(duì)于普通的RNN模型訓(xùn)練和預(yù)測(cè)的速度都快一些,我們認(rèn)為這是由于該模型下不需要像傳統(tǒng)的分類(lèi)任務(wù)那樣需要在最后一層進(jìn)行softmax,RNN-INT只需要計(jì)算一個(gè)得分即可,并且hinge-loss損失函數(shù)也相對(duì)于交叉熵?fù)p失計(jì)算簡(jiǎn)單,這使得模型在訓(xùn)練和預(yù)測(cè)時(shí)速度得以變快。
在域外詞的處理上RNN模型相對(duì)CRF模型有優(yōu)勢(shì)。這可能歸功于RNN中使用了詞的向量表示,這種表示方式本身會(huì)將詞和它周?chē)脑~之間的信息進(jìn)行融合,并包含在循環(huán)的隱層向量中,這使得即使在預(yù)測(cè)時(shí)沒(méi)有見(jiàn)過(guò)的詞,也可以通過(guò)相鄰見(jiàn)過(guò)的詞的表示向量,間接地獲得了該詞的一些信息,從而使得RNN比CRF對(duì)域外詞處理上有優(yōu)勢(shì)。
在RNN-INT中采用詞特征的1窗口有利于RNN。不同于CRF模型中使用的是離散特征,隨著窗口增大,特征越來(lái)越稀疏,提供給模型的信息會(huì)越來(lái)越少,模型性能不再提升。而從RNN-INT的結(jié)果可以看出,在窗口為1時(shí)要好于其他窗口的情形,這說(shuō)明在中文中使用當(dāng)前詞語(yǔ)與左、右兩個(gè)詞的拼接向量,做雙向的循環(huán)迭代,構(gòu)建兩個(gè)成分的隱含表示(隱層向量)是最好的,并不是拼接的向量越長(zhǎng)越好。
(2) m×2交叉驗(yàn)證進(jìn)行模型選擇和評(píng)估,結(jié)論更為可靠。采用m×2交叉驗(yàn)證,通過(guò)對(duì)語(yǔ)料數(shù)據(jù)集進(jìn)行多次劃分,進(jìn)行多次實(shí)驗(yàn),可以得到重復(fù)實(shí)驗(yàn)結(jié)果,并可以獲得估計(jì)的方差,以及相應(yīng)的統(tǒng)計(jì)顯著性檢驗(yàn),從而對(duì)模型的性能評(píng)價(jià)更加準(zhǔn)確。這樣可以克服傳統(tǒng)的簡(jiǎn)單地將語(yǔ)料切分為訓(xùn)練、驗(yàn)證、測(cè)試集,只能有一個(gè)實(shí)驗(yàn)結(jié)果,難以從統(tǒng)計(jì)的顯著性來(lái)評(píng)價(jià)好壞。
完全句法分析是中文信息處理里的一個(gè)難題。為了構(gòu)建一個(gè)簡(jiǎn)單的中文句法分析,我們以朱德熙和陸儉明先生的層次分析理論為基礎(chǔ),將中文句子的結(jié)構(gòu)表示為逐層二分結(jié)構(gòu)的形式,簡(jiǎn)化中文句子的分析過(guò)程,使得句法分析任務(wù)變得相對(duì)簡(jiǎn)單。
我們將二分結(jié)構(gòu)的句法分析問(wèn)題轉(zhuǎn)換為逐層的序列標(biāo)注問(wèn)題,在已經(jīng)構(gòu)建的大約3萬(wàn)句規(guī)模的中文語(yǔ)料庫(kù)上,使用了RNN、LSTM和CRF模型,在多種標(biāo)注策略和不同的詞特征窗口設(shè)置下,進(jìn)行了模型對(duì)比的實(shí)驗(yàn),最終在我們的測(cè)試集上的結(jié)果表明,本文提出的RNN-INT模型效果是最好的,最終的塊F1值達(dá)到71.25%,整句的正確率達(dá)到了約43%。
目前我們的語(yǔ)料庫(kù)規(guī)模還比較小,且都是單句,句子也沒(méi)有標(biāo)注成分的內(nèi)部結(jié)構(gòu)和短語(yǔ)類(lèi)別。下一步,一方面我們計(jì)劃繼續(xù)擴(kuò)充語(yǔ)料庫(kù),研究復(fù)雜句的二分結(jié)構(gòu)標(biāo)注方案,并且不斷完善相應(yīng)的標(biāo)注規(guī)范,特別是針對(duì)一些中文特殊結(jié)構(gòu)的句子提出其合理的標(biāo)注方案(比如把字句、被子句等);另一方面我們計(jì)劃將每個(gè)成分的內(nèi)部的短語(yǔ)結(jié)構(gòu)也進(jìn)行標(biāo)注。在算法方面,我們計(jì)劃探索結(jié)合自底向上的方法,即同時(shí)利用詞及短語(yǔ)的合并的信息,與詞的間隔上的分割的信息進(jìn)行二分句法分析,以期提高分析器的性能。