日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

结巴分词优点_中文分词概述及结巴分词原理

發(fā)布時(shí)間:2023/12/31 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 结巴分词优点_中文分词概述及结巴分词原理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

詞是中文表達(dá)語義的最小單位,中文分詞是中文文本處理的一個(gè)基礎(chǔ)步驟,分詞的結(jié)果對中文信息處理至為關(guān)鍵。

本文先對中文分詞方法進(jìn)行概述,然后簡單介紹結(jié)巴分詞背后的原理。

1.?中文分詞概述

中文分詞根據(jù)實(shí)現(xiàn)特點(diǎn)大致可分為兩類:基于詞典的分詞方法、基于統(tǒng)計(jì)的分詞方法。

1.1 基于詞典的分詞方法

基于詞典的分詞方法首先會建立一個(gè)充分大的詞典,然后依據(jù)一定的策略掃描句子,若句子中的某個(gè)子串與詞典中的某個(gè)詞匹配,則分詞成功。

常見的掃描策略有:正向最大匹配、逆向最大匹配、雙向最大匹配和最少詞數(shù)分詞。

1.1.1 正向最大匹配

對輸入的句子從左至右,取詞典中最長單詞的個(gè)數(shù)作為第一次取詞的個(gè)數(shù),在詞典中進(jìn)行掃描,若不匹配,則逐字遞減;若匹配,則取出當(dāng)前詞,從后面的詞開始正向最大匹配,組不了詞的字單獨(dú)劃開。其分詞基本原則是:詞的顆粒度越大越好;切分結(jié)果中非詞典詞越少越好;總體詞數(shù)越少越好。

1.1.2 逆向最大匹配

分詞原則與正向最大匹配相同,但順序不是從首字開始,而是從末字開始,而且它使用的分詞詞典是逆序詞典,其中每個(gè)詞條都按逆序方式存放。在實(shí)際處理時(shí),先將句子進(jìn)行倒排處理,生成逆序句子,然后根據(jù)逆序詞典,對逆序句子用正向最大匹配處理。

1.1.3 雙向最大匹配

將正向最大匹配與逆向最大匹配組合起來,對句子使用這兩種方式進(jìn)行掃描切分,如果兩種分詞方法得到的匹配結(jié)果相同,則認(rèn)為分詞正確,否則,按最小集處理。

1.1.4 最少詞數(shù)分詞

即一句話應(yīng)該分成數(shù)量最少的詞串,該方法首先會查找詞典中最長的詞,看是不是所要分詞的句子的子串,如果是則切分,然后不斷迭代以上步驟,每次都會在剩余的字符串中取最長的詞進(jìn)行分詞,最后就可以得到最少的詞數(shù)。

總結(jié):基于詞典的分詞方法簡單、速度快,效果也還可以,但對歧義和新詞的處理不是很好,對詞典中未登錄的詞沒法進(jìn)行處理。

1.2 基于統(tǒng)計(jì)的分詞方法

基于統(tǒng)計(jì)的分詞方法是從大量已經(jīng)分詞的文本中,利用統(tǒng)計(jì)機(jī)器學(xué)習(xí)模型來學(xué)習(xí)詞的切分規(guī)律,從而實(shí)現(xiàn)對未知文本的切分。隨著大規(guī)模語料庫的建立,基于統(tǒng)計(jì)的分詞方法不斷受到研究和發(fā)展,漸漸成為了主流。

常用的統(tǒng)計(jì)學(xué)習(xí)方法有:隱馬爾可夫模型(HMM)、條件隨機(jī)場(CRF)和基于深度學(xué)習(xí)的方法。

1.2.1 HMM和CRF

這兩種方法實(shí)質(zhì)上是對序列進(jìn)行標(biāo)注,將分詞問題轉(zhuǎn)化為字的分類問題,每個(gè)字有4種詞位(類別):詞首(B)、詞中(M)、詞尾(E)和單字成詞(S)。由字構(gòu)詞的方法并不依賴于事先編制好的詞典,只需對分好詞的語料進(jìn)行訓(xùn)練即可。當(dāng)模型訓(xùn)練好后,就可對新句子進(jìn)行預(yù)測,預(yù)測時(shí)會針對每個(gè)字生成不同的詞位。其中HMM屬于生成式模型,CRF屬于判別式模型。

1.2.2 基于深度學(xué)習(xí)的方法

神經(jīng)網(wǎng)絡(luò)的序列標(biāo)注算法在詞性標(biāo)注、命名實(shí)體識別等問題上取得了優(yōu)秀的進(jìn)展,這些端到端的方法也可以遷移到分詞問題上。與所有深度學(xué)習(xí)的方法一樣,該方法需要較大的訓(xùn)練語料才能體現(xiàn)優(yōu)勢,代表為BiLSTM-CRF。

