1. 程式人生 > >NLP舞動之中文分詞淺析(一)

NLP舞動之中文分詞淺析(一)

一、簡介

       針對現有中文分詞在垂直領域應用時,存在準確率不高的問題,本文對其進行了簡要分析,對中文分詞面臨的分詞歧義及未登入詞等難點進行了介紹,最後對當前中文分詞實現的演算法原理(基於詞表、統計以及序列標註等演算法)進行了簡要闡述,並對比了現有技術的優缺點,並給出了本文作者在工程應用上的中文分詞調優的經驗分享。

二、引言

       中文資訊處理是指自然語言處理的分支,是指用計算機對中文進行處理。和大部分西方語言不同,漢語的詞語之間沒有明顯的空格標記,句子是以字串的形式出現。常規來說,對中文進行處理的第一步就是進行自動分詞,即將字串轉變成詞串,以便後續對中文進行詞法分析,如詞性標註、語義角色標註等。        目前有較多優秀開源的中文分詞工具,如jieba、HanLP、ansj、IKAnalyzer、FudanNLP、PKUseg等,為什麼還要探討中文分詞?最主要的原因:在特定的垂直領域,例如醫療健康,中文分詞的泛化能力較差,對特定疾病術語、疾病症狀等分詞準確率較差。在搜尋引擎系統中,採用詞彙、短語、句子等綜合排序,中文分詞的結果間接地對上述排序做貢獻,故而影響了搜尋引擎的排名結果(即期望的搜尋結果未能排在前面)。在推薦系統中,運用自然語言處理技術提供特徵,首當其衝為中文分詞提供詞法分詞,中文分詞的好壞也對推薦結果造成了較大的影響。在對話系統中,若是FAQ型別,則與搜尋引擎處理方式類同,在此不再贅述了;若是非FAQ型別,中文分詞對語義理解會造成一定的困擾,讓對話進行下去或者在儘可能短的輪數完成特定的任務帶來一些困難。綜上所述,為了滿足特定的垂直領域任務,研究中文分詞技術,並構建自動中文分詞勢在必行。

三、中文分詞難點

       中文分詞的難點主要集中在分詞歧義與未登陸詞上,其中未登入詞(即不在詞表中,或者不在訓練語料中等)較分詞歧義更加困難一些。分詞歧義主要分為交集歧義、組合歧義以及自然語義歧義,具體內容如下:

      1. 交集歧義

       我們/ 的/ 士兵/ 同志        我們/ 的士/ 兵/ 同志        此類情形,一般由分詞方式與詞典造成的,可對大規模語料挖掘,一方面可以挖掘詞彙來擴充套件詞典,另一方面可挖掘句式,進行分詞消歧。

      2. 組合歧義

       喬峰/ 從/ 馬上/ 下來        喬峰/ 從/ 馬/ 上/ 下來        此類情形,大多由詞典造成的,可對大規模語料進行挖掘,補充詞典或者進行句式挖掘,進而實現分詞消歧。

      3. 自然語義歧義

       乒乓球/ 拍賣/ 完了        乒乓球拍/ 賣/ 完了        此類情形,多種分詞方式在語義上均沒問題,但需結合具體的上下文語境,來選擇正確的中文分詞方式。        綜上所述,由於自然語義歧義較為複雜,對文字理解的要求比較高,因此,目前對中文分詞的研究主要集中於交集歧義與組合歧義的處理。此外,未登入詞層出不窮,給中文分詞造成了極大的困難,有些的解決方法依賴新詞發現去實現,並輔以人工校驗並新增入詞庫中,本質上是一種延遲處理的思路,本文作者傾向於在根據句式在大規模語料中進行挖掘。                                 

