第三章 詞彙與分詞技術


本章講解漢語自然語言處理的第一項核心技術:中文(或漢語)詞彙自動切分,也稱爲中文分詞技術。從1979年,中國就開始進行及其可讀語料庫的建設,專業的高校和研究機構紛紛建立大規模中文語料庫。這個階段歷經十多年之久,由於語料庫建設之初,許多工作都要從零開始,分詞任務都由專業人員手工完成。這是一項繁重而枯燥的工作。即便如此,受到人爲主觀因素的影響,人工分詞的標準並不統一,語料精度也不高。雖然是國家級的項目,所謂的“大規模”語料庫的規模不過也就是百萬級。因此,迫切需要統一的分詞規範及適合大規模語料的高精度中文分詞算法。

中文分詞的研究經歷了二十來年,現在看來基本上分爲如下三個流派。

  • 機械式分詞法(基於字典)。機械分詞的原理式將文檔中的字符串與詞典中的詞條進行逐一匹配,如果字典中找到某個字符串,則匹配成功,可以切分,否則不予切分。基於詞典的機械分詞法,實現簡單、實用性強,但機械分詞法的最大缺點就是詞典的完備性不能得到保證。據統計喲個一個憨厚70000個詞的詞典去切分含有15000個詞的語料庫,仍然有30%以上的詞條沒有被切分出來,也就是說有4500個詞沒有在詞典中登錄。
  • 基於語法和規則的分詞法。其基本思想就是在分詞的同時進行句法、語義分析,利用句法信息和語義信息來進行詞性標註,以解決分詞歧義現象。因爲現有的語法知識,句法規則十分籠統、複雜,基於語法和規則的分詞法所能達到的精確度還遠遠不能令人滿意。
  • 基於統計的分詞法。其基本原理是根據字符串在語料庫中出現的統計頻率來決定其是否構成詞。詞是字的組合,相鄰的字同時出現的次數越多,就越有可能構成一個詞。因此,字與字相鄰共現的頻率或概率能夠較好地反映它們成爲詞地可信度。

針對這些問題,經多年的不懈努力,最終較成功地實現了中文詞彙的自動切分技術。本章簡要介紹了 ICTCLAS 中文分詞算法的來源和現狀,以及實現了 NShort 最短路徑算法的一些著名的開源框架。爲了讀者理解方便,我們選擇HaNLP系統提供的開源框架,結合實例,詳細分析和講解著名的 NShort 最短路徑分詞方法。內容包括:一元詞網與原子切分、生成二元詞圖、NShort 最短路徑、命名實體識別、細分階段等內容。

1. 中文分詞


1.1 什麼是詞與分詞規範


什麼是詞,我們如何界定漢語詞呢?古往今來,漢字雖然有5萬多個,但常用的漢字大約僅有6000個。即便如此,其中很多漢字在日常生活中較少用到。然而,這些有限的漢字足以維持詞彙的長期更新,因爲擴大中文詞彙的方法是通過構造漢字的符合新詞,而不是創造新的字符來完成的。這就造成了漢語中所謂的詞與短語之間沒有明確的界限。這可能也就是中國的一些語法學家認爲,中文沒有詞語而只有漢字的原因,並創造了一個術語——“字短語”來代替傳統的詞彙。東振東就認爲:“‘詞或字符’的爭論源於它們都急於給中國語言一個硬規範的共同基礎。遺憾的是,中文不是那麼明確或硬的,它是軟的。我們必須認識到其‘柔軟度’”。

除鉤子法的原因之外,人們還因爲自身的方言、受教育程度、亞文化等差異因素,對詞彙的認識也不同。

隨着NLP的大規模應用,計算語言學界逐漸統一了漢語詞彙的標準。從最初的“結合緊密,使用穩定”到信息處理領域的《信息處理用現代漢語分詞規範》的制定,都是去頂漢語分詞標準的一種嘗試,該文關於漢語詞的定義給出瞭如下說明。

