邢 玲,程 兵
(1. 中國科學院數學與系統科學研究院,北京 100190;2. 中國科學院大學,北京 10049)
分詞作為文本數據處理的前期工作,對后續任務結果的好壞起著至關重要的作用。中文文本相比英文文本要復雜,英文文本中單詞和單詞之間有空格作為分隔符,而中文文本中最小可分割單位為句子,句子是由字序列組成,但是單個字不代表一個詞語,因此將字序列切分為詞語即分詞,是一個值得研究的問題。中文分詞算法主要分為三種,分別是基于詞典的分詞算法、基于統計的分詞算法和基于語義理解的分詞算法。
基于詞典的分詞算法,在分詞前給定詞典,通過將待分詞文本與詞典進行匹配,根據規定的匹配算法得到詞序列。按照掃描文本的順序,常用的匹配算法有正向最大匹配算法,逆向最大匹配算法,雙向最大匹配算法。另外,詞典的結構設計影響著匹配效率,常見的詞典結構設計基于整詞二分[1]、基于Trie索引樹[1]、基于逐字二分[1]、基于雙字哈希機制[2]以及它們的改進形式[3,4]。由于直接和詞典中詞進行匹配,基于詞典的分詞算法準確率較高。然而詞典無法窮盡所有詞語,比如新詞“新冠病毒”不在詞典中,這意味著詞典是不完備的。將不在詞典中的詞稱為未登錄詞,包括人名、地名、機構名稱、縮略詞、領域詞語、新詞。未登錄詞較多的情況下,基于詞典分詞算法的準確率會隨之下降。
基于統計的分詞算法,分為有監督分詞方法和無監督分詞方法。有監督分詞方法主要是基于字標注的機器學習算法,該方法將對字序列進行分詞轉化為對字序列進行位置標注問題。漢字的邊界位置標注方法包括2位標記、4位標記等[5]。通常利用4位標記進行研究,B表示開始位置、M表示中間位置、E表示結束位置及S表示單字構詞[5]。利用人工標注語料集學習模型參數,將學習好的模型對字序列文本進行預測,得到字位置標注。常見的用于分詞的機器學習模型有隱馬爾科夫模型(HMM)[6]、最大熵模型(ME)[7]、條件隨機場模型(CRF)[8]。該方法可以較好的解決未登錄詞問題,但是需要大規模人工標注語料作為訓練數據。無監督分詞方法利用字串在未標注語料中的統計信息構建良度[9],經典的良度標準有子串頻率[10]、描述長度增益[10]、鄰接多樣性[10]和分支信息熵[10]。該方法不需要對語料庫進行人工標注,但是僅僅依賴于無監督分詞方法進行分詞,得到的準確率通常較低。
基于語義理解的分詞方法,結合待切分文本的語義信息,模仿人的閱讀理解方式進行分詞。深度學習算法考慮了上下文信息,可以更好的理解語義,因此CNN[11]、LSTM[12]等被引入到分詞任務中。詞向量模型將詞表示為向量,將詞語數學化,可以更好表示詞語語義,因此詞向量模型如Word2Vec[13]、Glove[14]以及近幾年提出的動態詞向量訓練模型如Elmo[15]、Bert[16]等被應用到分詞任務中。但是這些算法比較復雜,對計算機要求較高?,F在基于語義理解的分詞算法還不是很成熟,有待發展。
以上三種分詞方法并不是割裂的,將它們進行整合,可以提高分詞準確率。結巴分詞是將詞典分詞和統計分詞方法結合起來的分詞工具。結巴分詞基于一個具有將近35萬個詞的詞典,為了實現高效查找詞語,構建前綴樹存儲這些詞語,對于待分詞文本,根據前綴樹,構建有向無環圖,利用動態規劃算法,找到路徑最短的切分方式。對于不在詞典中的詞語,利用統計分詞方法中的HMM算法,對這些詞語進行字序列位置標注,根據標注結果進行分詞。這樣一方面基于詞典可以進行有效分詞,另一方面對未登錄詞也可以進行識別切分。但是,對于未登錄詞分詞后得到的詞語大部分詞長為2,對于人名,地名,機構組織,專業領域詞語等詞長大于2的詞語分詞效果不是很好。比如對于金融領域“羊群效應”這個領域詞組,結巴分詞結果為“羊群”和“效應”這兩個詞,這是不合理的。
將“羊群效應”作為一個詞進行切分稱為領域分詞。領域分詞是指將領域中的專有領域詞組作為整體切分出來,通常的分詞算法將一個領域詞組切分為幾個詞,這是不規范的,甚至會導致理解偏差。已知,領域詞組通常只是出現在所在領域,屬于低頻詞,因此領域分詞是一個具有挑戰但是重要的研究領域。
張梅山等[17]通過將詞典信息以特征方式融入到統計分詞模型來實現領域自適應性。該方法依賴于領域詞典信息,嚴格來說沒有完全實現領域自適應分詞。韓冬煦等[18]將卡方統計量特征和邊界熵特征加入到訓練模型中,并結合自學習和協同學習策略進行訓練,改善了分詞方法領域適應性。該方法本質上將無監督統計分詞方法與有監督統計分詞方法結合起來,對于不同領域需要重新訓練模型,比較耗費時間。張立邦等[9]首先利用通用詞典對語料進行初步切分,利用EM算法不斷更新切分結果,直到切分結果不再變化。然后利用左右分支信息熵構建良度,對切分結果進行調整,從而到達識別電子病歷中未登錄詞的目的。該方法本質上是將詞典分詞方法與無監督統計分詞方法結合起來,在對切分結果利用無監督方法調整時,針對電子病歷特征定義了相應規則,對于其它領域分詞不具有適用性。杜麗萍等[19]利用改進的互信息算法與少量基本規則結合,從語料中發現新詞,將新詞加載到漢語詞法分析系統ICTCLAS中,從而改善漢語詞法分析系統ICTCLAS。該方法在發現新詞過程中,只是考慮了詞的凝聚度,沒有考慮詞的自由度。馮國明等[20]將詞典、統計、深度學習三者結合起來,學習分詞算法。該方法沒有考慮詞典存儲結構問題,同時利用深度學習算法,模型計算復雜度較高。宮法明等[21]以自適應馬爾科夫模型為基礎,結合領域詞典和互信息,以語義和詞義約束校準分詞,實現對石油領域專業術語和組合詞的精確識別。該方法需要提前構建石油領域詞典,不能用于其它領域分詞,領域遷移性較差。
針對以上問題,本文在結巴分詞基礎上,提出領域自適應分詞方法。由于結巴分詞對詞長大于2的領域詞組分詞效果較差,本文提出的領域自適應分詞方法主要利用無監督分詞方法識別詞長大于2的領域詞組,從而使得結巴分詞無需加載人工定義詞典,可以實現領域自適應分詞。該方法首先利用結巴分詞方法對文本進行分詞;其次基于標準化點互信息[22]和詞頻統計[23]兩種方式計算相鄰詞合成為一個詞組的凝聚度,設定凝聚度閾值,選擇符合條件的詞組;接著利用左右信息熵[24]計算選出詞組的自由度,設定自由度閾值,選擇符合條件詞組;最后利用本文提出的詞性約束規則去掉不符合構詞規則的詞組,盡可能得到正確的領域詞組。將得到的領域詞組作為結巴分詞中自定義詞典加入到結巴詞庫中,再次利用結巴分詞對文本進行分詞,實現領域自適應分詞。本文接下來安排如下:第二節介紹相關知識;第三節介紹本文提出的領域自適應分詞方法;第四節介紹實驗部分;第五節介紹基于區分領域的領域自適應分詞評價方法;第六節是結論。
給定兩個詞語,它們組成一個詞組的可能性越大,稱它們凝聚度越大。本文用兩個分數公式來計算詞語之間的凝聚度。
第一個分數公式基于標準化點互信息[22]給出。分數公式如下
Score1(w_a,w_b)=

