張 軍 賴志鵬 李 學 寧更新 楊 萃
(華南理工大學電子與信息學院 廣州 510641)
詞語是中文文本中包含語義信息并且能夠獨立使用的最小結構單元,因此中文分詞(Chinese Word Segmentation, CWS)是中文自然語言處理(Natural Language Processing, NLP)的基礎,其性能好壞將對NLP下游任務的效果產生直接影響。
早期的中文分詞方法主要包括機械分詞法[1]和統計分詞法[2,3]兩種。機械分詞法需要預先構造一個足夠大的中文詞表,然后通過設置詞表中詞語的組合規則來對中文句子進行切分。統計分詞法則是根據相鄰字之間的共現頻率來計算它們構成詞語的可信度,無需預先構建詞表。由于這兩種方法所使用的分詞模型都較為簡單,不能很好地描述復雜的中文構詞規律,因此分詞性能并不理想。隨著深度學習技術的提出和發展,近年來提出了多種利用深度神經網絡來進行中文分詞的方法[4,5]。與傳統的分詞方法不同,基于深度神經網絡的分詞方法將中文分詞當成序列標注任務,以人工標注的數據集來訓練網絡,在無需獲取中文詞表和人為構造規則,也不需要人為構造特征模板的情況下,利用深度網絡的強大建模能力,能獲得遠高于傳統方法的準確率(Precision)和召回率(Recall),因此成為目前中文分詞的主流技術。
在基于深度神經網絡的中文分詞方法中,首先需要使用大量標注好的語料來訓練網絡模型,然后利用訓練好的網絡模型對無標注的測試語料進行分詞。當訓練語料的領域(源領域)與測試語料的領域(目標領域)屬于同一個領域時,這種方法能通常能取得很好的效果,但當源領域和目標領域不屬于同一個領域,即跨領域(cross domain)時,其性能將會顯著降低。造成這種現象的原因主要有兩個,一是未登錄詞(Out Of Vocabulary, OOV),即目標領域中存在著大量未在源領域中出現過的詞語,這些詞語對于網絡模型來說是未知樣本,難以正確識別。另一個原因是領域之間的表達鴻溝,即不同領域的語言表達是有差異的,使得網絡模型在源領域上學習的特征對于目標領域并不具有很好的泛化性能。解決未登錄詞和表達鴻溝最簡單的方法是對目標領域的語料進行標注并重新訓練模型,但由于在實際中對所有未知領域的訓練語料進行人工標注需要非常高的成本,并不可行,因此如何有效地解決中文分詞系統的領域適應性,特別是未登錄詞和表達鴻溝問題,是目前中文分詞的最大難點之一。現有的研究中,在模型的訓練中結合詞典或字/詞向量是解決未登錄詞的最常用的方法[6],而遷移學習則是解決表達鴻溝的主要方法[7]。盡管目前對跨領域中文分詞中的未登錄詞或表達鴻溝問題已有一定的研究,但現有的文獻所提方法大多只針對兩者之一,而同時解決兩個問題的研究成果尚不多見。
本文針對跨領域中文分詞中的未登錄詞和表達鴻溝問題,首先采用現有技術構建了一個基于新詞發現的跨領域中文分詞系統,實現了自動從目標領域語料中提取新詞、標注語料和訓練網絡模型的功能。然后針對現有新詞發現算法提取出的詞表垃圾詞串多的缺點,提出了一種基于向量增強互信息和加權鄰接熵的無監督新詞發現算法,以提高新詞詞表提取的準確率和領域性。最后,針對自動標注語料中存在噪聲樣本的不足,提出了一種基于對抗式訓練的中文分詞模型,有效提高了分詞網絡模型訓練的魯棒性。
文章的其余部分組織如下:第2節介紹了本文搭建的基線系統,第3節提出了基于向量增強互信息和加權鄰接熵的無監督新詞發現算法,第4節提出了基于對抗式訓練的中文分詞算法,第5節是實驗結果和分析,最后一節給出了結論。
為了同時處理跨領域分詞中的未登錄詞和表達鴻溝問題,本文構建的基線系統包含新詞發現、自動標注和跨領域分詞3個部分,結構如圖1所示。首先使用新詞發現算法從各個目標領域語料中提取出該領域的新詞詞表,然后利用該新詞詞表對無標注的目標領域語料進行自動標注,以降低目標領域語料的未登錄詞率,最后使用自動標注好的語料訓練分詞模型,并使用該模型來對目標領域進行分詞。在這個系統中,新詞發現能顯著減少跨領域分詞中的未登錄詞率,而對目標領域語料的自動標注并在此基礎上訓練適用于目標領域的分詞模型,則能有效解決跨領域分詞中的表達鴻溝問題。

