朱 運,李正華,黃德朋,張 民
(蘇州大學 計算機科學與技術學院,江蘇 蘇州 215006)
漢語分詞(Chinese word segmentation,CWS)是將輸入的句子切分成詞序列的過程。作為其他自然語言處理任務(如詞性標注[1]、句法分析[2]、信息抽取[3]、情感分析[4]等)的基礎,漢語分詞的結果會直接影響上層任務的性能。
目前,基于統計的漢語分詞方法在封閉領域內已經獲得很高的性能[5-6]。這些模型使用的訓練數據大多來源于人工標注的新聞語料,其中具有代表性的有Xue等[7]構造的賓州中文樹庫(Penn Chinese Treebank,CTB)以及由北京大學計算語言學研究所構造的《人民日報》語料庫(People’s Daily,PD)[8]。然而,當該任務的測試數據屬于微博、小說等非新聞領域時,分詞性能會大幅下降。因此,漢語分詞的領域移植問題一直是一個難題。
為了應對這一難題,傳統的處理方法是標注一部分目標領域的數據,將其作為額外的訓練語料混合到原有訓練語料中。這種方法雖然有效,但是代價高昂,需要花費大量的人力、時間去標注數據。另一種廣泛采用的方法是利用互聯網數據來提供有益于模型的分詞信息。雖然這些互聯網數據可以提供的信息有限,但是來源豐富且易于獲得。
本文中,我們從兩個方面來提升領域移植的性能。第一,我們對測試數據進行預處理并提取稀疏特征,以此來提升神經網絡模型本身的泛化能力;第二,我們采用Jiang 等[9]和Liu等[10]的做法,利用網頁弱標注數據彌補模型缺少的分詞信息,提升模型的新詞識別能力。
我們在SIGHAN Bakeoff 2010評測數據以及ZhuXian (ZX)數據集上進行實驗。最終結果表明,我們的方法顯著提升了領域移植的分詞性能。現有模型在對測試數據進行預處理以及提取稀疏特征后各個領域的F值提升2.7%,百科弱標注數據的加入使得F值進一步提升了0.9%。
漢語分詞可以被視為一個序列標注問題,即句子中的每個漢字從左到右依次被賦予一個相應的分詞切割標簽。本文采用四標簽集T={B, M, E, S}來表示分詞標簽。B、M、E分別表示當前字位于一個詞的開始、中間和結尾,S表示當前字單字成詞。
全標注場景中,句子的每個位置上都有一個確定的標簽,因此這句話僅有一個合理的標簽序列。如圖1所示,句子“我是中國人。”在圖中對應的分詞標簽序列就是(S, S, B, M, E, S)。

圖1 “我是中國人。”的全標注標簽序列
采用Chen等[11]的做法,我們將BiLSTM-CRF模型(1)https://github.com/YUNMI2/cws作為基礎模型。如圖2所示,模型包含表示層、編碼層、得分層和預測層4個部分。表示層通過窗口化N-gram信息來捕捉局部特征,編碼層通過Bidirectional Long Short-Term Memory(BiLSTM)進行句子信息編碼,得分層通過Multilayer Perceptron(MLP)計算每個標簽得分,預測層使用Conditional Random Field (CRF)預測整個標簽序列。

圖2 BiLSTM-CRF模型
表示層中,我們采用隨機初始化的方式來初始化一個詞嵌入向量查詢表,通過查詢索引表來獲取當前字的unigram以及bigram的詞嵌入向量。
給定一個句子S=c1,c2,c3,…,cn,ci表示句子中第i個字,n表示句子中字的個數。對于句中每個字符ci,我們窗口化該字及其周圍字的N-gram信息enc(ci)獲得當前字的局部特征向量表示Xi。如圖3所示,e(ci)和e(ci-1ci)分別表示字符ci的unigram嵌入向量和bigram嵌入向量,r表示窗口的大小,那么Xi可以表示為如式(1)、式(2)所示。
enc(ci)=e(ci)⊕e(ci-1ci)
(1)
Xi=enc(ci-r)⊕…⊕enc(ci)⊕…⊕enc(ci+r)
(2)