(1)

第二個分數公式基于詞語出現頻數以及共現詞語頻數來定義的[23],公式如下

×(count(w_a,w_b)-mincount)
×count(vocab_words)
(2)
其中,count(w_a)表示詞語a在語料中出現的次數;count(w_b)表示詞語b在語料中出現的次數;count(w_a,w_b)表示詞語a與詞語b共現的次數;count(vocab_words)表示語料庫去掉重復詞后的詞語個數;mincount表示設定的兩個詞語共現次數的閾值,當兩個詞語共現次數小于這個值時,則舍去由這兩個詞組成的詞組,被用來作為減少出現偶見詞組的可能。該分數的取值范圍大于0。
設定凝聚度閾值,如果組合詞組凝聚度分數大于閾值,則選出該詞組,否則,舍棄該詞組。計算得到的詞組分數值越大,說明詞語a與詞語b組成詞組的凝聚度越大,該詞組越有可能被當作領域詞組識別出來。
考慮兩個詞語是否可以構成一個詞組,一方面考慮它們的凝聚度,即這兩個詞語組合成一個詞組的黏合性,這個度量可以利用2.1中式(1)或者式(2)來定義;另一方面需要考慮所構成詞組的自由度,即該詞組左右出現的緊鄰字是否具有多樣性。通常來說,一個詞語的上下文是不固定的,可以和多種字結合。本文用左右信息熵[24]來度量詞組的自由度。左右信息熵的公式如下:
左熵:

