如何掌握分詞技術(shù),你需要學(xué)會這些

導(dǎo)語?

本周對自然語言處理的分詞技術(shù)進行了學(xué)習(xí)。本文針對分詞技術(shù)的進行了全視角的概覽,目標(biāo)是掌握什么是分詞技術(shù)、為什么需要分詞技術(shù)和如何使用分詞技術(shù)。后續(xù)將分不同篇幅對其中內(nèi)容進行深挖和講解。文章結(jié)構(gòu)如下(全文閱讀時間大約10分鐘):

簡介?

首先,簡單介紹一下自然語言處理技術(shù)(簡稱NLP),是人工智能領(lǐng)域中一個重要的方向,主要研究如何讓人類和計算機之間,能夠使用人類能夠理解的語言進行有效溝通,其涵蓋語言學(xué)、計算機科學(xué)、數(shù)學(xué)等多種交叉學(xué)科。

在現(xiàn)如今人工智能技術(shù)迅速發(fā)展時期,AI技術(shù)逐步從感知智能朝認(rèn)知智能大跨步邁進,NLP技術(shù)或許是人類實現(xiàn)強人工智能的關(guān)鍵所在。

什么是分詞技術(shù)?分詞技術(shù)屬于自然語言處理技術(shù)范疇,分詞就是將句子中的詞語劃分出來的技術(shù),人能夠知道哪些是詞語,如何讓計算機能夠理解和劃分,其處理過程就是分詞。當(dāng)然,分詞只是一種工具,場景不同,要求也不同。

為什么需要分詞技術(shù)?因為許多自然語言處理技術(shù)都會圍繞詞語展開,例如情感分析、問答模型等;分詞效果直接影響上層技術(shù)的效果;并且,詞語是最小粒度有意義的語言成分;英文往往不需要分詞,但中文需要,因為中文在基本文法上有其特殊性,主要體現(xiàn)在:

1.英文以空格作為天然分隔符,中文詞語間沒有分隔

2.古文詞通常是單個漢字,而現(xiàn)在漢語雙字多字詞比較多

3.詞和詞組邊界模糊

技術(shù)難點?

到目前為止,中文分詞技術(shù)仍存在三大難題未完全突破:

1.分詞的規(guī)范:字和詞的界限往往很模糊,并沒有一個公認(rèn)、權(quán)威的標(biāo)準(zhǔn),會有很多不同主觀上的分詞差異

2.歧義詞的切分,歧義詞的情況分為:交集型歧義、組合型歧義混合型歧義。另外,更頭痛的情況就是真歧義,即使是人都無法判斷的情況

3.未登錄詞識別,就是新詞的意思,如人名、地名、網(wǎng)絡(luò)用詞等等

分詞算法概述

1算法中的數(shù)據(jù)結(jié)構(gòu)

在展開算法實現(xiàn)之前,先來講講算法中提到的數(shù)據(jù)結(jié)構(gòu):一個是詞典,一個是詞圖。

詞典一般可以用鏈表或數(shù)組實現(xiàn),更高級的詞典還有Trie樹和AC自動機等,例如在HanLp的源碼中用戶自定義詞典的識別是用的AC自動機實現(xiàn)的(需要了解Trie樹、KMP算法、AC自動機可以在后續(xù)的推文中學(xué)習(xí))。

圖作為一種常見的數(shù)據(jù)結(jié)構(gòu),其存儲方式一般有兩種:鄰接矩陣和鄰接表。所謂矩陣其實就是二維數(shù)組,所謂鄰接矩陣存儲結(jié)構(gòu),就是每個頂點用一個一維數(shù)組存儲每條邊的信息,就能用矩陣表示圖中各頂點之間的鄰接關(guān)系。

鄰接表,存儲方法跟樹的子鏈表示法相類似,是一種順序分配和鏈?zhǔn)椒峙湎嘟Y(jié)合的存儲結(jié)構(gòu)。

2分詞算法簡介

現(xiàn)有的分詞算法,大體上可以分為如下幾類:1.基于規(guī)則的分詞算法 2.基于統(tǒng)計的分詞算法 3.基于語義的分詞算法 4.基于理解的分詞算法(該部分內(nèi)容在本期后續(xù)推文中會展開講解)

基于規(guī)則的分詞算法主要思想是按照一定的策略將待分析的漢字串與一個“充分大的”機器詞典中的詞條進行匹配。若在詞典中找到某個字符串,則匹配成功。該方法有三個要素,即分詞詞典、文本掃描順序和匹配原則。

優(yōu)點是簡單,容易實現(xiàn)。缺點是:匹配速度慢;存在交集型和組合型歧義切分問題;詞本身沒有一個標(biāo)準(zhǔn)的定義,沒有統(tǒng)一標(biāo)準(zhǔn)的詞集;不同詞典產(chǎn)生的歧義也不同;缺乏自學(xué)習(xí)的智能性。

基于統(tǒng)計的分詞算法的主要核心是詞是穩(wěn)定的組合,因此在上下文中,相鄰的字同時出現(xiàn)的次數(shù)越多,就越有可能構(gòu)成一個詞。因此字與字相鄰出現(xiàn)的概率或頻率能較好地反映成詞的可信度??梢詫τ?xùn)練文本中相鄰出現(xiàn)的各個字的組合的頻度進行統(tǒng)計,計算它們之間的互現(xiàn)信息。互現(xiàn)信息體現(xiàn)了漢字之間結(jié)合關(guān)系的緊密程度。當(dāng)緊密程 度高于某一個閾值時,便可以認(rèn)為此字組可能構(gòu)成了一個詞。該方法又稱為無字典分詞。