從計算語言學的角度來看,如果把一個句子理解爲一個特殊的可計算的邏輯表達式,那麼句子中的一個詞就是表達式中的一個可計算符號,有的表示爲連接的符號,如連詞“然後”、“而且”這樣的虛詞;有的表示爲動作、狀態(函數的簽名),如“出現”、“思考”當這樣的動詞;有的表示爲事物的概念,如“中國”、“泰山”等這樣的名詞。

本書設計的分詞規範有如下兩大類:第一類包括《北大(中科院)詞性標註》、《現代漢語語料庫加工規範——詞語切分與詞性標註》、《北京大學現代漢語語料庫基本加工規範》三篇文章,讀者可從http://www.threedweb.cn/thread-1584–1-1.htmlhttp://www.threedweb.cn/thread-437-1-2.html下載;第二類爲《賓州樹庫中文分詞規範》,讀者可從http://www.threedweb.cn/thread-1478-1-1.html下載。

本文主要介紹中文分詞中最常用的《北大(中科院)詞性標註》(以下簡稱《北大規範》)的基本規則。

《信息處理用現代漢語分詞規範》和傳統的語法教育中將漢語的此類主要分爲 13 種:名詞、動詞、代詞、形容詞、數詞、量詞、副詞、介詞、連詞、助詞、語氣詞、嘆詞和象聲詞。

這與朱德熙先生提出的19種分類法有所不同。朱先生的分類法還包括:時間詞、處所詞、方位詞、區別詞、狀態詞等。

除此之外,《北大規範》還加入了4個兼類謂詞:副動詞、名動詞、副形詞、名形詞;最後還增加了前綴、後綴、成語、簡稱、習用語 5 中國輔助詞類。這樣《北大規範》就形成了40種詞類。

修改後的現代漢語詞語分類體系對照表。
在這裏插入圖片描述
在這裏插入圖片描述
如表格所示,從分詞的角度來看,這兩種切分標準之間的差距在於被大標準除考慮到詞彙的語法特徵之外,還兼顧了詞的語義特徵。但從語義研究的角度來看,這些語義特徵並不完備,不過一些更細節的詞性可劃歸到其父類之中。

除此之外,表中還有一個問題需要澄清,即“附加類別”種的各個子類。下面由簡而繁逐個說明。

  1. 成語和習用語。這是中文的特有詞彙類別,但該種方式與句子解析和詞彙切分無關,本書中基本遵循這樣的原則:成語基本都作爲一個完整的詞進行切分;習用語有的僅包含一個詞,就作爲詞來切分,有的是一個句子,就逐詞進行切分。
  2. 語素和前後綴。
    • 語素。語素是構成詞的最小單位,其粒度小於詞彙。是否需要進行切分可根據用戶需求,從語言處理的角度來看,語素級別的切分使用範圍並不大。例如,“毛澤東”在《北大標準》中常切分爲:“毛/澤東”。本書建議作爲一個完整的詞來對待。
    • 前後綴。比較典型的前/後綴包括:初(初一)、阿(阿姨、阿爸)、老(老先生)、第(第一、第二)、兒(花兒)、們(男人們、同志們)。這要根據實際情況來做處理。其切分標準按照前/後綴的【能產型】和【語義完整性】兩個標準來切分。例如,“初一”的“初”作爲前綴,能產性較弱,不予切分;“們”的能產性比較強,硬座切分,但也不絕對。“人們”的語義完整性更強,可不做切分。

有關更多的切分細節可參照前文給出的相應文檔,並結合自身的需求,指定切分規則。

1.2 兩種分詞標準


由於語素對詞彙的構成也產生影響,實際應用中,漢語分詞也分爲兩個粒度。粗粒度分詞:將詞作爲語言處理最小的基本單位進行切分。細粒度分詞:不僅對詞彙進行切分,也要對詞彙內部的語素進行切分。

例如,原始串:浙江大學坐落在西湖旁邊。

  • 粗粒度:浙江大學/坐落/在/西湖/旁邊。
  • 細粒度:浙江/大學/坐落/在/西湖/旁邊。

粗粒度將“浙江大學”看作一個完整的概念,對應一個完整的詞彙,進行切分。而細粒度則不同,除將“浙江大學”完整切分出來之外,還要將構成“浙江大學”的各個語素切分出來:浙江/大學。