圖1 基線系統的結構
新詞發現包含語料預處理、候選詞提取和候選詞過濾3個步驟。目標領域的中文語料首先按照非中文字符的方式進行切割,并剔除非漢字字符,然后使用N-Gram的方法[8]從目標領域語料中提取出所有的候選字符串,得到候選詞集。此時得到的候選詞集既包含了正確的詞語,又包含了大量錯誤的字符組合,因此需要對詞集中的詞進行篩選。互信息(Mutual Information, MI)和鄰接熵(Branch Entropy, BE)相結合的方法是目前最常用的詞集篩選方法[9],首先統計每個候選詞在目標領域語料中的詞頻后,然后采用下式計算出每個詞的得分


自動標注中,首先根據目標領域的新詞詞表使用逆向最大匹配算法(Backward Maximum Matching, BMM)[10]對目標領域語料進行初步的切分,然后利用有標注的源領域語料訓練分詞模型,并使用該模型對目標領域的語料進行完全切分,得到自動標注的目標領域語料。分詞模型是中文分詞系統的核心,由于目前基于深度神經網絡的分詞方法均將中文分詞當成序列標注任務,因此主流的中文分詞方法是使用雙向長短時記憶網絡(Bidirectional Long Short-Term Memory, BiLSTM)[11]加上條件隨機場模型(Conditional Random Fields, CRF)[12]。由于在BiLSTM中,輸入之間相互依賴使得模型在處理當前字符時還可以提取到上下文里的語境和語義信息,并且從理論上來說這個上下文可以擴展到全文,而CRF模型屬于統計模型,可以在分詞模型中加入有關于語料的統計信息,能很好地彌補深度模型無法提取淺層特征的劣勢,因此BiLSTM+CRF在領域內分詞和跨領域分詞中都取得了很好的效果。但BiLSTM在實際使用中存在著訓練速度慢、信息冗余,在獲取遠距離依賴時容易出現梯度爆炸或者梯度彌散的缺點。為此,本文的基線系統中使用了門控卷積神經網絡(Gated Convolutional Neural Network, GCNN)[13]來代替BiLSTM。GCNN是帶有線性門控的卷積神經網絡,使用線性門控后能令模型在堆疊獲取遠距離上下文時可以遺忘不重要的信息而只保留重要的信息,遠距離依賴效果將會變得更好,不僅可以進一步降低梯度彌散的現象,還可以保留CNN的非線性能力。
跨領域分詞時,利用自動標注好的目標領域語料訓練出一個適用于目標領域的GCNN-CRF模型,即可以使用該模型對目標領域內的測試語料進行分詞。由于該模型是使用自動標注好的目標領域語料訓練出來的,因此能克服跨領域中文分詞的未登錄詞和表達鴻溝問題。
傳統基于MI+BE的無監督新詞發現算法認為互信息可以表示字符串內部聚合度的大小,左右鄰接熵可以表示字符串邊界自由度的高低,因此將互信息和鄰接熵直接相加可以同時衡量字符串內部聚合度和邊界自由度的高低。但在實驗中發現,使用MI+BE算法提取的新詞詞表中存在大量垃圾詞串,例如“過程中”、“線城市”等非詞語的固定搭配由于具有較大的詞頻和互信息,并且鄰接熵也較大,很容易被錯誤地認為是一個合理的新詞。究其原因,MI+BE算法一方面在判定內部凝結度上只利用了語料中的統計信息,使得一些常用搭配因為凝固度較高而被認為也是新詞,另一方面在判定邊界自由度上只利用了左右鄰接熵中的較小值,使得一些錯誤詞串也被認為是新詞,造成提取出的新詞詞表中含有較多的垃圾詞串。本文針對MI+BE算法的不足,提出了基于向量增強互信息和加權鄰接熵的無監督新詞發現算法。
對于一個新詞而言,它內部的片段應該是緊密結合并且很大概率是一起出現在句子中的,也就是說這些片段之間必然就會有著相似的上下文語境,因此使用上下文語境的相關性來進一步描述字符串內部的結合程度對新詞發現應有一定的幫助。本文借助基于語義的詞向量來對互信息進行改進,提出向量增強互信息(Vector Enhancement Mutual Information, VEMI)的概念。