總結(jié):基于統(tǒng)計(jì)的分詞方法能很好地處理歧義和新詞問題,效果比基于詞典的要好,但該方法需要有大量人工標(biāo)注分好詞的語料作為支撐,訓(xùn)練開銷大,就分詞速度而言不如前一種。

在實(shí)際應(yīng)用中一般是將詞典與統(tǒng)計(jì)學(xué)習(xí)方法結(jié)合起來,既發(fā)揮詞典分詞切分速度快的特點(diǎn),又利用了統(tǒng)計(jì)分詞結(jié)合上下文識別生詞、自動(dòng)消除歧義的優(yōu)點(diǎn)。結(jié)巴分詞正是這一類的代表,下面簡單介紹它的實(shí)現(xiàn)算法。

2.?結(jié)巴分詞原理

官方Github上對所用算法的描述為:

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

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

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

下面逐一介紹:

2.1 構(gòu)造前綴詞典

結(jié)巴分詞首先會依照統(tǒng)計(jì)詞典dict.txt構(gòu)造前綴詞典。dict.txt含有近35萬的詞條,每個(gè)詞條占用一行,其中每一行有3列,第一列為詞條,第二列為對應(yīng)的詞頻,第三列為詞性,構(gòu)造前綴詞典需要用到前兩列。

具體做法為:首先定義一個(gè)空的python字典,然后遍歷dict.txt的每一行,取詞條作為字典的鍵,詞頻作為對應(yīng)的鍵值,然后遍歷該詞條的前綴,如果前綴對應(yīng)的鍵不在字典里,就把該前綴設(shè)為字典新的鍵,對應(yīng)的鍵值設(shè)為0,如果前綴在字典里,則什么都不做。

這樣等遍歷完dict.txt后,前綴詞典就構(gòu)造好了。在構(gòu)造前綴詞典時(shí),會累加統(tǒng)計(jì)詞典里所有詞條的詞頻,累加值等計(jì)算最大概率路徑時(shí)會用到。

2.2 生成有向無環(huán)圖(DAG)

用正則表達(dá)式分割句子后,對每一個(gè)單獨(dú)的子句會生成一個(gè)有向無環(huán)圖。

具體方式為:先定義一個(gè)空的python字典,然后遍歷子句,當(dāng)前子句元素的索引會作為字典的一個(gè)鍵,對應(yīng)的鍵值為一個(gè)python列表(初始為空),然后會以當(dāng)前索引作為子串的起始索引,不斷向后遍歷生成不同的子串,如果子串在前綴詞典里且鍵值不為0的話,則把子串的終止索引添加到列表中。

這樣等遍歷完子句的所有字后,對應(yīng)的DAG就生成好了。(子串的鍵值如果是0,則說明它不是一個(gè)詞條)

2.3 計(jì)算最大概率路徑

DAG的起點(diǎn)到終點(diǎn)會有很多路徑,需要找到一條概率最大的路徑,然后據(jù)此進(jìn)行分詞。可以采用動(dòng)態(tài)規(guī)劃來求解最大概率路徑。

具體為:從子句的最后一個(gè)字開始,倒序遍歷子句的每個(gè)字,取當(dāng)前字對應(yīng)索引在DAG字典中的鍵值(一個(gè)python列表),然后遍歷該列表,當(dāng)前字會和列表中每個(gè)字兩兩組合成一個(gè)詞條,然后基于詞頻計(jì)算出當(dāng)前字到句尾的概率,以python元組的方式保存最大概率,元祖第一個(gè)元素是最大概率的對數(shù),第二個(gè)元素為最大概率對應(yīng)詞條的終止索引。

詞頻可看作DAG中邊的權(quán)重,之所以取概率的對數(shù)是為了防止數(shù)值下溢。有了最大概率路徑,分詞結(jié)果也就隨之確定。

2.4 對未登錄詞采用HMM模型進(jìn)行分詞

當(dāng)出現(xiàn)沒有在前綴詞典里收錄的詞時(shí),會采用HMM模型進(jìn)行分詞。HMM模型有5個(gè)基本組成:觀測序列、狀態(tài)序列、狀態(tài)初始概率、狀態(tài)轉(zhuǎn)移概率和狀態(tài)發(fā)射概率。分詞屬于HMM的預(yù)測問題,即已知觀測序列、狀態(tài)初始概率、狀態(tài)轉(zhuǎn)移概率和狀態(tài)發(fā)射概率的條件下,求狀態(tài)序列。結(jié)巴分詞已經(jīng)內(nèi)置了訓(xùn)練好的狀態(tài)初始概率、狀態(tài)轉(zhuǎn)移概率和狀態(tài)發(fā)射概率。