(3)
右熵:

(4)
其中,W表示一個詞組;leftW表示W左邊所有緊鄰字的集合;rightW表示W右邊所有緊鄰字的集合;p({w,W}|W)表示字w緊鄰詞組W左邊的概率,通過統計詞頻來計算,等于字w緊鄰詞組W左邊的頻數與W左邊所有緊鄰字的頻數之和的比值;
p( {W,w}|W)表示字w緊鄰詞組W右邊的概率,等于字w緊鄰詞組W右邊的頻數與W右邊所有緊鄰字的頻數之和的比值。
取min(EL(W),ER(W))作為詞組W的自由度,用來和設定的自由度閾值比較,如果大于閾值則說明詞組W的左右緊鄰字比較多樣,W可以看作一個詞組,否則W不能作為一個詞組。自由度越大,該詞組被識別出來的可能性越大。
由凝聚度和自由度兩個統計度量識別領域詞組的同時,也會引入一些嚴格意義上不是領域詞組的組合。比如由詞語“上”和詞語“顯著”組成的詞組“上顯著”,該詞組的凝聚度分數和自由度分數大于所設置的凝聚度閾值和自由度閾值,因此詞組“上顯著”會被當作領域詞組識別出來,顯然,這是不合理的詞組組合。根據短語結構類型[25]提出了針對結巴分詞中詞長大于2的未登錄詞的詞性搭配規則,實現了對詞組的約束,從而盡可能篩選出標準詞組。本文中的詞性是按照北大詞性標注集來定義的。本文提出的詞組詞性搭配規則如附錄1所示。
在結巴分詞的前提下,首先利用凝聚度公式計算結巴分詞后相鄰詞語組成詞組的凝聚度,通過凝聚度閾值選出詞組候選詞;其次利用自由度公式對候選詞組計算其自由度,根據自由度閾值再次選出候選詞組;最后根據本文規定的詞組詞性搭配規則,從候選詞組中選出領域詞組。凝聚度和自由度用來確定可能是固定搭配的詞組,詞性約束進一步過濾掉不規范詞組,從而得到規范的領域詞組。領域詞組識別流程如圖1所示。

圖1 領域詞組識別流
將利用凝聚度、自由度、詞性約束得到的領域詞組作為結巴分詞自定義詞典參與分詞,從而實現領域自適應分詞。算法流程如圖2所示。

圖2 領域自適應分詞算法流程
本文中用到的數據來自中國知網,下載金融領域的100篇論文,這些論文主要集中于投資和證券學科;法律領域的100篇論文,這些論文主要集中于訴訟法與司法制度學科。將每篇PDF文獻轉化為txt格式,利用正則表達式對txt格式文獻進行處理,得到只含有標點符號,英文字母,數字,中文的文檔,然后將相同領域的文檔整合為一個文檔集。將該文檔集以標點符號為分隔符進行切分,得到以行為單位的金融和法律領域文檔集。
當按照標準化點互信息(NPMI)即式(1)計算詞組凝聚度時,分數取值范圍為[-1,1],當分數閾值取-1時,沒有起到任何篩選作用;分數閾值取1時,閾值太大,導致篩選詞組個數為0。因此選取3個具有代表性閾值,閾值分別取-0.5,0,0.5;當按照詞頻統計方法即式(2)計算詞組凝聚度分數時,由于文獻[23]閾值默認值為10,因此本文閾值分別取5, 10, 15。利用左右信息熵計算自由度,當閾值取0.1時,得到詞組個數同閾值取0.5時相差不大。當閾值取1.5時,得到的詞組個數同閾值取1時相差不大。當閾值取2.5時,詞組個數同閾值取2時相差不大,且此時詞組個數不是很多,因此自由度閾值分別取0.5, 1, 2。
本文利用自己構建的金融與法律領域文本對領域分詞進行研究,沒有現有的領域分詞評價標準可以利用。由于本文是將領域自適應分詞方法同結巴分詞的領域分詞結果進行比較,基于此前提,重新定義評價方法精確率與召回率計算公式,如式(5)與(6)所示。