常見的例子還有很多,如“中華人民共和國”,粗粒度的分詞就是“中華人民共和國”,細粒度的分詞可能是“中華/人民/共和國”。一般細粒度切分的對象都爲專有名詞。因爲專有名詞常表現爲幾個一般名詞的合成。

在實踐中,粗粒度切分和細粒度切分都有其使用的範圍。粗粒度切分主要用於自然語言處理的各種應用;而細粒度分詞最常用的領域是搜索引擎。一種常用的方案是,在索引的時候使用細粒度的分詞以保證召回,在查詢的時候使用粗粒度的分詞以保證精度。在本書中,如果未加特別的說明,則都爲粗粒度分詞。

1.3 歧義、機械分詞、語言模型


現代漢語的複音詞結構,使少量的字符(4000多個)通過排列組合來表示大量的詞彙(100萬個以上),而中間有沒有標點的分隔,最容易出現的問題是歧義問題。歧義問題在漢語中普遍存在,長久以來歧義切分問題一直是中文分詞的核心問題之一。對此,梁南元等已經做過廣泛和深入的研究。下面給出幾種重要的歧義切分的研究成果。


定義 7-1(交集型切分歧義)漢字串AJB稱作交集型切分歧義,如果滿足AJ、JB同時爲詞(A、J、B分別爲漢字串),則此時漢字串J稱作交集串。(梁南元 1987)

例如,交集型切分歧義:“結合成”。

其中,A = “結”,J = “合”,B = “成”。

一種切分爲:(a)結合|成;另一種切分爲:(b)結|合成

這種情況在漢語文本中非常普遍,如“大學生”、“研究生物”、“從小學起”、“爲人民工作”、“中國產品質量”、“部分居民生活水平”等。爲了刻畫交集型歧義字段的複雜結構,梁南元還定義了鏈長的概念。

定義 7-3(組合型切分歧義)漢字串AB稱作多義組合型切分歧義,如果滿足A、B、AB同時爲詞。

例如,多義組合型切分歧義:“起身”。在如下兩個例子中,“起身”有兩種不同的切分:(a)他站|起|身|來。(b)他明天|起身|去北京。類似的,“將來”、“現在”、“才能”、“學生會”等,都是組合型切分歧義字段。

梁南元(1987a)曾經對一個含有48092字的自然科學、社會科學樣本進行統計,結果交集型切分歧義有518個,多義組合型切分歧義有42個。據此推斷,中文文本中切分歧義的出現頻度約爲1.2次/100字,交集型切分歧義與多義組合型切分歧義的出現比例約爲12:1。

有意思的是,據文獻【劉挺等,1998a】的調查卻顯示了與梁南元截然相反的結果:漢語文本中交集型切分歧義與多義組合型七分歧義的出現比例約爲1:22.孫茂松認爲,造成這種情形的原因在於,定義7-3有疏漏。因此孫茂松等(2001)曾猜測,加上一條上下文語境限制才真正反映額連梁南元的本意。

定義7-3‘(多義組合型切分歧義)漢字串AB稱作多義組合型切分歧義,如果滿足(1)A、B、AB同時爲詞;(2)文本中至少存在一個上下文語境 c,在 c 的約束下,A、B在語法和語義上都成立。

上文均來自《統計自然語言處理》——宗成慶著

針對上述問題,人們設計了早期的【機械分詞】系統。機械分詞系統都是基於最大匹配方法作爲最基本的分詞算法。該方法有蘇聯漢俄翻譯學者提出,也稱爲MM(The Maximum Matching Method)方法。

其基本思想如下。

  1. 假設自動分詞詞典中最長詞條所含漢字個數爲1,則取被處理材料當前字符序數中的1個字作爲匹配字段,查找分詞詞典。
  2. 若詞典中有這樣的一個 I 字詞,則匹配成功,匹配字段作爲一個完整的詞被切分出來。
  3. 如果詞典中找不到這樣的一個 I 字詞,則匹配失敗。
  4. 匹配字段去掉最後一個漢字,剩下的字符作爲新的匹配字段,回到上述步驟,重新匹配。
  5. 如此進行下去,直至切分到成功爲止,即完成一輪匹配,並切分出一個詞。
  6. 之後再按上述步驟進行下去,直到切分出所有詞爲止。

