自然語言處理1 分詞

2021-09-21 14:49:22 字數 3592 閱讀 3404

分詞是自然語言處理的基礎,分詞準確度直接決定了後面的詞性標註、句法分析、詞向量以及文字分析的質量。英文語句使用空格將單詞進行分隔,除了某些特定詞,如how many,new york等外,大部分情況下不需要考慮分詞問題。但中文不同,天然缺少分隔符,需要讀者自行分詞和斷句。故在做中文自然語言處理時,我們需要先進行分詞。

中文分詞不像英文那樣,天然有空格作為分隔。而且中文詞語組合繁多,分詞很容易產生歧義。因此中文分詞一直以來都是nlp的乙個重點,也是乙個難點。難點主要集中在分詞標準,切分歧義和未登入詞三部分。

分詞標準

比如人名,有的演算法認為姓和名應該分開,有的認為不應該分開。這需要制定乙個相對統一的標準。又例如「花草」,有的人認為是乙個詞,有的人認為應該劃分開為兩個詞「花/草」。某種意義上,中文分詞可以說是乙個沒有明確定義的問題。

切分歧義

不同的切分結果會有不同的含義,這又包含如下幾種情況

組合型歧義:分詞粒度不同導致的不同切分結果。比如「中華人民共和國」,粗粒度的分詞結果為「中華人民共和國」,細粒度的分詞結果為「中華/人民/共和國」。這種問題需要根據使用場景來選擇。在文字分類,情感分析等文字分析場景下,粗粒度劃分較好。而在搜尋引擎場景下,為了保證recall,細粒度的劃分則較好。jieba分詞可以根據使用者選擇的模式,輸出粗粒度或者細粒度的分詞結果,十分靈活。

另外,有時候漢字串ab中,ab a b可以同時成詞,這個時候也容易產生組合型歧義。比如「他/將/來/網商銀行」,「他/將來/想/應聘/網商銀行」。這需要通過整句話來區分。

組合型歧義描述的是ab a b均可以同時成詞的漢字串,它是可以**的,故也有專家稱之為「固有型歧義」

交集型歧義:不同切分結果共用相同的字,前後組合的不同導致不同的切分結果。比如「商務**幹事」,可以劃分為「商務處/女幹事」,也可以劃分為「商務/**/幹事」。這也需要通過整句話來區分。交集型歧義前後組合,變化很多,難以**,故也有專家稱之為「偶發型歧義」。

真歧義:本身語法或語義沒有問題,即使人工切分也會產生歧義。比如「下雨天留客天天留人不留」,可以劃分為「下雨天/留客天/天留/人不留」,也可以劃分為「下雨天/留客天/天留人不/留」。此時通過整句話還沒法切分,只能通過上下文語境來進行切分。如果是不想留客,則切分為前乙個。否則切分為後乙個。

有專家統計過,中文文字中的切分歧義出現頻次為1.2次/100漢字,其中交集型歧義和組合型歧義佔比為12:1。而對於真歧義,一般出現的概率不大。

未登入詞

也叫新詞發現,或者生詞,未被詞典收錄的詞。未登入詞分為如下幾種型別

新出現的詞彙,比如一些網路熱詞,如「超女」「給力」等

專有名詞,主要是人名 地名 組織機構,比如「南素檀」「川普」 「花唄」「借唄」等。

專業名詞和研究領域詞語,比如「蘇丹紅」 「禽流感」

其他專有名詞,比如新出現的電影名、產品名、書籍名等。

未登入詞對於分詞精度的影響遠遠超過歧義切分。未登入詞識別難度也很大,主要原因有

當前的分詞演算法主要分為兩類,基於詞典的規則匹配方法,和基於統計的機器學習方法。

基於詞典的分詞演算法

基於詞典的分詞演算法,本質上就是字串匹配。將待匹配的字串基於一定的演算法策略,和乙個足夠大的詞典進行字串匹配,如果匹配命中,則可以分詞。根據不同的匹配策略,又分為正向最大匹配法,逆向最大匹配法,雙向匹配分詞,全切分路徑選擇等。

__最大匹配法__主要分為三種:

1.正向最大匹配法,從左到右對語句進行匹配,匹配的詞越長越好。比如「商務**幹事」,劃分為「商務處/女幹事」,而不是「商務/**/幹事」。這種方式切分會有歧義問題出現,比如「結婚和尚未結婚的同事」,會被劃分為「結婚/和尚/未/結婚/的/同事」。

2.逆向最大匹配法,從右到左對語句進行匹配,同樣也是匹配的詞越長越好。比如「他從東經過我家」,劃分為「他/從/東/經過/我家」。這種方式同樣也會有歧義問題,比如「他們昨日本應該回來」,會被劃分為「他們/昨/日本/應該/回來」。

3.雙向匹配分詞,則同時採用正向最大匹配和逆向最大匹配,選擇二者分詞結果中詞數較少者。但這種方式同樣會產生歧義問題,比如「他將來上海」,會被劃分為「他/將來/上海」。由此可見,詞數少也不一定劃分就正確。