根據式(3)和式(4)計算得到字符片段的左右鄰接熵后,傳統的方法是選擇較小的熵作為指標來對字片段的邊界進行衡量,這種方式雖然簡單,但是并沒有充分考慮到左右兩邊的鄰接熵信息,在很多情況下是不合適的,例如候選詞語“紅皮病”,由于其在文中多是單獨成句子出現,因此其左鄰接熵很低,傳統的算法會將這個詞語剔除,但“紅皮病”在文本中卻是一個新詞。為此,本文對傳統的鄰接熵進行了改進,采用加權的方式來同時利用左右兩邊的鄰接熵信息,加權鄰接熵的計算為
其中,B E(w)表 示加權后的鄰接熵,Hl(w)和Hr(w)分別為詞w的左鄰接熵和右鄰接熵,ε為一個小的正數。式(10)的對數部分相當于對左右鄰接熵加上一個權重,其作用主要有兩個方面,一是令較大的熵權值變小,較小的熵權值變大,從而使最終結果不再僅由其中的較小值所支配;二是當一個字符串片段的左右鄰接熵都比較小,但相差不大時,有很大可能是一個合理的詞,式(10)會增加這種情況下左右熵的權重,使得總得分變大。以“關節病”這個片段為例,實驗中統計得到其左鄰字分別有{療,對},出現次數依次為{1,1},右鄰字分別有{人,或,的},出現的次數依次為{8, 1, 1}。據統計得到的左右鄰字及其出現次數,可以得到其左右鄰接熵分別為0.693和0.639,選擇其中較小的右鄰熵作為得分,則得分過小,“關節病”這個片段將不會認為是一個合理的新詞。而根據式(10)可以計算得到其鄰接熵為3.341,這是一個較大的熵值,會認為這個片段是一個合理的新詞。由此可見,使用加權鄰接熵比直接使用左右鄰接熵中的較小值進行判斷效果更好。

經過得分篩選后,第2步將進行詞頻篩選。一個片段如果是一個合理的詞語,那么這個片段在語料必然是多次出現的,本文將詞頻的最小值設定為8,出現次數小于8的片段即使得分較大也不認為是一個合理的詞,將其從候選詞中刪除。
通過觀察發現,采用以上步驟得到的新詞詞表中仍然存在少量諸如“導致了”、“擴展到”等錯誤詞語,因此本文對詞表進行了第3次篩選:統計候選詞的首字和尾字的出現次數,如果這些字出現的次數大于一定值就認為這些字構成的詞屬于常用搭配而不是新詞,比如“了”就在首尾中出現了261次,高于預設的閾值100,那么認為這些詞語就是不合理的新詞將其進行刪除。
需要注意的是,由于分詞只是將合理的詞切分出來,不涉及詞語語義的理解,因此中文的同義詞只要是正確的詞,組成它們的字之間的互信息以及它們與鄰近字之間的聯系與其他正確詞語具有相似的特性,同樣可以采用本文方法進行切分,無需特殊處理。
盡管本文提出的新詞發現算法提取出的新詞詞表具有較高的準確性和領域性,但目標領域語料是完全基于新詞詞表和分詞算法進行自動標注的。由于詞表和分詞算法本身并不能保證完全正確,因此自動標注的語料會存在著一定數量的噪聲樣本。基線系統中使用的GCNN-CRF算法原本是基于正確標注好語料而設計的,并未考慮到訓練語料中會存在噪聲,因此并不具有抑制噪聲對模型影響的能力,自動標注語料中的噪聲將會影響分詞模型的性能。針對這個問題,本文提出了一種基于對抗式訓練的中文分詞模型,通過單獨提取出源領域和目標領域的共有特征來提高目標領域特征的魯棒性,其結構如圖2所示。
由圖2可以看到,本文提出的跨領域分詞模型包含3個GCNN編碼器,分別是源領域GCNN編碼器、目標領域GCNN編碼器和共享GCNN編碼器。源領域編碼器和目標領域編碼器只接收各自領域的文本作為輸入,用于提取各自領域獨有特征,共享編碼器則同時接收兩個領域的文本作為輸入,提取兩個領域的共有特征。源領域編碼器得到的獨有特征和共享編碼器得到的共有特征組合即可得到源領域的文本特征,再將這個特征輸入到CRF中對源領域的文本預測詞位標簽。目標領域的處理方式與源領域相同。共享編碼器的目標是盡可能提取出源領域和目標領域共有的特征,文中采用了對抗式訓練來對其進行優化,將共享編碼器中提取出的共有特征輸入到一個文本判別器TextCNN[15]中,使用文本判別器來判別共享編碼器輸出的特征是來自源領域還是目標領域。