(5)

(6)
其中,count(W總)表示領域詞組標準庫中詞數;W表示對文本進行領域分詞的結果;count(W總∩W)表示領域分詞結果中屬于領域詞組標準庫中詞的個數。以下給出W總與W的計算方式。
領域詞組標準庫W總計算:將利用式(1)計算凝聚度(凝聚度閾值取-0.5,自由度閾值取0.1)與利用式(2)計算凝聚度(凝聚度閾值取0.001,自由度閾值取0.1)進行領域自適應分詞的結果分別記為W11,W12;將直接利用結巴詞庫對相同領域文檔集進行分詞的結果記為W2。如果詞語w∈{W11∪W12∪W2}且w?{W11∩W12∩W2},則將w加入到詞庫中,通過人工查找詞庫中正確詞組作為領域詞組標準庫,記為W總。具體流程圖如圖3所示。

圖3 領域詞組標準庫構建流程圖
領域分詞結果W計算:領域自適應分詞結果記為W1,直接利用結巴分詞的結果記為W2,如果詞語w?{W1∩W2}且w∈W1,將w加入到Wdic,Wdic記為領域自適應分詞算法下領域分詞結果;如果詞語w?{W1∩W2}且w∈W2,則將w加入到W結巴,W結巴記為結巴分詞下領域分詞結果。具體流程圖如圖4所示:

圖4 領域分詞結果獲取流程圖
將凝聚度與自由度不同閾值參數組合得到的領域詞組作為自定義詞典加入到結巴詞庫中,對相應領域文本實現領域自適應分詞。將得到的領域分詞結果同不加自定義詞典分詞后的領域分詞結果進行比較。
實驗結果:
根據定義的精確率與召回率的計算方法,列出領域自適應分詞算法與直接用結巴分詞算法進行領域分詞的精確率及召回率。表1表示金融領域結果,表2表示法律領域結果。下表中,參數第一列表示凝聚度閾值,閾值參數為-0.5,0,0.5表示利用式(1)計算凝聚度,閾值參數為5,10,15表示利用式(2)計算凝聚度。第二列表示自由度閾值;加詞典表示領域自適應分詞,不加詞典表示直接利用結巴分詞;正確詞數表示領域分詞結果中屬于領域詞組標準庫中詞的個數。

表1 金融領域自適應分詞與結巴分詞對于領域分詞的精確率、召回率