全切分路徑選擇,將所有可能的切分結果全部列出來,從中選擇最佳的切分路徑。分為兩種選擇方法

1.n最短路徑方法。將所有的切分結果組成有向無環圖,切詞結果作為節點,詞和詞之間的邊賦予權重,找到權重和最小的路徑即為最終結果。比如可以通過詞頻作為權重,找到一條總詞頻最大的路徑即可認為是最佳路徑。

2.n元語法模型。同樣採用n最短路徑,只不過路徑構成時會考慮詞的上下文關係。一元表示考慮詞的前後乙個詞,二元則表示考慮詞的前後兩個詞。然後根據語料庫的統計結果,找到概率最大的路徑。

基於統計的分詞演算法,本質上是乙個序列標註問題。我們將語句中的字,按照他們在詞中的位置進行標註。標註主要有:b(詞開始的乙個字),e(詞最後乙個字),m(詞中間的字,可能多個),s(乙個字表示的詞)。例如「網商銀行是螞蟻金服微貸事業部的最重要產品」,標註後結果為「bmmesbmmebmmmesbmebe」,對應的分詞結果為「網商銀行/是/螞蟻金服/微貸事業部/的/最重要/產品」。

我們基於統計分析方法,得到序列標註結果,就可以得到分詞結果了。這類演算法基於機器學習或者現在火熱的深度學習,主要有hmm,crf,svm,以及深度學習等。

1.hmm,隱馬爾科夫模型。隱馬爾科夫模型在機器學習中應用十分廣泛,它包含觀測序列和隱藏序列兩部分。對應到nlp中,我們的語句是觀測序列,而序列標註結果是隱藏序列。任何乙個hmm都可以由乙個五元組來描述:觀測序列,隱藏序列,隱藏態起始概率,隱藏態之間轉換概率**移概率),隱藏態表現為觀測值的概率(發射概率)。其中起始概率,轉移概率和發射概率可以通過大規模語料統計來得到。從隱藏態初始狀態出發,計算下乙個隱藏態的概率,並依次計算後面所有的隱藏態轉移概率。我們的序列標註問題就轉化為了求解概率最大的隱藏狀態序列問題。jieba分詞中使用hmm模型來處理未登入詞問題,並利用viterbi演算法來計算觀測序列(語句)最可能的隱藏序列(bems標註序列)。

2.crf,條件隨機場。也可以描述輸入序列和輸出序列之間關係。只不過它是基於條件概率來描述模型的。詳細的這兒就不展開了。

3.深度學習。將語句作為輸入,分詞結果作為標註,可以進行有監督學習。訓練生成模型,從而對未知語句進行**。

中文分詞對於自然語言處理至關重要,評價乙個分詞引擎效能的指標主要有分詞準確度和分詞速度兩方面。分詞準確度直接影響後續的詞性標註,句法分析,文字分析等環節。分詞速度則對自然語言處理的實時性影響很大。下圖為幾種常用分詞引擎在準確度和速度方面的對比。

由上可見,想要做準確度很高的通用型分詞引擎是多麼的困難。如果對準確度要求很高,可以嘗試開發特定領域的分詞引擎。比如專門針對金融領域。同時從圖中可見,作為一款開源的通用型分詞引擎,jieba分詞的準確度和速度都還是不錯的。後面我們會詳細講解jieba分詞的用法及其原理。

中文分詞是中文自然語言處理中的乙個重要環節,為後面的詞向量編碼,詞性標註,句法分析以及文字分析打下了堅實的基礎。同時,由於中文缺少空格等分隔符,並且漢字間的組合特別多,很容易產生歧義,這些都加大了中文分詞的難度。基於詞典的字串匹配演算法和基於統計的分詞演算法,二者各有優缺點,我們可以考慮結合使用。隨著深度學習的興起,我們可以考慮利用深度學習來進行序列標註和中文分詞。

自然語言處理 結巴分詞

jieba分詞的三種模式的對比 import jieba text 在精確模式的基礎上對長詞再次劃分提高召回率 text list jieba.cut text,cut all true print 全模式 print join text list print 精確模式 text list jieb...

自然語言處理 漢語分詞

nlpir ictclas 漢語分詞系統 pynlpir 是該漢語分詞系統的 python 封裝版 安裝步驟 pip install pynlpir pynlpir update 官方文件的漢語分詞示例 import pynlpir pynlpir.open str 歡迎科研人員 技術工程師 企事業...

自然語言處理 詞袋

詞袋模型將一段文字作為乙個個分離的詞進行處理,通過不同類文字中可能出現詞的差異對文字進行分類。必須指出的是對於文字分類,上下文對於其真正的類別有著強相關性。個人理解此類方法可能只是為了演算法的簡易性選擇性地放棄了文字中的上下文資訊,或者說只關注詞頻資訊也能夠獲得符合要求的文字分類效果。詞袋模型的三部...