四、中文分詞演算法

       中文分詞演算法從大類上來分,主要分為基於詞表、統計以及序列標註的分詞方式,在特定的應用場景下,可根據情況選擇相應的實現方式。

        1. 基於詞表的中文分詞

       簡單來說,根據維護的大規模詞典,在詞典中查詢某一個固定長度的字組合,若未能查詢到,則剔除一個字,直至找到一個詞為止。基於詞表的方式主要有正向最大匹配、逆向最大匹配以及雙向最大匹配,以下簡要介紹下逆向最大匹配的實現,其中正向最大匹配與逆向匹配類同,在此就不再贅述了。 圖-1 逆向最大匹配分詞        如圖-1所示,為逆向最大匹配分詞的實現,其中橫向箭頭為下一步移動方向,縱向箭頭包含的部分為待查詢字組合。圖中以5最為最大長度詞彙,即從右向左以5作為滑動視窗進行查詢,若查詢到則以前詞的長度,向左整體平移,如圖-1中前詞“同志”,則整體平移至“我們”,若長度不足5,則將整體作為滑動視窗。        針對基於詞表的中文分詞實現,相對正向最大匹配而言,逆向最大匹配更符合中文語言表述習慣。在實際應用中,通常會結合正向與逆向,即雙向最大匹配分詞來處理分詞歧義,若正向與逆向分詞的個數相同,則通常選擇單字個數少的實現方式;若個數不相同,可選擇單字個數少的方式,也可以採用啟發式規則,採用長詞優先的策略,或者藉助N-Gram模型統計鄰接詞共現頻率來進行選擇, 從而解決分詞歧義的問題。        從上面描述可以看出,基於詞表的分詞效率較高,但非常依賴詞典的規模,因而對未登入詞不敏感,採取合適的啟發策略,能在一定程度上解決分詞分歧問題,但是侷限性較大,其分詞工具的典型代表為IKAnalyzer,需要使用者維護較多的領域詞典資料。另外構建詞表時,維護詞彙的頻率對後續統計任務求解最短距離也是一種有利的輔助。

      2. 基於統計的中文分詞

       承接上文所述,藉助N-Gram模型統計鄰接詞的共現頻率,也可視為鄰接詞間的距離。若將句子的分詞看做有向圖,圖中頂點為字或者詞彙(字的組合),頂點間的邊的長度(即距離)採用N-Gram模型從大規模語料中統計,並進行演化計算,則將中文分詞問題轉化為求最短路徑問題,如圖-2所示。

相關推薦

NLP舞動中文淺析

一、簡介        針對現有中文分詞在垂直領域應用時,存在準確率不高的問題,本文對其進行了簡要分析,對中文分詞面臨的分詞歧義及未登入詞等難點進行了介紹,最後對當前中文分詞實現的演算法原理(基於詞表、統計以及序列標註等演算法)進行了簡要闡述,並對比了現有技術的優缺點,

中文系列 雙陣列Tire樹(DART)詳解

雙陣列Tire樹是Tire樹的升級版,Tire取自英文Retrieval中的一部分,即檢索樹,又稱作字典樹或者鍵樹。下面簡單介紹一下Tire樹。 1.1 Tire樹 Trie是一種高效的索引方法,它實際上是一種確定有限自動機(DFA),在樹的結構中,每一個結點對應一個DFA狀態,每一個從父結點指向子結點

Spark 大資料中文統計 開發環境搭建

          幾年前搞BI專案時就聽說過大資料技術,當時也買了書,可惜沒有認真去學。幾年5月份 開始,報名參加王家林老師的大資料蘑菇雲行動,才算真正開始學習Spark,學習大資料技術。           網上很多Spark的例子都是經典的WordCount exam

NLPCRF訓練

分鐘 -c data ++ del 控制 rdquo 進制 文本 分三步1、先分詞2、做BEMS標註,同時做詞性標註3、訓練模型 1、對語料進行分詞 拿到測試部的語料或者其他渠道的語料,先對語料進行分詞,我剛剛開始是用NS分詞的,等CRF模型訓練好後

中文IK的配置檔案

中文(IK)分詞器是在IKAnalyzer分詞包中使用的,使用前請自行下載相應的jar包 將這個檔案(IKAnalyzer.cfg.xml)放入到src的的目錄先, <?xml version="1.0" encoding="UTF-8"?> &

資料庫查詢的優缺點以及英文和中文各自的方法

1.為什麼需要資料庫分詞查詢  假設有一個數據庫表,表中有一個title欄位 table1 假如有300萬的資料 id為主鍵,title也設定了索引 id title 1 這是計算機,

機器學習SVM初解與淺析:最大距離

機器學習 svm 最大距離 2 / ||w|| 這段時間在看周誌華大佬的《機器學習》,在看書的過程中,有時候會搜搜其他人寫的文章,對比來講,周教授講的內容還是比較深刻的,但是前幾天看到SVM這一章的時候,感覺甚是晦澀啊,第一感覺就是比較抽象,特別是對於像本人這種I

機器學習SVM初解與淺析:

