NLP中的中文分詞技術
NLP中的中文分詞技術
作者:mjs (360電商技術組)
隨 著需求的變化和技術的發展,互聯網企業對數據的分析越來越深入,尤其是自然語言處理處理領域,近幾年,在搜索引擎、數據挖掘、推薦系統等應用方面,都向前 邁出了堅實的步伐。自然語言處理領域涉及的技術非常多,為了讓對此領域感興趣的同學能夠快速入門,在這里介紹一下中文信息處理的基本技術:中文分詞。
說分詞是中文處理的基本技術,是由漢語的特點決定的。漢語的有些單字沒有意義,多字合起來才有意義,比如煙囪的“囪”,“尬尷”;有些是單字雖然有意義,但組合之后,意思發生改變,比如“白菜”,“李世民”。有些系統雖然可以直接使用單字,比如檢索系統中基于字的檢索按單字建立索引,雖然可以滿足基本功能,但存在運算量大、檢索準確率低的問題;而基于詞的檢索按詞建立索引,檢索時直接命中,檢索速度快、準確率高,目前的中文檢索系統多數都支持基于詞的檢索。
中文分詞的任務是把一連串的單字按詞分開,比如,這是一個原始句子:
李明是一名優秀的學生。
經過分詞處理的結果為:
李明 是 一 名 優秀 的 學生 。
在這里,分詞面臨的第一個問題是如何定義一個詞。比如“自然語言處理”,可以作為一個詞,也可以切分為:
(1) 自然 語言 處理
(2) 自然語言 處理
關于中文詞的定義并沒有統一的標準,語言學家從不同的角度對詞進行定義,而這些定義往往彼此并不完全兼容。實際項目中的分詞主要關注于切分出的詞單元是否能服務于上層的信息處理,比如在檢索系統中,一般傾向于把分詞切分成粒度較小的單元,即按照第一種方式進行切分,這樣無論用“自然語言”還是“語言處理”都能夠檢索到“自然語言處理”。
分 詞系統的詞主要由詞表來確定,詞表是分詞系統自帶的通用詞表,里面的詞匯與領域無關。如果文本中的詞語在詞表中出現,則按照詞表進行切分,如果未在詞表中 出現,則屬于未登錄詞,需要進行未登錄詞識別。值得注意的是,分詞中的詞語劃分不是從語言學的角度,而完全是從應用的角度考慮,例如,“毛澤東”這個詞在詞表中已存在,則它屬于通用詞匯,不屬于未登錄詞中的中國人名。
中文分詞涉及的問題較多,下面對各方面的問題做一個簡單的介紹。
1 最大匹配法
最大匹配法的分詞實現很簡單,并且可以滿足一些對分詞準確率要求不高的應用系統,該方法在早期的分詞系統中被廣泛使用。其基本思想是,選取一定長度(中文詞的最大長度一般為6-8個字)的漢字串作為最大字符串,將其同詞表中的詞語進行匹配,如果匹配不成功,則刪掉一個漢字繼續匹配,如果匹配成功,當前字符串即為一個詞。按照匹配的方向,最大匹配法分為:
(1)正向最大匹配法(Forward Maximum Matching, FMM)
(2)逆向最大匹配法(Reverser Maximum Matching, RMM)
(3)雙向最大匹配法(Bi-directional Maximum Matching, BMM)
設S'為句子S的一個子串,詞表中最長詞的字數為m,正向最大匹配法的過程描述如下:
初始化:指針p1指向句子的首位置
算法執行:
(1) 如果p1到達句子末尾,分詞結束;
(2) p2 = p1 + m;
(3) 如果p1和p2之間的字符串S'在詞表中不存在,p2--,重復(3);
(4) 如果p1和p2之間的字符串S'在詞表中存在,則S'是一個詞,p1 = p2+1,轉(1);
逆向最大匹配法從句尾開始對句子進行掃描,算法的過程描述如下:
初始化:指針p1指向句子的末尾位置
算法執行:
(1) 如果p1到達句子首位置,分詞結束;
(2) p2 = p1 - m;
(3) 如果p1和p2之間的字符串S'在詞表中不存在,p2++,重復(3);
(4) 如果p1和p2之間的字符串S'在詞表中存在,則S'是一個詞,p1 = p2-1,轉(1);
兩種匹配方法只是對句子掃描的方向不同,如果句子中不存在歧義,則分詞的結果是一致的。但如果存在歧義,則切分結果不完全相同。例如,設詞典中最長詞的字數為7,輸入的句子為:他是研究生物化學的。兩種方法的切分結果如下:
FMM切分結果:他 是 研究生 物化 學 的 。
RMM切分結果:他 是 研究 生物 化學 的 。
實驗表明,在減少歧義方面,逆向最大匹配法比正向最大匹配法有效一些。梁南元的實驗結果顯示,在詞典完備、沒有任何其它知識的條件下,正向最大匹配法的錯誤切分率為1/169,逆向最大匹配法的錯誤切分率為1/245,這主要是因為漢語中心詞多在詞的右部的原因。
無論正向匹配還是逆向匹配,均無法發現句子中的歧義,實際的分詞算法中,常使用雙向最大匹配法來檢測歧義:比較FMM和RMM的切分結果,其中不一致的地方即是存在歧義的字符串。如上例中,“研究生物化學”的切分結果不一致,則該字符串中存在歧義。分詞算法中,常利用雙向最大匹配法發現歧義,再進一步對歧義詞進行切分。
2 歧義詞切分
分詞中的歧義有兩類,組合型歧義和交集型歧義,兩種歧義的詳細定義這里不討論。 一般性的定義可以表述為:
A、X、B分別為漢字串,如果其組成的漢字串AXB滿足AX和XB同時為詞,則漢字串AXB為交集型歧義字段。
例如:“研究生命的起源”可以切分為
研究 生命 的 起源
研究生 命 的 起源
“研究生命”為交集歧義字段。
漢字串AB滿足A、B、AB同時為詞,則該漢字串為組合型歧義字段。
例如: “他從馬上下來”可以切分為
他 從 馬 上 下來
他 從 馬上 下來
“馬上”為組合型歧義字段
在實際的分詞中,大部分交集型歧義并不會構成負面的影響,因為其在整體的語料中出現的比例比較低。對組合型歧義字段,也存在著類似的問題,很多二字詞在理論上都可能存在組合歧義,比如“位置”一詞,一般不認為它存在歧義,但是在特殊的語境中,如“第7位置1”,確實出現了組合歧義。但由于這種情況在真實的語境中從不發生或很少發生,人們并不認為它是有歧義的,而主要關注那些切分難度大的歧義字段。
對那些經常發生組合型歧義的字段,可以先收集標注語料中的歧義字段,統計歧義字段的上下文信息,然后為每個歧義字段制定對應規則或訓練出相應的分類器,在新的語言環境,根據給定的上下文進行預測。
很多實際的分詞系統中,并不考慮句子中歧義字段的歧義類型,而是利用概率模型對句子做統一的處理。
3 未登錄詞識別
未登錄詞是指沒有在詞表中出現的詞,也稱作OOV(out of vocabulary)。一般來說,未登錄詞包括以下幾類:
中國人名,如:韋小寶,趙一曼
外國人名,如:哈迪庫斯,卡里姆·哈杰姆
地名,如:李家莊,熱那亞
機構名,如:新華社,聯合國
其他專有名詞,如:白虎團,道—瓊斯
數詞,如:50%,300萬
時間詞,如:1992年,29日
詞語的重疊形式,如:看看,看一看,打聽打聽,高高興興
專業術語,如:線性回歸,韋特比算法
新詞,如:非典,博客
上 述的未登錄詞類別較廣,識別的難度相差很大,實際的工作往往傾向于聚焦在比較窄的范圍內,以減少難度,提高性能。一般來說,復雜機構名通常由命名實體識別 來完成,新詞通常由專門的新詞發現工作負責,專業領域的術語通常由信息抽取工作負責。數詞、時間詞、詞語的變形組合可以通過制定語法規則進行的處理。這里主要介紹人名、地名這兩類未登錄詞的識別。
未登錄詞識別的困難主要有兩類,一類是歧義問題,包括未登錄詞的內部歧義,以及未登錄詞同上下文發生的外部歧義,如下面的情況:
(1) 未登錄詞中含有詞表中的詞。例如人名“張朝陽”、“王國維”中的“朝陽”和“王國”分別是普通名詞,未登錄詞識別容易將人名拆開。
(2) 未登錄詞同上下文形成交集歧義。例如,
現任主席為何魯麗
鄧穎超生前珍藏的書畫作品。
另一類是未登錄詞的用字同正常用字發生混淆,包括兩種情況:
(1) 未登錄詞中的字為常用字或含有表示動詞成分,如
陳忠和率領的中國女排
成思危來到人民日報社
(2) 未登錄詞常用字作為句子中的正常用字,如
你到底是何居心?
賈思勰的《齊民要術》
未 登錄詞的識別主要有兩種策略,基于規則的方法和基于統計的方法。基于規則的方法中,需要先分析統計各種未登錄詞的規律,將其存儲在知識庫中。分詞時,根據 知識庫直接對可能的漢字串進行未登錄詞判別。由于未登錄詞多由連續的單字構成,經過初始的詞語切分之后,句子中的連續單字串即為可能的未登錄詞。未登錄詞 的規律主要包括以下幾部分:
l 內部規律。很多未登錄詞在用字上有自己的特定規律,例如,對中國人名,主要形式為“姓+名”, 可以統計出常用的姓氏用字和名字用字,以及每個字作為姓氏或名字的概率,名字包括名字的中間字和末尾字。對外國人名,可以統計出常用的人名譯名及其概率。 地名的結尾字有很強的規律性,通常包括各級行政區域的名稱,如省、市、縣等;居民聚落名稱,如村、屯、莊等;以及山、河、湖、海、島嶼、高原等自然地理實 體名稱。
l 外部規律。未登錄詞的上下文經常會有一些特定的詞語出現,例如,人名的上下文常出現如“先生、同志、女士、教授、經理、總理”等稱謂詞。人名前面常出現“說,表示,批評”等動作詞。地名的上下文通常會有一些介詞,如“在”,以及方位詞,如“里,上”等。外部上下文對對未登錄詞的識別非常重要,有時候會起著決定性的作用,比如“華盛頓”一詞,如果不借助上下文,就無法判斷這個詞是人名還是地名。
l 重復出現規律。一般來說,有些實體的名稱在篇章中會多次出現,這為未登錄詞的識 別提供了一個判斷依據。如果一篇文章中多次出現相同的單字片段,并且這些單字作為單字詞的概率并不高,這樣的單字片段很可能屬于未登錄詞。
另外,也可以盡可能多地收集人名、地名等專有詞語,制作一個專有詞匯表,既能提高未登錄詞識別的準確率,又能提高處理的速度。
規則方法的優點是,建成的知識庫具有通用性,可以通用于不同的未登錄詞識別模塊中,不必再借助于訓練數據。但是在總結規則時,以及計算未登錄詞不同部分的構詞概率方面,需要較大的工作量。所以,只依靠訓練語料,不需要人工干預的統計方法受到了人們的重視。
4 語料及評測
1.語料標注
目前實用的中文分詞系統,多數都是通過統計學習的方法構建的。其過程是先利用一個已標注好的語料庫作為訓練數據,對這些數據進行統計學習,將統計的概率信息作為分詞器的參數。
作為知識的來源,標注的語料對分詞的性能起著至關重要的作用。衡量一個語料的好壞主要有這幾個指標:
(1) 標注規范
標注規范解決的是詞的定義問題,比如什么樣的單元算一個詞,有些詞應該分開還是合并,如何處理語法變形詞語等等。一般來說,制定一個好的分詞規范除了要對分詞問題有比較深刻的理解,還需要有較強的語言學知識。
(2) 標注的一致性
一個大規模的語料通常是由多個人共同標注,由于不同標注者對規范的理解存在差異(即使同一個人在不同的時間對規范的理解也可能不一致),常會導致標注不一致的現象發生。比如字符串“緊跟”,有時被標注為一個詞,有時會將其分開。這種不一致將影響訓練參數,進而在分詞時發生錯誤。
(3) 錯誤率
人工校對時仍難免發生疏忽,一個大型的語料庫很難百分之百標注正確。如果將標注的錯誤率控制在一個較小范圍內,并不會對分詞的訓練造成太大的影響。
(4) 語料的規模和平衡
語 料規模是指語料的大小,一般來說,語料的規模越大,包含的信息越多,訓練的效果也越好。但這并不是絕對的,還有一個重要的因素是語料是否平衡。一個平衡的 語料,應該包含盡量廣泛的題材。如果一個語料只包含政治類內容,即使規模再大,對體育類的文本進行分析時也會存在困難。
語料標注的過程通常先利用一個已有的分詞程序對原始文本進行自動分詞,然后由人工進行校對。目前最著名的、分詞系統使用最多的簡體中文語料是北京大學計算語言學研究所加工的“人民日報標注語料庫”。該語料庫把文章中的語句按詞切開,并對每個詞標上詞性標記。標注后的形式為:
美國/ns 馬里蘭州/ns 的/u 蓋茨堡鎮/ns 近日/t 舉辦/v 新年/t 燈展/n 。/w
每個詞的后面是詞性標記,詞與詞之間用空格分開。語料庫的規范以及詞性標記的說明可參考北大制定的標注規范和加工手冊。
2. 評測方法
為了能夠客觀準確地評價分詞系統的效果,需要制定一些指標來對分詞的結果進行評測,常用的評測指標包括準確率P(Precision)、召回率R(Recall)和F值(F Score),它們的計算形式如公式(4-1)所示:
對于分詞,通常來說以F值做為分詞效果的一個總體評價,準確率和召回率在某種程度上是矛盾的,刻意地追求準確率勢必會造成召回率的下降,同樣,刻意地追求召回率也會造成準確率的下降。F值作為準確率和召回率的調和平均數,可以有效地在二者之間作出一個平衡。
為了評價分詞方法的優勢,比較分詞系統的性能,國際計算語言聯合會(Association for Computational Linguistics, ACL )下設的漢語特別興趣研究組(the ACL Special Interest Group on Chinese Language Processing, SIGHAN) 舉 辦了數屆國際漢語分詞評測大賽。組委會事先為參賽者提供一個較大規模的標注語料,供參賽者訓練自己的分詞程序。評測時,組委會發放測試數據,參賽者在三天 之內將分詞結果提交,組委會根據參賽者的結果進行綜合打分,排出名次。評測的語料分為簡體中文和繁體中文,對每種語料的評測又分為封閉測試和開放測試。下表列出了第二次分詞評測中基于北大語料(簡體中文)的部分結果。
第二屆國際分詞評測中北大語料前10名分詞系統的F值
Ranking |
Open track |
Closed track |
1 |
0.969 |
0.950 |
2 |
0.967 |
0.950 |
3 |
0.967 |
0.949 |
4 |
0.965 |
0.946 |
5 |
0.965 |
0.944 |
6 |
0.964 |
0.942 |
7 |
0.962 |
0.941 |
8 |
0.962 |
0.941 |
9 |
0.957 |
0.940 |
10 |
0.952 |
0.934 |
表中依次列出了F值最高的前10個參賽系統,從表中能夠看出,分詞系統已經達到了較高的性能,并且各個系統之間,尤其是前3名的系統之間相差無幾,說明分詞技術已經基本成熟。但也應該注意到,這種評測的訓練集和測試集均為同一類數據,如果分析和訓練數據不是同一類型的文本時,其性能將會受到影響。
SIGHAN的分詞評測已經在去年關閉了,這種競賽形式的評測有效地促進了中文分詞的研究進展,每次評測都有十多家單位參賽,并不斷有新的方法應用于分詞之中。
-------------------------------------------------------------------------------------
黑夜路人,一個關注開源技術、樂于學習、喜歡分享的程序員
博客:http://blog.csdn.net/heiyeshuwu
微博:http://weibo.com/heiyeluren
微信:heiyeluren2012