句子會作為觀測序列,當(dāng)有新句子進(jìn)來時(shí),具體做法為:先通過Viterbi算法求出概率最大的狀態(tài)序列,然后基于狀態(tài)序列輸出分詞結(jié)果(每個(gè)字的狀態(tài)為B、M、E、S之一)。

? ? ? ?至此,結(jié)巴分詞的原理就簡單介紹完了。

下面舉一個(gè)簡單的例子:

假如待分詞的句子為:?“這幾天都在學(xué)自然語言處理”。

首先依據(jù)前綴詞典生成DAG:

{ ?0: [0],

???1: [1, 2],

???2: [2, 3],

???3: [3],

???4: [4],

???5: [5],

???6: [6, 7, 9],

???7: [7],

???8: [8, 9],

???9: [9],

?10: [10, 11],

?11: [11] ?}

句子元素對應(yīng)的索引會作為字典的鍵,對應(yīng)鍵值的第一項(xiàng)與當(dāng)前索引相同,其余項(xiàng)會與當(dāng)前索引組成詞條,這個(gè)詞條在前綴詞典里且對應(yīng)鍵值不為0。

生成的DAG如下:

然后采用動(dòng)態(tài)規(guī)劃求出的最大概率路徑為:

{12: (0, 0),

?11: (-9.073726763747516, 11),

?10: (-8.620554852761583, 11),

? ?9: (-17.35315508178225, 9),

? ?8: (-17.590039287472578, 9),

? ?7: (-27.280113467960604, 7),

? ?6: (-22.70346658402771, 9),

? ?5: (-30.846092652642497, 5),

? ?4: (-35.25970621827743, 4),

? ?3: (-40.95138241952608, 3),

? ?2: (-48.372244833381465, 2),

? ?1: (-50.4870755319817, 2),

? ?0: (-55.92332690525722, 0)}

最大概率路徑按句子索引倒序排列,但分詞時(shí)會從索引0開始順序遍歷句子。

具體做法為:

首先遍歷0,0對應(yīng)的鍵值最后一項(xiàng)為0,即詞的長度為1,遇到長度為1的詞時(shí)(即單字)先不分,繼續(xù)往后看,然后遍歷1,1對應(yīng)的鍵值最后一項(xiàng)為2,即詞的長度為2,這時(shí)會把索引為0的單字作為詞分割出來,然后接著把索引1、2對應(yīng)的詞分割出來,然后遍歷3,3對應(yīng)的鍵值最后一項(xiàng)為3,屬于單字,先不分,索引4、5同理,然后遍歷6,6對應(yīng)的鍵值最后一項(xiàng)為9,即詞的長度為4,注意,這里索引3、4、5對應(yīng)的單字序列(即“都在學(xué)”)如果不在前綴詞典中或者在前綴詞典中但鍵值為0,則會對單字序列采用HMM模型進(jìn)行分詞,否則的話,會對單字序列每個(gè)字進(jìn)行分詞,分好之后把索引6、7、8、9對應(yīng)的詞分割出去,然后遍歷10,10對應(yīng)的鍵值最后一項(xiàng)為11,即詞的長度為2,直接把索引10、11對應(yīng)的詞分割出去,至此分詞結(jié)束。

下面對結(jié)巴分詞的邏輯進(jìn)行總結(jié):

在遇到長度>=2的詞之前會把它前面出現(xiàn)的所有單字保存下來;

如果保存下來的單字序列長度為0,則直接把當(dāng)前詞分割出去;

如果保存下來的單字序列長度為1,則直接把單字作為詞分割出去,然后把后面詞分割出去;

如果保存下來的單字序列長度>1,會分兩種情況:假如單字序列不在前綴詞典中或者在前綴詞典中但鍵值為0,則會對單字序列采用HMM模型進(jìn)行分詞,否則的話,會對單字序列每個(gè)字進(jìn)行分詞。

最后分好的詞為:['這', ?'幾天', ?'都', ?'在', ?'學(xué)', ?'自然語言', ?'處理']。

3.?總結(jié)

本文先對中文分詞方法進(jìn)行了概述,然后講解了結(jié)巴分詞原理。實(shí)際應(yīng)用中,一般將基于詞典的分詞方法和基于統(tǒng)計(jì)的分詞方法相結(jié)合以達(dá)到比較好的效果。除結(jié)巴分詞外,成熟的中文分詞包還有北大中文分詞工具、HanLP等,可多了解比較它們的效果。

總結(jié)

以上是生活随笔為你收集整理的结巴分词优点_中文分词概述及结巴分词原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。