例如,現有短語”計算機科學和工程“,假設詞典中最長詞爲7字詞,於是先取”計算機科學和工“爲匹配字段,來匹配詞典,由於詞典中沒有該詞,古匹配失敗;去掉最後一個漢字成爲”計算及科學和“作爲新的匹配字段,重新匹配詞典,同樣匹配失敗;

取”計算機科學“作爲先的字段拉匹配字典,由於詞典中有“計算機科學”一詞,從而匹配成功,切分出的第一個詞爲“計算機科學”。以此類推,直至切分出第二、三……個詞。

使用MM方法切分的精度並不高,很難達到實際應用的要求,隨着語料的增大,誤差也逐漸變大。之後人們又基於此方法提出了雙向匹配法。該方法是從最大匹配方法發展而來的,分爲正向最佳匹配法和逆向最佳匹配法。

它們的基本原理都是相似的。

  • 將待分析的漢字串與機器詞典中的詞條進行最大匹配,若再詞典中找到某個字符串,則匹配成功(識別出一個詞)。
  • 所不同的是,兩個算法的搜多方向相反。
  • 待處理的字符串中存在着交叉歧義,因此兩種方法所得的結果必然不同。
  • 當然,基於最大匹配的搜索方法還存在着侷限性,比如正向最大匹配,因爲只能正向地找出最長地詞,而不能找出所有地候選詞條。
  • 因此,後來發展出了雙向掃描法來更快速地檢測出歧義產生的位置。

這類早期的分詞器因爲沒有考慮到詞彙上下文的相關性,分詞的精確度都不高。基於正向最大匹配算法的分詞器的準確度爲78%;召回率爲75%;F1值約爲76%。後來改進的雙向匹配算法的最高精度也在80%左右徘徊。顯然這不能滿足高精度文本處理的需求。

基於機械方法的分詞器雖然沒有得到廣泛的應用,但是卻揭示了一個重要的語言規律:一個詞彙的出現與其上下文環境中出現的詞彙序列存在着緊密的關係,如果過算法不能反映和處理這種上下文依賴關係,則不能最終達到滿意的分詞結果。

2. 系統總體流程與詞典結構

2.1 概述

2.2 中文分詞流程

在這裏插入圖片描述
HanLP詞典下載地址:https://github.com/hankcs/HanLP/releases
HanLP詳細介紹網址:https://github.com/hankcs/HanLP
HanLP源碼網址:https://github.com/hankcs/HanLP

本算法的所需的詞典位於data/dictionary/目錄下。
(1)在第一個環節,系統讀取待分詞的字符串。
(2)根據輸入的配置信息,導入相應的詞典。
(3) 進入粗分階段。

  • 首先對句子進行字符級切分,即將輸入額句子切分爲單個UTF-8編碼的字符數組(函數 toCharArray()),包括單箇中文字符、單個英文字符、其他單個字符等。
  • 一元切分
  • 二元切分
  • Nshort算法計算
  • 對粗分結果執行後處理應用規則,識別事件類專有名詞。

(4)進入未登錄詞識別階段,使用隱馬爾科夫鏈語言模型。

  • 根據人名識別詞典,將粗分的結果與之匹配,Viterbi算法識別外國的人名。
  • 根據地名識別詞典,將粗分的結果與之匹配,Viterbi算法識別地名。
  • 根據組織機構名詞典,將粗分的結果與之匹配,Dijkstra算法識別組織機構名。

(5)將命名實體識別後的分詞結果加入詞圖中,對詞圖再次進行分詞(Dijkstrra 最短路徑法)。該階段爲細分階段。
(6)使用詞性標註模型,Viterbi算法,對分詞結果進行詞性標註:

  • List item

該部分將在第四章介紹。
(7)轉換路徑爲分詞結果,並輸出分詞的結果。

2.3 分詞詞典結構