機器學習 svm 最大距離 2 / ||w||sdsshngshan‘gccha 這段時間在看周誌華大佬的《機器學習》,在看書的過程中,有時候會搜搜其他人寫的文章,對比來講,周教授講的內容還是比較深刻的,但是前幾天看到SVM這一章的時候,感覺甚是晦澀啊,第一感覺就

統計使用訊飛語言云進行統計

最近想取一個網名,想起中國文化博大精深,如果用古代的唐詩宋詞組合一定有一個意向不到的名字。組合首先要分詞,想起錘子手機有一個很火的功能叫BigBang,它用的是訊飛的語言云,是免費提供的,所以這次使用訊飛的語言云進行分詞,然後隨機組合。另外,還可以進行有趣的資料統計,看看古

python自然語言處理中文預處理、統計詞頻

一個小的嘗試。。資料來源資料集 一共200條關於手機的中文評論,以XML格式儲存。分詞工具 python-jieba預處理包括去停用詞、去標點符號和數字去停用詞:使用的是他人總結的 停用詞表去標點符號和數字:用正則表示式。原本打算的是中文標點符號從網上覆制,英文標點符號用st

hanlp原始碼解析中文演算法詳解

詞圖 詞圖指的是句子中所有詞可能構成的圖。如果一個詞A的下一個詞可能是B的話,那麼A和B之間具有一條路徑E(A,B)。一個詞可能有多個後續,同時也可能有多個前驅,它們構成的圖我稱作詞圖。 需要稀疏2維矩陣模型,以一個詞的起始位置作為行,終止位置作為列,可以得到一個二維矩陣。例如:“他說的確實

python中文jieba類庫

 先上效果圖: 資料來源: 分詞後的txt檔案: 分詞後的excel檔案: 原始碼: #!/usr/bin/python # -*- coding: UTF-8 -*- # *************************************

基於高版本Lucene的中文IK的DEMO

注意 為了大家方便,我沒有遮蔽資料庫,專案中用的資料來源請各位碼友不要亂搞~謝謝 緣起 日前專案中需要用到Lucene.且需要中文分詞,看了下IK分詞器,但是IK分詞器貌似只支援到lucene的3.X。後期的版本就不支援了,在網上找了一部分資料,自己寫了一個demo.因為中間

Hanlp原始碼解析中文演算法

詞圖 詞圖指的是句子中所有詞可能構成的圖。如果一個詞A的下一個詞可能是B的話,那麼A和B之間具有一條路徑E(A,B)。一個詞可能有多個後續,同時也可能有多個前驅,它們構成的圖我稱作詞圖。 需要稀疏2維矩陣模型,以一個詞的起始位置作為行,終止位置作為列,可以得到一個二維矩陣。例如:“他說的確實

python_NLP實戰中文技術

一、規則分詞 1.1 正向最大匹配演算法 # 正向最大匹配演算法 MM法 規則分詞 class MM(object): def __init__(self): self.window_size=3 def cut(self,text)

Elasticsearch筆記六中文器及自定義

中文分詞器 在lunix下執行下列命令,可以看到本來應該按照中文”北京大學”來查詢結果es將其分拆為”北”,”京”,”大”,”學”四個漢字,這顯然不符合我的預期。這是因為Es預設的是英文分詞器我需要為其配置中文分詞器。 curlHTTP://192.168.79.131:9

Elasticsearch中文

Elasticsearch的中文分詞器   1、單字分詞:     如:“我們是中國人”     效果:“我”“們”“是”“中”“國”“人”   2、二分法分詞:按兩個字進行切分。     如:“我們是中國人”,效果:“我們”、“們是”、“是中”、“中國”、“國人

文字分析中文

在處理文字分析時,我們經常需要面臨的一個問題就是分詞,特別是在中國當前的IT環境下,大部分文字資料都是中文,中文和英文有一些不一樣,中文字與字之間沒有明顯的分隔符,而英文單詞與單詞之間有自然的空格符來分隔。中文分詞屬於自然語言處理的範疇,中文分詞廣泛應用於搜尋引

自然語言處理中文器詳解

中文分詞是中文文字處理的一個基礎步驟,也是中文人機自然語言互動的基礎模組,不同於英文的是,中文句子中沒有詞的界限,因此在進行中文自然語言處理時,通常需要先進行分詞,分詞效果將直接影響詞性,句法樹等模組