圖2 基于對抗式訓練的中文分詞模型

通過共享編碼器和文本判別器的對抗式訓練,可以使共享編碼器提取的特征包含更少的源領域和目標領域的獨有特征,越來越接近兩個領域的共有特征。與單個GCNN-CRF相比,本文方法有以下優勢:(1)由于源領域的語料是正確標注的,因此兩個領域的共有特征在理想情況下不含噪聲,目標領域中的標注噪聲只存在于其獨有特征中。將目標領域的共有特征和獨有特征分離,可以將噪聲的影響限制在一定范圍內,從而提高目標領域分詞對標注錯誤的魯棒性。(2)將源領域損失與目標領域損失的和作為總損失,與原GCNN-CRF模型相比相當于在訓練過程中加入了正則化,可以起到防止過擬合和增強魯棒性的作用。
實驗中采用的數據分為源領域和目標領域兩個部分,其中源領域數據為中文分詞領域中普遍使用的北大開源新聞語料[16],目標領域數據包括醫療、小說《誅仙》和《斗羅》、發明專利3個領域的語料,這些目標領域語料中都隨機選取一部分做了人工標注作為測試集,其中訓練集和測試集的比例大致為5:1。各個數據集的大小如表1所示。

表1 實驗中使用的語料大小(Byte)
實驗中所使用的深度神經網絡的訓練和識別均基于開源框架tensorflow1.14,所有數據的編碼格式為UTF-8,GCNN網絡維度為200,層數為5,Dropout率為0.2,學習率為0.001,Epoch數為15。新詞發現中的使用N-Gram方法切分的字符串片段最大長度為6,候選詞得分閾值為0.95,詞頻閾值為8,首字和尾字的出現次數閾值為100。以上閾值均為經驗閾值,通過觀察和實驗來確定。字符串最大長度、詞頻閾值、首字和尾字出現次數閾值分別通過觀察統計訓練語料分詞結果中正確詞語的長度、詞頻、典型的首字和尾字(如上文提到的“了”字)出現次數得到,這些閾值設置過嚴容易導致正確的詞語被切分開或丟棄,而設置過寬松則容易產生錯誤的字詞組合。候選詞得分閾值則是在實驗中嘗試多個閾值后,選取未登錄詞率最優的0.95。
實驗中對新詞發現和中文分詞算法的性能采用了不同的評價指標。新詞發現算法的主要目的是用于解決跨領域中文分詞中的未登錄詞問題,因此實驗中使用未登錄詞率(即未登錄詞數量與總詞數的比值)來作為評價指標。中文分詞算法的性能則采用了準確率、召回率和F值(F-measure)3個常用的評價指標來衡量。
為了衡量本文提出的新詞發現算法的性能,實驗中首先分別使用MI+BE算法和本文提出的新詞發現算法從目標領域訓練語料上提取該領域相對源領域語料獨有的新詞,再利用新詞詞表對目標領域測試語料進行自動標注,并統計標注過程中出現的未登錄詞占總詞數的比例。實驗中還對不進行新詞發現、直接使用源領域詞表對目標領域測試語料進行自動標注時的未登錄詞率進行了統計。表2給出了無新詞發現、MI+BE算法和本文提出的新詞發現算法應用于目標領域測試語料時的未登錄詞率。由表2的結果可以看出,使用了新詞發現算法的未登錄詞率比無新詞發現、直接使用源領域詞表時有顯著的下降,同時,本文所提的新詞發現算法要明顯優于傳統的MI+BE算法,在各個語料上都取得了最好的效果,說明了本文方法的有效性。