系統公有7個不同的詞典(包括語言模型)放置於Data目錄下。HanLP詞典結構如下。

詞典文件 說明
CoreNatureDictionary 一元語言模型詞典
CoreNatureDictionary.ngram 二元語言模型詞典
person/nr.txt.trie.dat 人名識別詞典——中國人名
person/nr.txt.value.dat 人名識別詞典——中國人名
person/nrf.txt.trie.dat 人名識別詞典——譯名
person/nrf.txt.value.dat 人名識別詞典——譯名
person/nrj.txt.trie.dat 人名識別詞典——日本人名
person/nrj.txt.value.dat 人名識別詞典——日本人名
place/ns.txt.trie.dat 地點識別詞典
place/ns.txt.value.dat 地點識別詞典
organization/nt.txt.trie.dat 組織機構名詞典
organization/nt.txt.value.dat 組織機構名詞典

(1)一元語言模型詞典也被稱爲核心詞典,文件名爲CoreNatureDictionary,系統提供了一個文本版本和一個二進制版本的文件。打開文本版本的文件,截取詞典的片段內容如下。

一下 m 2 d 1
一下子 m 2 d 1
一不做 nz 6

一元語言模型詞典的第一列是詞,第二列是該詞的第一詞性,第三列是對應該詞性的詞頻,;如果存在第四列,則是對應該詞的第二次性,第五列是對用第二詞性的詞頻;之後以此類推。

CoreNatureDictionary是算法的核心詞典,其他各個詞典都從此詞典衍生而來。而且,一元語言模型詞典的大小代表了系統的規模,即這個詞典越大,所包含的詞彙就越多,能夠正確分詞的語料範圍就越大。一般可用的、最小的中文分詞器,其核心詞典的規模不能夠少於30萬詞。

(2)二元語言模型詞典的文件名爲CoreNatureDictionary.ngram,系統提供了一個文本版本和一個二進制版本的文件。打開文本版本的文件,截取詞典的片段內容。

一@一對一 5
一@一道 5
一@丁 6
一@七旬 8
一@萬 157
一@萬億 4

二元語言模型詞典的結構第一列表示兩個相鄰詞,用@進行分隔。例如,“一@萬”表示前一個詞是“一”,後一個詞是“萬”,它們用“@”連接起來。第二列是該相鄰詞(共現詞)在語料庫中出現的概率,如上例爲157次。

二元語言模型詞典本質上構建出一個二維的矩陣,而且是一個方陣。矩陣的行和列就是一元詞表的長度。第一列的前一個詞相當於矩陣的行索引,後一個詞相當於矩陣的列索引,取值爲矩陣詞頻(“Frequency”)。因此,這個矩陣非零元素的數量充分展示了詞彙的搭配信息。因爲這個矩陣比較大,所以以一維列表的方式顯示出來。

如果把一元語言模型詞典和二元語言模型詞典合在一起看,它們也可看作一個圖(Graph)。其中圖的頂點爲一元語言模型詞典中的詞;二元語言模型詞典的每個相鄰詞爲連接兩個頂點的一條邊,詞頻爲邊的權值。它們共同溝中了Graph這個完整的數據結構。整個Nshort算法就是對這個圖計算最大概率額過程

2.4 命名實體的詞典結構

人名、譯名、地名、機構名的識別詞典均由兩個文件構成,後綴名分別爲 trie.dat 和 value.dat 。下面僅以人名識別詞典爲例,簡單講解命名實體識別一元詞典和二元詞典的數據結構。後綴名爲trie.data的詞典是一元辭典,人名詞典的截圖如下。

郎 B 228 D 22 E 12 K 4 C 1 L 1
郟 B 4
鄭 B 3505 C 21 E 20 D 5

詞典的數據結構與CoreNatureDictionary詞典相同,第一列爲詞彙,第二列爲第一個原模式標籤,第三列爲第一個原模式標籤的詞頻;第四列爲第二個原模式標籤,第五列爲第二個元模式標籤的詞頻;之後依此類推。元模式位於 package com.hanks.hanlp.corpus.tag包的枚舉列表NR
中。
元模式標籤
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章