修 馳,宋 柔,2
(1. 北京工業(yè)大學 計算機學院,北京 100022;2. 北京語言大學 語言信息處理研究所,北京 100083)
解決中文分詞問題的方法主要分為兩類:基于詞(或詞典)的方法,例如,基于規(guī)則的最大匹配方法[1]、基于統(tǒng)計的詞的N元語法的方法[2]?;谧值姆椒?,例如,基于最大熵模型(ME)[3]、基于條件隨機場模型(CRF)[4]的中文分詞方法。
分詞歧義和未登錄詞(OOV)一直是影響中文分詞效果的兩大因素。Bakeoff 2005的語料庫統(tǒng)計數據說明未登錄詞造成的分詞精度失落比歧義切分造成的精度失落至少大5倍以上[5]?;贑RF模型的字標注分詞方法在訓練語料與測試語料同質的情況下可以較好的解決OOV問題,在近幾年的bakeoff中都取得了很好的成績。但是歧義切分錯誤仍然是漢語分詞中不可忽視的問題,CRF模型對歧義切分問題的解決并不夠好,而且這一方法開銷大、不靈活。有人采用規(guī)則加實例庫的辦法消除分詞歧義[6]。但這種方法需要人工構建規(guī)則與實例庫,只能解決有限語言現(xiàn)象,難以適用于各種不同的語料。因此,希望找到一種專用于中文分詞的機器學習方法,既可以吸收基于字的分詞方法的優(yōu)點,充分挖掘訓練語料中的分詞信息,又不需要太長的訓練時間得到較好的分詞結果。
本文從CRF在分詞歧義上存在的問題入手,提出了基于“固結詞串”詞表分詞的方法,即一種基于實例的中文分詞方法。利用固結詞串可以簡化機器學習過程,充分利用訓練語料中的知識。本文組織方式如下:第二節(jié)分析CRF中文分詞方法存在的問題;第三節(jié)提出基于固結詞串解決中文分詞歧義的方法;第四節(jié)闡述實驗設計并分析結果;第五節(jié)進行總結。
近幾年流行的基于字序列標注的機器學習方法在分詞方面取得了較好的結果。在各種機器學習方法中,基于CRF模型的方法效果最優(yōu)。條件隨機場CRF(Conditional Random Filed)[4]是一個無向圖模型,在給定觀察值的情況下計算狀態(tài)值的條件概率。在基于該模型的分詞方法中,通常是用字形和字類作為觀察值的特征。測試結果表明,這種方法可以較好的解決OOV問題。也可以在一定程度上解決已登錄詞的分詞歧義(如表1所示)。但是我們分析分詞結果發(fā)現(xiàn),CRF在解決OOV和分詞歧義的同時產生了很多外加的錯誤。本文第四節(jié)給出的實驗數據表明,CRF同正向最大匹配方法相比,在后者的分詞歧義錯誤中解決了1 426例,占96%左右,但是產生了1 836例分詞歧義錯誤。表2、3、4舉例給出了CRF分詞中存在的問題。
表1 CRF解決歧義切分
表2 訓練語料中出現(xiàn)的詞CRF切分錯誤
表2顯示在訓練語料中出現(xiàn)的、有且只有一種分詞方式的字符串,利用CRF分詞方法切分錯誤的詞。字符串“一支支”在訓練語料中出現(xiàn)過1次,“一 / 支 / ”出現(xiàn)75次。“支”共出現(xiàn)1 248次,詞首占69%、詞尾占10%,單字占15%?!皠印惫渤霈F(xiàn)4 163次,詞尾占71%?!耙恢А狈珠_的概率更大,“支動”連接在一起概率更高。因此CRF產生錯誤的切分結果。
表3 不應該成詞的字符串被CRF合成一個詞
表4 同種類型的字符串CRF分詞結果不同
表3顯示訓練語料中沒有出現(xiàn),但也不應該識別為詞的字符串。如果被測字符沒有在訓練語料中出現(xiàn),前一個和后一個字符對它的影響十分重要?!?”這個字符在測試語料中是半角的,訓練語料中沒有半角字符,因此半角“6”沒有在訓練語料中出現(xiàn)過,但由于“分”經常做詞首,“路”經常做詞尾,取全局最優(yōu)值后,“分6路”被劃分為一個詞。
表4顯示測試語料中類型相同的兩句話,由于上下文字形不一樣,CRF的分詞方式不同?!巴取痹谟柧氄Z料中出現(xiàn)15次,其中13次為“同比 / 增長”,因此字符串“同比增收”可以正確切分。但“比 / 上”在訓練語料中出現(xiàn)過131次,從全局出發(fā),切分成“比 / 上” 比切分成“同比”可以得到更好的概率值。因此“同比上升”不能切分正確。
CRF訓練的目的是為了讓模型盡可能的挖掘訓練語料中的分詞信息,擬合訓練語料。OOV可以按訓練語料的分詞知識進行構詞。但對于在訓練語料中已經存在的詞所構成的詞串,如果沒有切分歧義,則不需要拆開再重新構詞,可以不使用CRF分詞。
對于測試訓練語料中存在的詞,字符串匹配是最簡單的擬合語料的過程。假設測試語料中的字符串Stest,可以與訓練語料中的字符串Strain完全匹配,且Strain在訓練語料中只有一種分詞標記方式,使用Strain的分詞標記方式對Stest分詞,也是一個擬合訓練語料的過程。
如果Strain是由幾個詞組成的,Strain串中間的字符攜帶了上下文信息,這樣的字符在上下文環(huán)境的約束下,分詞標記一定是確定的。利用這樣的分詞信息,可以消解分詞歧義而且不需要再計算概率和全局最優(yōu)化,可以避免CRF中“一支/支動/聽”“請/教老者”這樣的錯誤發(fā)生。
因此我們提出利用“固結詞串”對訓練語料中出現(xiàn)過的字符串分詞。“固結詞串”可以由多個詞組成,在訓練語料中有且僅有一種切分方式。定義如下:
設每個字的分詞信息使用標注符號表示:B代表詞首,M代表詞中,E代表詞尾,S代表單字詞(也可以加入B2、B3等標記表示詞首第2個字、第3個字等,不影響下面的定義)。
定義中限制所有的Tj必須完全相等,目的是為了使字符串內部無多種切分情況;字符串的首尾必須被切開是為了讓字符串的邊界不存在交搭歧義。例如,字符串“中共北京市委”在訓練語料中出現(xiàn)過多次,每次出現(xiàn)時的切分方式都是“ / 中共 / 北京 / 市委 / ”,則“中共北京市委”是一個固結詞串。
但是如果僅限制字符串的首尾必須被切開,當訓練語料中同時存在“基本 / 生存”和“基本 / 生存權”時,字符串“基本生存”因為“存”有兩種標記方式,則不能成為固結詞串。當語料不斷增加,類似于“基本生存”的現(xiàn)象將會不斷增加。另一方面,這種限制相當于對訓練語料的過度擬合,測試語料中字符串上下文的變化,會產生部分新的切分形式。在這種情況下,利用現(xiàn)有的固結詞串分詞會帶來新的切分歧義。例如,“中央歌劇”在訓練語料中出現(xiàn)多次,切分方法都是“中央 / 歌劇”,測試語料遇到“中央歌劇院”, “劇”則被切成詞尾,實際應該是“中央 / 歌劇院”,由此產生了新的歧義切分。因此定義中對“固結詞串”添加了上下文的限制。
引用上文的例子字符串“基本生存”在訓練語料中出現(xiàn)多次,例如,“缺乏 / 基本 / 生存 / 和 / 生產”和“人民 / 的 / 基本 / 生存權 / 造成”。在“基本生存”的下文不是“權”,例如,當α(上文)是“缺乏”β(下文)是“和”的情況下,“基本生存”都被切分成“/ 基本 / 生存 /”,則“基本生存”在特定的上下文中也是固結詞串。
實驗中,如果測試字符串在固結詞串詞表中找不到匹配項,則在普通詞表中查找是否有匹配項。使用普通詞表會出現(xiàn)如下問題。例如,字符串“新世紀”在訓練語料中以詞的形式出現(xiàn)過,那么“新世紀”是普通詞表中的一個詞。但是這個字符串在訓練語料中存在兩種分詞方式“新 / 世紀”和“新世紀”。大部分情況下的切分為“新 / 世紀”,只有在特定的上下文環(huán)境下才會被切分為“新世紀”(“新世紀 / 出版社”)。由于切分方式不唯一,這個字符串不是固結詞串。當測試語料出現(xiàn)字符串“新世紀”時,則會按照普通詞詞表“新世紀”的方式切分,造成大部分錯誤。實驗中這樣的問題十分明顯,因此將實驗中使用的“普通詞”更改為“固結詞”。
固結詞是指,普通詞表中的詞,如果在訓練語料中總是整體出現(xiàn)從不被切開,或者雖然有被切開的情況但以整體一個詞的形式出現(xiàn)的次數最多,就將這個詞作為固結詞。因此,“新世紀”不在固結詞詞表中。雖然固結詞和固結詞串詞表中都不存在“新世紀”這個詞,但是當測試語料擁有足夠的上下文,則可以找到包含“新世紀”的固結詞串,將“新世紀”正確切分出來。
分詞策略是將基于固結詞串實例的方法與基于普通詞表的方法相結合。原則是以固結詞串為主,普通詞為輔。具體方法如下。
詞表包含:攜帶上下文信息的固結詞串表、不攜帶上下文信息的固結詞串表、普通詞表。從左至右前向最大匹配(FMM)對測試語料進行分詞。設測試語句為Sen。
Step1 取Sen已經切分出的最后一個詞(如果還未開始切分,則為φ)為上文α,在攜帶上下文信息的固結詞串表中查找最長匹配字符串αCβ。如果找到,并且此串α與C之間是被切開的關系,則將匹配的字符串按照固結詞串C的切分標記標注。轉Step1。如果沒有匹配到,轉Step2。
Step2Sen中等待被切分的字符串,在沒有上文信息的固結詞串表中進行最大字符串匹配Cβ。如果匹配成功,將匹配的字符串按照固結詞串C的切分標記標注。轉Step1。如果沒有匹配,轉Step3。
Step3Sen中等待被切分的字符串,在普通詞表中進行最大字符串匹配。如果匹配成功,將這個詞切分出來轉Step4。如果沒有匹配到,將首字符字切分出來,此字符為單字。轉Step1。
Step4對于利用普通詞表切分出的字符串,回退一個字。如果以回退的這個字為首字,與后面的字符串可以組成固結詞串,并且,原字符串去掉這個字仍然是個普通詞,則更改利用普通詞表切分的結果,使用回退一個字得到的切分結果,轉Step1。否則放棄回退直接轉Step1。
例如,字符串“為了看清楚”,在切分時首先在攜帶上下文信息的固結詞串表中查找,找到的固結詞串其分詞方式為“φ/ 為了 / 看 / 清 /”?!唉铡焙汀扒濉狈謩e相當于定義中的“α”和“β”, “為了看”是“α”和“β”中間的固結詞串C,可以確定其分詞方式為“為了 / 看 / ”。然后再順序查找以“看”為上文的攜帶上下文環(huán)境的固結詞串,如果查找到“看 / 清楚”,則“清楚”被的切分出來。如果在固結詞串中找不到“看清楚”,則在普通詞表中查找“清楚”。如果普通詞表中查找到“清楚”,利用Step4回退一字,查看是否存在以“楚”字開頭的固結詞串,如果沒有則“清楚”被切分出來。
Step4中使用普通詞表有時會產生歧義切分問題,為了減少此類問題,普通詞表可換成固結詞詞表。目前,在選用這種最簡單的分詞策略的情況下,已經有效的降低了分詞歧義。如果改進策略,相信將得到更好的分詞效果。
本實驗采用第二季國際分詞競賽(bakeoff-2005)中PKU的語料對分詞方法進行測試(如表5所示)。語料中數字、英文、全半角符號進行了統(tǒng)一的預處理。
表5 bakeoff-2005 pku語料詞形詞數
Pku訓練語料中數字、英文、符號,使用全角符號(比如1.1%在訓練語料中為1.1%)。
PKU測試語料中全半角符號混合使用,大部分數字使用半角符號。未登錄詞6 006個(token),占測試語料總詞數(token)的5.7%。在不包含單字詞的情況下共有5 592個未登錄詞(token),其中數字、英文、日期為2 370個,占未登錄詞的42.3%。
實驗的主要目的是測試固結詞串分詞方法對歧義的影響。實驗結果采用準確率P、召回率R和調和平均值:F=2RP/(R+P)來進行評估(如表6、表7所示)。
表6 baseline
表7 topline
利用訓練語料生成普通詞詞表,使用FMM的方法對測試語料進行分詞,得到分詞歧義的baseline。為了進一步確定歧義切分對分詞結果影響,實驗設置了topline。topline表示測試語料中所有分詞歧義問題都被解決,只存在OOV錯誤的分詞結果上限。實驗中,將測試語料標準答案中的OOV用訓練語料中提取的普通詞表進行FMM分詞,其他不改變,得到topline。如果所有的分詞歧義都被正確解決,那么F值已經可以達到0.95。由此可見,歧義切分問題的解決對分詞結果有著重要的影響。由于測試語料、訓練語料中存在分詞不一致現(xiàn)象,表7顯示的是的topline理想值。
CRF的實驗使用6-tag[7]標注集:B B2 B3 M E S。本實驗對5字窗口和3字窗口特征的結果進行對比,采用3字窗口(如表8所示)可以得到更好的分詞結果。工具為CRF++0.54*http://crfpp.sourceforge.net.。
表8 CRF實驗使用的特征集
續(xù)表
固結詞串分4個實驗進行測試。固結詞串不包含標點符號,長度限制在50個字符以內。表9顯示分詞實驗結果。實驗1按照分詞策略的Step1到Step3進行,分詞的詞典由固結詞串和普通詞組成。雖然結果明顯好于baseline,但是普通詞會產生一些新的分詞歧義。為了進一步解決這個問題,實驗2加入Step4,將普通詞切分的字符串回退一個字。例如,“正面 / 對 / 世界”中的“正面”是由普通詞切分得到的,回退“面”。以“面”為首字,可以在固結詞串表中找到“面對 / 世界”,而且去掉“面”字,“正”是一個單字詞,則修改分詞結果。
表9 固結詞串詞結果對比
實驗3、4采用固結詞替代普通詞。實驗表明,將普通詞表換成固結詞詞表,結果有所提高。表10顯示分詞實驗中使用固結詞串的最好成績與CRF成績的對比,在沒有識別OOV的情況下,固結詞串Recall的成績已經好于CRF的成績。表11顯示固結詞串和CRF在相同機器上的訓練、分詞時間。
表10 固結詞串與CRF結果對比
表11 固結詞串和CRF訓練時間對比
表12顯示的是固結詞串和CRF分詞結果各類錯誤的數據統(tǒng)計,斜杠兩邊分別是type和token的數量。其中分詞不一致是指訓練測試語料中都存在的詞,但是分詞方式不同,并且不是組合歧義。由于固結詞串攜帶上下文信息,對于這種分詞不一致情況的適應能力好于baseline。
表12 固結詞串和CRF各類錯誤數量對比
表13 固結詞串和CRF解決分詞歧義對比
從表12、13可以發(fā)現(xiàn),對于訓練語料和測試語料都是像《人民日報》這樣的同質語料的情況,CRF主要解決的是OOV識別的問題,CRF分詞所產生的新切分歧義要大于其解決的分詞歧義。利用固結詞串這種簡單的機器學習方法,不僅可以解決分詞歧義,帶來的新分詞歧義相對較少,而且不需要大量訓練時間,既可以提高速度也可以提高分詞效果。
本文分析了CRF在解決分詞歧義時存在的問題,指出CRF在切分訓練語料中出現(xiàn)過的字符串時會產生更多新的分詞歧義。提出了基于固結詞串的分詞方法,將基于固結詞串實例和基于普通詞表的分詞方法相結合,利用簡單的機器學習擬合訓練語料,解決測試語料中分詞歧義的問題。實驗表明,這種方法可以在一定程度上解決分詞歧義問題,并且不會產生太多的副作用。
固結詞串雖然可以解決部分歧義,但仍需要改進分詞策略才能取得更好的效果。無標注語料庫中固結詞串邊界的識別和固結詞串內部切分方法,OOV的處理,這些任務將是我們下一步的工作。
[1] 駱正清,陳增武,胡上序. 一種改進的MM分詞方法的算法設計[J].中文信息學報,1996,10(3):30-36.
[2] 吳春穎,王士同.基于二元語法的N-最大概率中文粗分模型[J].計算機應用,2007,27(12):332-339.
[3] N. Xue. Chinese Word Segmentation as Character Tagging[J]. Computational Linguistics and Chinese Language Processing,2003,8(1): 29-48.
[4] J.Lafferty,A. McCallum, F.Pereira. Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data.[C]// Proceedings of the 18th International Conf. On Machine Learning, 2001: 282-289.
[5] 黃昌寧,趙海. 中文分詞十年回顧[J]. 中文信息學報,2007,21(3):8-19.
[6] 羅智勇,宋柔. 現(xiàn)代漢語通用分詞系統(tǒng)中歧義切分的實用技術[J].計算機研究與發(fā)展,2006,43(6):1122-1128.
[7] Hai Zhao, Chunyu Kit. Unsupervised Segmentaion Helps Supervised Learning of Character Tagging for Word Segmentation and Named Entity Recognition[C]//Proceedings of the Sixth SIGHAN Workshop on Chinese Language Processing(SIGHAN-6), Hyderabad, India,2008:106-111.