圖3 字符ci的局部特征表示Xi
編碼層中使用BiLSTM單元負責對句子信息進行編碼。我們將表示層的輸出Xi作為LSTM的輸入,通過LSTM對整個句子序列進行編碼得到字符ci的全局信息hi,如式(3)~式(7)所示。
ii=σ(Win·[hi-1,xi]+bin)
(3)
fi=σ(Wfg·[hi-1,xi]+bfg)
(4)
oi=σ(Wout·[hi-1,xi]+bout)
(5)
ci=fi·ci-1+ii·tanh(Wc·[hi-1,xi]+bc)
(6)
hi=oi·tanh(ci)
(7)
其中,ii,fi,oi,ci分別表示第i個字對應的輸入門、遺忘門、輸出門和細胞狀態的輸出,xi和hi表示第i個字對應的輸入和隱藏層輸出。σ表示sigmoid 激活函數,W和b分別對應相應門的權重以及偏置。
由于單向的LSTM僅能編碼單個方向的句子信息,因此我們將前向、后向LSTM的隱層輸出拼接,得到字符ci的BiLSTM表示hi,如式(8)所示。
得分層中,我們采用MLP計算得到每個標簽的得分。我們將BiLSTM單元的輸出hi作為輸入,計算得到句子中每個位置上的字對應的每個標簽的得分Pi,如式(9)所示。
其中,Wmlp和bmlp分別表示MLP層的權重和偏置。
預測層中,我們采用CRF進行最終的標簽序列優化。
全標注場景下,句子中每個字都有一個明確的分詞標簽,所以在包含N個句子的全標注數據集D中,長度為n的句子S在標簽集合T上所有可能的Tn種標簽序列中僅有一條正確的路徑Y。對于Y=y1,y2, …,yn,我們定義Score(S,Y)為句子S被標記為Y的得分,p(Y|S)表示句子S被標記為序列Y的概率。那么全標注CRF的學習目標就是最大化權重W下句子S被標記為Y的對數似然函數LL(D;W),如式(10)~式(13)所示。

(10)

(11)

(12)

(13)
其中,A表示轉移矩陣,Ai,j表示標簽集合T中i標簽轉移到j標簽的分數,Z(S)表示句子S的Tn種可能得分之和。
Jiang等[9]工作表明,在基于傳統離散特征的分詞方法中融入弱標注數據可以顯著提高領域移植的性能。
與全標注數據不同,弱標注數據僅能提供句子中少部分位置上的分詞信息,即句子中只有部分位置上有確定的或者模糊的標簽。在這種弱標簽的約束下,句子的合理標簽序列不止一條。如圖4所示,在“我是中國人。”這句話中,我們已知“/中國人/”和“/中國/人/”是可能的分詞結果,其余位置未知,那么該句所有的滿足已知約束的標簽序列為({B, M, E, S}, {B, M, E, S}, {B}, {M, E}, {E, S}, {B, M, E, S})。

圖4 “我是中國人。”的弱標注示例
我們采用Jiang等[9]的方法從網頁文本中挖掘弱標注數據。在網頁數據中,詞語的邊界信息隱藏在超鏈接和其他標記注釋中。這些超鏈接在句中獨立于其周圍的文本,具有獨立的意義。而在漢語分詞任務中,詞是句中包含獨立意義的單位。我們通過這一共性挖掘網頁中包含潛在分詞切分信息的弱標注數據。
我們選取百科網頁作為弱標注數據的來源。百度百科幾乎涵蓋了所有領域,由于用戶的參與,所以保證了信息的時效性以及涵蓋知識的領域寬廣性,但也為百科數據帶來了大量的噪聲。
同時,不同分詞規范的存在也允許同一句話的標簽序列可以不唯一,即在不同的標注規范中同一句話可以被標注為不同的標簽序列。例如,
百科數據1“李震是遼寧省電大經濟專業中心組研究員”。
在百科數據1中,“遼寧省”是一個超鏈接。遵循不同的分詞規范,“遼寧省”可以被切分為“/遼寧/省/”和“/遼寧省/”兩種情況。為了避免引入百科數據給模型帶來大量噪聲,我們采用了模糊標注的方法給超鏈接片段的邊界字賦予一個模糊的標簽。在百科數據1中,我們將超鏈接片段中左右邊界字的標簽集合縮小,即“遼”和“省”對應的分詞標簽集是{B, S}和{E, S}。同時超鏈接周邊字的標簽集也被限制減小,即“是”和“電”的標簽只能是{E, S}和{B, S},其余無關的漢字的標簽集都是全標簽集,即{B, M, E, S}。
模糊標注允許不同的分詞規范,限制了字的可能標簽集合,同時減少了整個分詞標簽序列的搜索空間。我們調用Beautiful Soup(2)https://www.crummy.com/software/BeautifulSoup/對百科網頁的HTML標簽進行解析,同時去掉弱標注片段是單字的情況,最終保留了句子長度在10到100個字之間的54 130 117句百科數據。由于加入過多的弱標注數據會耗費大量訓練的時間,因此我們從中隨機抽取了50萬句百科數據進行實驗。