表2 法律領域自適應分詞與結巴分詞對于領域分詞的精確率、召回率
實驗結果分析:
總體來看,結巴分詞對于領域分詞來說,準確率和召回率遠遠低于本文提出的領域自適應分詞算法。
通過表1與表2中精確率和召回率可以看出,當凝聚度分數閾值不變時,隨著自由度閾值越大,識別的領域詞組越少,此時,領域自適應分詞精確率越高,召回率越低;對于同一凝聚度計算公式來說,當自由度閾值不變時,凝聚度分數閾值越大,識別的領域詞組越少,領域自適應分詞精確率越高,召回率越低;基于NPMI即式(1)與詞頻統計即式(2)計算詞組凝聚度,當最終識別詞組個數相差不大時,利用式(2)識別領域詞組得到的精確率與召回率均高于式(1),說明將NPMI與左右信息熵搭配,比詞頻統計與左右信息熵搭配識別領域詞組的效果差。
通過表1與表2中正確詞數可以看出,領域自適應分詞算法切分出來的領域詞組遠遠多于結巴分詞切分出來的領域詞組;通過領域分詞詞數可以看出,領域自適應分詞得到總詞數多于結巴分詞總詞數,這是因為領域自適應分詞得到的詞組長度一般大于2,重復詞比較少;結巴分詞分出來的詞中大部分詞長為2,重復詞比較多,因此去重后剩余詞數較少。
領域自適應分詞由于加入了領域詞組,從而調整了分詞切分位置,可以將領域詞組作為整體識別出來,相比于結巴分詞,領域自適應分詞算法提高了領域分詞準確率與召回率。因此本文提出的領域自適應分詞算法是有效的。
為了從不同角度證明領域自適應分詞算法的有效性,本文基于區分領域給出了領域自適應分詞的評價方法。對于不同的兩個領域,利用分詞算法對文本進行分詞后,度量這兩個領域分詞后文本的距離,如果距離越大,稱該分詞方法區分領域的效果越好,即該分詞方法能夠有效實現領域分詞。基于此概念,本文提出了一種基于word2vec[23]的度量方法,用來對領域自適應分詞算法區分領域的效果進行評價。
將利用領域自適應分詞算法得到的金融領域分詞結果記為W金融dic,法律領域分詞結果記為W法律dic;將直接利用結巴分詞得到金融領域分詞結果記為W金融jieba,法律領域分詞結果記為W法律jieba。利用word2vec求解詞向量,在此基礎上給出領域自適應分詞方法區分領域效果的度量方法:距離差度量法。公式如下
difference=
distance(vector(W金融dic),vector(W法律dic))
-distance(vector(W金融jieba),vector(W法律jieba))
(7)
其中
distance(vector(W金融),vector(W法律))
vector(W金融)與vector(W法律)指金融領域文本與法律領域文本的向量表示,通過對相應領域文本分詞后求解所有詞語向量的平均值得到,即


式(7)表示利用領域自適應分詞算法對金融和法律領域進行分詞后,這兩個領域文本距離與利用結巴分詞算法對金融和法律領域分詞后文本距離的差值。如果這個差值大于0,表示利用領域自適應分詞算法分詞后,區分領域的效果優于利用結巴分詞。這個差值越大,說明領域自適應分詞算法區分領域效果越好。
利用領域自適應分詞算法分別對金融領域、法律領域文本分詞,得到詞典大小分別為292621、260845;直接利用結巴分詞算法對金融領域、法律領域文本分詞,得到詞典大小分別為354325、316261。本文利用Word2vec中skip-gram模型[26]來訓練詞語向量,上下文窗口大小參數設置為5,向量維度設置為500維。利用5.1中定義的距離差度量法,有
difference=distance(vector(W金融dic),vector(W法律dic))-
distance(vector(W金融jieba),vector(W法律jieba))
=1.002-0.9852=0.0168
可以看出,利用領域自適應分詞后區分領域的效果優于結巴分詞區分領域的效果,說明領域自適應分詞算法相比于結巴分詞有效實現了領域分詞。
本文提出了一種領域自適應分詞算法,在結巴分詞的基礎上,利用標準化點互信息及詞頻統計方法計算相鄰詞語組成詞組的凝聚度,左右信息熵計算詞組的自由度,詞性約束篩選規范詞組,將最后得到的領域詞組作為自定義詞典加入到結巴詞庫中參與分詞,從而完善了結巴分詞。通過在100篇金融領域文章和100篇法律領域文章上進行實驗,說明該方法可以有效發現領域詞組。利用精確率和召回率對領域分詞結果進行評價,發現相比結巴分詞,領域自適應分詞算法提高了領域分詞的準確率和召回率。最后提出了一種基于區分領域的領域自適應分詞評價方法,利用word2vec獲取詞向量,通過定義距離差度量公式來進行評價,實驗結果表明,領域自適應分詞算法區分領域效果優于結巴分詞,即該算法能夠有效進行領域分詞。
由于領域自適應分詞算法是在結巴分詞基礎上識別領域詞組,如果結巴分詞切分錯誤,則導致得到的領域詞組是錯誤的,因此在下一步工作中,可以考慮直接對文本識別領域詞組,從而避免引進錯誤領域詞組。該算法對結巴分詞后相鄰詞語進行組合,對于單字與雙字組合的詞組識別結果不是很好,會將不規則詞組別識別出來;對于雙字詞語組合,會出現結合順序前后紊亂情況。在下一步工作中,可以通過其它約束方法來盡量規避這兩種情況的發生。對于基于區分領域的評價方法,本文直接求解文本所有詞向量平均值來表征文本,在下一步工作中,可以提出其它向量計算方式來表征文本,從而提高評價方法的精確度。