表2 不同方法的未登錄詞率(%)
為了更好地檢驗本文算法所提取的新詞的合理性,表3給出了MI+BE算法和本文算法從各個語料中提取的前20個最頻繁出現詞中垃圾詞串的數目。由表3可以看到,本文方法提取的詞表更準確,有效地減少了詞表中無意義的垃圾詞串數量。
為了測試本文提出的基于對抗式訓練的分詞算法的效果,表4給出了GCNN-CRF與本文對抗式訓練模型在目標領域測試語料上分詞的準確率、召回率和F值,其中基線系統使用了MI+BE的新詞發現算法和GCNN-CRF分詞算法,GCNN-CRF使用了本文的新詞發現算法和GCNN-CRF分詞算法,本文方法使用了本文的新詞發現算法和對抗式訓練模型。由表4可以看到,基線系統的性能最差,使用了本文新詞發現算法的GCNN-CRF性能次之,本文方法性能最優,這說明:(1)由于傳統的MI+BE算法提取的新詞詞表中存在著較多的缺失和錯誤,本文的新詞發現算法能更準確地提取新詞,因此使用了本文新詞發現算法的GCNN-CRF性能顯著優于基線系統。(2)由表3可知,本文的新詞發現算法中仍存在著少量標注錯誤的噪聲樣本,而在中文分詞中引入對抗式訓練可以有效地降低噪聲樣本對模型的影響,使模型在跨領域分詞時取得比傳統GCNN-CRF更高的準確率。

表3 前20個最頻繁出現詞中垃圾詞串數(個)

表4 基于對抗式訓練的分詞算法效果
為了衡量本文方法的整體性能,實驗中將本文方法與文獻[6]所提的方法進行了對比。文獻[6]提出的分詞模型首先采用人工識別的方法提前獲得目標領域詞典,然后將該領域詞典作為先驗知識和源領域標注語料組成訓練集,通過訓練改進的BiLSTM+CRF網絡模型實現跨領域分詞。由于本文所用的目標領域語料沒有現成的人工標注詞典,因此文獻[6]的方法中人工詞典使用本文的新詞發現算法構造的詞典代替。從表5可以看到,本文方法的性能顯著優于文獻[6]的方法。

表5 本文方法與現有方法的性能對比
未登錄詞和表達鴻溝是目前跨領域中文分詞中的難點問題,而目前同時解決兩個問題的研究尚不多見。本文針對這兩個問題,構建了一個基于新詞發現的跨領域中文分詞系統,可以自動完成從目標領域語料中提取新詞、標注語料和訓練網絡模型的工作。在此基礎上,針對常用的MI+BE新詞發現算法提取出的詞表垃圾詞串多的問題,對互信息和鄰接熵的提取進行了改進,提出了一種基于向量增強互信息和加權鄰接熵的無監督新詞發現算法;針對自動標注語料中存在的噪聲文本問題,提出了一種基于對抗式訓練的中文分詞模型,使用對抗式訓練來提取源領域和目標領域的共有特征,以提高中文分詞系統的魯棒性和跨領域表達能力。實驗中將使用北大開源新聞語料訓練的網絡模型提取出的特征遷移到醫療、發明專利和小說領域,結果表明本文所提方法在未登錄詞率、準確率、召回率和分詞F值方面均優于現有模型。