(14)

(15)

(16)
至此,弱標注數據和全標注數據的損失函數形式保持一致,模型可以統一處理弱標注數據和全標注數據。那么全標注的數據集D和弱標注數據集D′混合之后的損失函數就是兩者損失函數之和,如式(17)所示。
百科弱標注數據含有大量噪聲,如果直接采用所有數據,就會把完整標注數據淹沒且弱標注數據中重要的樣本也不能充分發揮作用。因此我們提出了一種簡單有效的百科數據篩選方法。
我們認為,對模型有益的分詞信息集中在弱標注數據的片段上,所以我們統計弱標注片段整體出現在測試領域dev數據集上出現的頻率,并定義一句話的領域相關性為這句話中所有弱標注片段的出現頻率之和。最后,我們僅保留出現頻率大于0的百科句子。最終保留的百科數據統計如表1所示。

表1 不同篩選方法保留的百科數據規模統計(句子數)
漢語分詞中,未登錄詞(OOV)的識別一直是一個難題,而領域移植的目標領域中往往包含很多未登錄詞。現有模型難以識別這些領域的未登錄詞,因此我們對數據進行了預處理來提升模型的識別能力。通過對數據進行觀察,我們發現了一些有趣的規律,特定領域的專業詞匯往往具備以下特征。
(1) 連續的數字或者大小寫相同的英文,例如,“USB”等;
(2) 連續的英文且大小寫相間隔,大寫字母往往表示一個詞匯的開頭,如人名等;
(3) 連續的非中文字符中英文、數字以及特定的標點符號夾雜,如“RS-232”等。
針對上述情況,現有模型的預測結果不是很理想,而基于規則的方式卻能很好地識別出這些專業詞匯。我們對語料進行規則預處理,將具備上述特征的連續字符合并成一個整體單元(類似于一個普通的漢字),然后將處理之后的句子重新輸入到模型中進行預測。
在對數據進行預處理之后,我們對比測試數據的預測標簽和正確標簽,發現模型對于一些有潛力預測正確的詞語識別較差。
現有模型可以較好地識別訓練語料里面存在的數字、英文等非中文字符,卻不能辨別訓練語料里面未出現的其他非中文字符。受傳統稀疏特征模板啟發,我們發現稀疏特征可以很好地彌補上述不足。因此,我們在神經網絡模型中引入傳統稀疏特征。
我們采用的特征模板如表2所示。其中,ci表示句子中的第i個字;N-gram特征信息表示這個字周圍的信息;Type表示這個字屬于Number,Punctuation,English還是Chinese;Identical表示第i個字和前面一個字的是否相同,這個特征捕捉周圍字是否是疊詞這一信息。

表2 句中第i個字的特征模板
我們按照上述模板依次對句子中的每個字進行特征抽取,并隨機初始化每種特征所映射的嵌入向量。e(fi,k)表示第i個字的m個稀疏特征中第k個所對應的向量,最后將所有特征對應的嵌入向量進行拼接來替換式(1)中enc(ci),如式(18)所示。
我們分別在兩種不同來源的數據集上進行實驗,分別是SIGHAN Bakeoff 2010評測數據以及ZX數據集。其中,SIGHAN Bakeoff 2010評測數據包含四個具體的領域,包括Finance (Fin),Medicine (Med),Literature (Lit),Computer (Com)。ZX數據集來源于網絡小說。為了與前人的工作進行比較,我們采用Jiang等[9]和Liu等[10]的實驗設置,將PD作為源領域訓練數據去測試SIGHAN Bakeoff 2010評測數據。同時,我們采用Liu等[10]的實驗設置,使用CTB5作為源領域訓練數據去測試ZX數據。具體的數據規模統計如表3所示。