實際運用中會結(jié)合基于規(guī)則的分詞方法,不僅發(fā)揮詞典匹配的速度快的優(yōu)勢,又結(jié)合無詞典分詞能夠結(jié)合上下文識別、消歧的優(yōu)勢。

基于語義的分詞算法引入了語義分析,對自然語言自身的語言信息進行更多的處理。

基于理解的分詞算法,是通過讓計算機,模擬人對句子的理解,達(dá)到識別詞組的效果。基本思想是在分詞的同時進行句法、語義的分析,利用句法和語義信息來處理歧義現(xiàn)象。通常包含三部分:分詞子系統(tǒng)、句法語義子系統(tǒng)、總控部分。在總控部分的協(xié)調(diào)下,分詞子系統(tǒng)可以獲得有關(guān)詞、句子等的句法和語義信息,來對分詞歧義進行判斷,模擬人對句子的理解過程。目前基于理解的分詞方法主要有專家系統(tǒng)分詞法和神經(jīng)網(wǎng)絡(luò)分詞法等。

python工具

最后介紹一些常用的python分詞庫(該部分內(nèi)容在本期后續(xù)推文中會展開講解如何使用)

1.jieba:專用于分詞的python庫,分詞效果好.支持三種分詞模式:精準(zhǔn)模式、全模式和搜索引擎模式;并且支持繁體分詞;可以自定義詞典。它主要使用的分詞算法是基于統(tǒng)計的分詞算法:

a.基于前綴詞典實現(xiàn)高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構(gòu)成的有向無環(huán)圖(DAG)

b.采用動態(tài)規(guī)劃查找最大概率路徑,找出基于詞頻的最大切分組合

c.對未登錄詞,采用基于漢字成詞能力的HMM模型,使用Viterbi算法

Github地址:

https://github.com/fxsjy/jieba

2.THULAC:由清華大學(xué)自然語言處理與社會人文計算實驗室研制推出的一套中文詞法分析工具包,具有中文分詞和詞性標(biāo)注功能。THULAC具有如下幾個特點:

a.能力強。利用集成的目前世界上規(guī)模最大的人工分詞和詞性標(biāo)注中文語料庫(約含5800萬字)訓(xùn)練而成,模型標(biāo)注能力強大。

b.準(zhǔn)確率高。該工具包在標(biāo)準(zhǔn)數(shù)據(jù)集Chinese Treebank上分詞的F1值可達(dá)97.3%,詞性標(biāo)注的F1值可達(dá)到92.9%,與該數(shù)據(jù)集上最好方法效果相當(dāng)。

c.速度較快。同時進行分詞和詞性標(biāo)注速度為300KB/s,每秒可處理約15萬字。只進行分詞速度可達(dá)到1.3MB/s.

Github地址:

https://github.com/thunlp/THULAC-Python

3.pkuseg:由北京大學(xué)語言計算與機器學(xué)習(xí)研究組研制推出的一套全新的中文分詞工具包。具有如下幾個特點:

a.分詞準(zhǔn)確率。相比于其他的分詞工具包,該工具包在不同領(lǐng)域的數(shù)據(jù)上都大幅提高了分詞的準(zhǔn)確度。根據(jù)測試結(jié)果,pkuseg分別在示例數(shù)據(jù)集(MSRA和CTB8)上降低了79.33%和63.67%的分詞錯誤率。

b.多領(lǐng)域分詞。該分詞包訓(xùn)練了多種不同領(lǐng)域的分詞模型。根據(jù)待分詞的領(lǐng)域特點,用戶可以自由地選擇不同的模型。

c.支持用戶自訓(xùn)練模型。支持用戶使用全新的標(biāo)注數(shù)據(jù)進行訓(xùn)練。

Github地址:

https://github.com/lancopku/PKUSeg-python

4.FoolNLTK:根據(jù)該項目所述,這個中文工具包的特點有如下幾點:

a.可能不是最快的開源中文分詞,但很可能是最準(zhǔn)的開源中文分詞

b.基于?BiLSTM?模型訓(xùn)練而成

c.包含分詞,詞性標(biāo)注,實體識別,?都有比較高的準(zhǔn)確率

d.用戶自定義詞典

Github地址:

https://github.com/rockyzhengwu/FoolNLTK

5.LTP:語言技術(shù)平臺(Language Technology Platform,LTP)是哈工大社會計算與信息檢索研究中心歷時十年開發(fā)的一整套中文語言處理系統(tǒng)。LTP制定了基于XML的語言處理結(jié)果表示,并在此基礎(chǔ)上提供了一整套自底向上的豐富而且高效的中文語言處理模塊(包括詞法、句法、語義等6項中文處理核心技術(shù)),以及基于動態(tài)鏈接庫(Dynamic Link Library, DLL)的應(yīng)用程序接口、可視化工具,并且能夠以網(wǎng)絡(luò)服務(wù)(Web Service)的形式進行使用。

GitHub地址:

https://github.com/HIT-SCIR/pyltptp

另外運行的時候需要下載模型,模型還比較大,下載地址:

http://ltp.ai/download.html

6.SnowNLP: Simplified Chinese Text Processing,可以方便的處理中文文本內(nèi)容,是受到了 TextBlob 的啟發(fā)而寫的,由于現(xiàn)在大部分的自然語言處理庫基本都是針對英文的,于是寫了一個方便處理中文的類庫,并且和 TextBlob 不同的是,這里沒有用 NLTK,所有的算法都是自己實現(xiàn)的,并且自帶了一些訓(xùn)練好的字典。

GitHub?地址:

https:github.com/isnowfy/snownlp

作者原創(chuàng),請務(wù)必替換文字

公眾號:語言智能體

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容