表3 數據規模統計
實驗中,弱標注訓練數據的規模為500 000句,而全標注的訓練數據量僅有不到30 000句,如果訓練階段將弱標注數據和全標注數據直接混合,那么全標注數據將遠遠小于弱標注的數量(30 000 和 500 000)。為了可以平衡不同語料在模型訓練中的貢獻,我們采用Li等[13]提出的corpus weighting的訓練方法,每次迭代從全標注數據中隨機抽取M個句子,同時從弱標注語料中隨機抽取N個句子,混合打亂作為一次迭代的全部訓練語料。整個訓練過程中,模型如果連續I次迭代在Dev數據集上F值不提高就停止。
本實驗中,我們使用Adam更新算法[14]對模型進行更新。基于初步實驗結果,我們對所有的模型均采用M=N=10 000以及I=50的實驗設置。
如表4所示,數據預處理對除ZX以外的4個測試數據的F值都有超過1%的提升,且這些數據的F值提升均值達到了1.71%。
在數據預處理的基礎上,我們在模型中引入傳統稀疏特征。如表4所示,傳統特征的引入可以在數據預處理的基礎上進一步獲得0.97%的F值提升,且在Com、Fin和ZX數據上提升顯著。
在對數據進行預處理和引入傳統特征的基礎上,我們在全標注訓練數據中分別混入兩種百科數據。如表4所示,直接混合百科數據訓練的方式在所有領域上可以平均提升0.66%。篩選后雖然只保留了很少一部分的弱標注數據,但是可以更有效地幫助模型,在所有領域上平均提升0.9%。這個結果表明,我們提出的數據篩選方法是有效的,不但可以提高模型訓練的效率,同時可以更精準地提高模型在特定領域上的性能。最終,我們在所有領域上平均提升3.6%。
表5列舉和比較了在兩個數據集上的相關工作的結果。首先我們比較了近年來在本文數據集上的基準系統(不使用額外弱標注數據)的結果。其中,Zhang 等[15]是目前最新的漢語分詞領域移植的工作,其主要貢獻是探討如何將詞典知識融入分詞模型中。由于Zhang 等[15]采用與 Liu 等[10]不同的實驗設置,為了和他們的方法進行比較,我們使用作者公布的基準系統代碼(3)https://github.com/fudannlp16/CWS_Dict, 在Liu 等[10]的實驗數據集上運行得到基準結果。由表5可以看出, 我們的基準系統和其他工作相比,性能略好。

表5 最終實驗結果統計(F值)
進而,我們比較了采用弱標注數據的幾種方法的結果。和Jiang 等[9]和Liu 等[10]相比,我們的方法在SIGHAN Bakeoff 2010數據集上的平均F值超過前者。
值得注意的是,在ZX數據集上,我們表4中的性能89.68%仍然低于Liu等[10]的90.63%。在此我們真誠感謝審稿人提出這個問題。經過和原文作者交流,我們借鑒Liu 等[10]的方法,使用他們手動構建的詞典(155個和ZX高度相關的實體名),然后用這個詞典對ZX剩余的無標注數據(15 997句)進行前向和后向最大匹配分詞,如果兩個分詞結果中都包含了一個詞典詞,則將這個詞典詞在這個句子中確定為一個分詞答案,從而形成弱標注數據。我們額外使用了這部分弱標注數據,性能從89.68%提高到90.92%。
通過最終結果可以看到,本文提出的方法最終性能略高于Liu 等[10]。我們在相關工作部分討論兩種方法的差異以及本文方法的貢獻。
在數據預處理階段,測試領域數據中符合規則合并的地方越多,性能提升越明顯。如表6所示,Com和Fin兩個領域上預處理的地方最多,性能提升最明顯。
表6 預處理方法修改的數量總計以及Test數據集上F值提升統計

ComFinMedLitZXAvg#ChangeTest-F2507+2.73933+2.95498+1.43105+1.4100808.6+1.70
在數據預處理基礎上引入傳統特征的方法在所有領域上性能均值提升明顯且穩定。如表4所示,傳統特征的引入在所有領域上都不遜色于數據預處理,而且在Com、Fin和ZX三個領域上性能可以達到新的峰值。
此外,弱標注數據的領域相關性很大程度上決定了領域移植任務性能的提升幅度。以弱標注片段出現頻率為條件篩選百科數據的方法要求苛刻,保留的數據規模小且質量高。如表1所示,篩選保留的數據僅有原有語料20%的數據規模,但在性能上卻能達到甚至超過直接混合的方法。
最后,在使用與目標領域相關的網頁弱標注數據提升對應領域的分詞性能基礎之上,混入該領域的無標注數據可以進一步提升分詞性能。
目前有很多研究工作嘗試利用額外無標注數據來提升漢語分詞性能。如Zhao 等[15]基于大規模無標注數據收集字符之間的共同信息,以此來提升分詞的性能;Li 等[16]使用大規模語料上的標點信息來學習一個分詞模型,該方法在未登錄詞的識別上能夠達到很好的性能;Sun 等[17]利用無標注數據的統計特征來提升分詞性能。然而,這些工作都沒有針對領域移植場景。
在利用領域詞典特征方面,Zhang 等[18]提出將領域詞典特征融入基于傳統離散特征的分詞模型中,提升目標領域上的分詞性能。Zhang 等[19]將這一思想應用到基于神經網絡的分詞模型中。
在利用弱標注數據方面,Jiang 等[9]使用中文wikipedia數據獲取160 000弱標注句子,來提升分詞領域移植性能,其采用了基于感知器的全局線性模型作為基準分詞方法。Liu 等[20]借鑒了Jiang 等[9]的工作并同樣采用wikipedia弱標注數據,但采用基于傳統CRF模型作為基準分詞方法。不同于這兩個工作,本文采用了基于神經網絡的BiLSTM-CRF模型,并對其進行擴展,以利用弱標注數據。本文結果表明,在神經網絡模型上,弱標注數據同樣可以大幅度提高分詞領域移植的性能。
從弱標注數據篩選的角度來看,本文和前人工作也有不同。Jiang 等[9]直接將標注數據和弱標注數據進行合并。Liu 等[10]使用自動獲取的領域相關詞典對弱標注數據進行了篩選。和Liu 等[10]的工作相比,本文所提出的方法只需要目標領域的無標注數據,而不需要構造領域詞典,因此更加簡單。弱標注數據篩選可以有效提高訓練效率,并且可以防止人工標注數據被弱標注數據淹沒。
近年來也有一些分詞模型本身的創新性工作,包括基于字嵌入向量刻畫語義信息的序列標注分詞方法Chen 等[11]、基于雙字嵌入向量表示的分詞方法Zhang 等[19]、基于詞的神經網絡分詞方法Cai 等[20]。本文中,我們從當前字上下文抽取稀疏特征,并得到對應的嵌入向量,作為BiLSTM的額外輸入。
目前,基于神經網絡的分詞方法在封閉領域文本上性能很高,但是在其他領域上性能下降明顯。由于目標領域的人工標注數據難以獲取,我們借鑒前人的工作,從可自由獲取的數據中抽取弱標注數據,幫助提升領域移植性能。本文使用BiLSTM-CRF模型并且結合網頁弱標注數據來處理漢語分詞領域移植任務。在提升領域移植性能方面,我們從篩選弱標注數據和提升模型本身泛化能力兩個方面出發。一方面,篩選與目標領域相關的弱標注數據可以更好地發揮弱標注數據里重要樣本的作用。另一方面,我們對數據進行預處理以及在深度神經網絡模型中引入傳統稀疏特征,便于模型學習特定領域未登錄詞與已登錄詞之間的聯系。最后,在所有的領域移植任務上我們的性能都達到,甚至超過前人的結果。