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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

jieba结巴分词--关键词抽取_结巴中文分词原理分析2

發(fā)布時(shí)間:2024/7/23 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jieba结巴分词--关键词抽取_结巴中文分词原理分析2 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:白寧超,工學(xué)碩士,現(xiàn)工作于四川省計(jì)算機(jī)研究院,著有《自然語言處理理論與實(shí)戰(zhàn)》一書,作者公眾號(hào):機(jī)器學(xué)習(xí)和自然語言處理(公眾號(hào)ID:datathinks)


結(jié)巴分詞詳解1中文分詞介紹

中文分詞特點(diǎn)

  • 詞是最小的能夠獨(dú)立活動(dòng)的有意義的語言成分

  • 漢語是以字位單位,不像西方語言,詞與詞之間沒有空格之類的標(biāo)志指示詞的邊界

  • 分詞問題為中文文本處理的基礎(chǔ)性工作,分詞的好壞對(duì)后面的中文信息處理其關(guān)鍵作用

  • 中文分詞的難點(diǎn)?

  • 分詞規(guī)范,詞的定義還不明確 (《統(tǒng)計(jì)自然語言處理》宗成慶)

  • 歧義切分問題,交集型切分問題,多義組合型切分歧義等?
    結(jié)婚的和尚未結(jié)婚的 =>?
    結(jié)婚/的/和/尚未/結(jié)婚/的?
    結(jié)婚/的/和尚/未/結(jié)婚/的

  • 未登錄詞問題有兩種解釋:一是已有的詞表中沒有收錄的詞,二是已有的訓(xùn)練語料中未曾出現(xiàn)過的詞,第二種含義中未登錄詞又稱OOV(Out of Vocabulary)。對(duì)于大規(guī)模真實(shí)文本來說,未登錄詞對(duì)于分詞的精度的影響遠(yuǎn)超歧義切分。一些網(wǎng)絡(luò)新詞,自造詞一般都屬于這些詞。

  • 漢語分詞方法

  • 基于字典、詞庫匹配的分詞方法(基于規(guī)則)?
    基于字符串匹配分詞,機(jī)械分詞算法。將待分的字符串與一個(gè)充分大的機(jī)器詞典中的詞條進(jìn)行匹配。分為正向匹配和逆向匹配;最大長(zhǎng)度匹配和最小長(zhǎng)度匹配;單純分詞和分詞與標(biāo)注過程相結(jié)合的一體化方法。所以常用的有:正向最大匹配,逆向最大匹配,最少切分法。實(shí)際應(yīng)用中,將機(jī)械分詞作為初分手段,利用語言信息提高切分準(zhǔn)確率。優(yōu)先識(shí)別具有明顯特征的詞,以這些詞為斷點(diǎn),將原字符串分為較小字符串再機(jī)械匹配,以減少匹配錯(cuò)誤率,或?qū)⒎衷~與詞類標(biāo)注結(jié)合。

  • 基于詞頻度統(tǒng)計(jì)的分詞方法(基于統(tǒng)計(jì))?
    相鄰的字同時(shí)出現(xiàn)的次數(shù)越多,越有可能構(gòu)成一個(gè)詞語,對(duì)語料中的字組頻度進(jìn)行統(tǒng)計(jì),基于詞的頻度統(tǒng)計(jì)的分詞方法是一種全切分方法。jieba是基于統(tǒng)計(jì)的分詞方法,jieba分詞采用了動(dòng)態(tài)規(guī)劃查找最大概率路徑, 找出基于詞頻的最大切分組合,對(duì)于未登錄詞,采用了基于漢字成詞能力的HMM模型,使用了Viterbi算法。

  • 基于知識(shí)理解的分詞方法。?
    該方法主要基于句法、語法分析,并結(jié)合語義分析,通過對(duì)上下文內(nèi)容所提供信息的分析對(duì)詞進(jìn)行定界,它通常包括三個(gè)部分:分詞子系統(tǒng)、句法語義子系統(tǒng)、總控部分。在總控部分的協(xié)調(diào)下,分詞子系統(tǒng)可以獲得有關(guān)詞、句子等的句法和語義信息來對(duì)分詞歧義進(jìn)行判斷。這類方法試圖讓機(jī)器具有人類的理解能力,需要使用大量的語言知識(shí)和信息。由于漢語語言知識(shí)的籠統(tǒng)、復(fù)雜性,難以將各種語言信息組織成機(jī)器可直接讀取的形式。因此目前基于知識(shí)的分詞系統(tǒng)還處在試驗(yàn)階段。

  • 分詞工具下載

    • hanllp jar包(http://download.csdn.net/download/lb521200200/9686915)

    • ik 分詞 5.0.0版本jar包(http://download.csdn.net/download/youyao816/9676084)

    • ik分詞 1.10.1版本jar包(http://download.csdn.net/download/youyao816/9676082)

    • IKAnalyzer所需的jar包(http://download.csdn.net/download/jingjingchen1014/9659225)

    • jieba分詞包(http://download.csdn.net/download/u014018025/9652341)

    2結(jié)巴中文分詞詳解

    結(jié)巴分詞的算法策略?

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

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

  • 對(duì)于未登錄詞,采用了基于漢字成詞能力的 HMM 模型,使用了 Viterbi 算法

  • 結(jié)巴源碼組織形式

    jieba?

    |--?Changelog?

    |--?extra_dict?

    |?|--?dict.txt.big?

    |?|--?dict.txt.small?

    |?|--?idf.txt.big?

    |?`--?stop_words.txt?

    |--?jieba?

    |?|--?analyse?

    |?|?|--?analyzer.py?

    |?|?|--?idf.txt?

    |?|?|--?__init__.py?

    |?|?|--?textrank.py?

    |?|?`--?tfidf.py?

    |?|--?_compat.py?

    |?|--?dict.txt?

    |?|--?finalseg?

    |?|?|--?__init__.py?

    |?|?|--?prob_emit.p?

    |?|?|--?prob_emit.py?

    |?|?|--?prob_start.p?

    |?|?|--?prob_start.py?

    |?|?|--?prob_trans.p?

    |?|?`--?prob_trans.py?

    |?|--?__init__.py?

    |?|--?__main__.py?

    |?`--?posseg?

    |?|--?char_state_tab.p?

    |?|--?char_state_tab.py?

    |?|--?__init__.py?

    |?|--?prob_emit.p?

    |?|--?prob_emit.py?

    |?|--?prob_start.p?

    |?|--?prob_start.py?

    |?|--?prob_trans.p?

    |?|--?prob_trans.py?

    |?`--?viterbi.py?

    |--?LICENSE?

    |--?setup.py?`--?test?

    |--?*.py?

    |--?parallel?

    |?|--?extract_tags.py?

    |?`--?test*.py?`--?userdict.txt

    代碼行數(shù)統(tǒng)計(jì)(沒有統(tǒng)計(jì)test文件夾下的代碼)

    256?./posseg/prob_start.py?

    5307?./posseg/prob_trans.py?

    304?./posseg/__init__.py?

    89372?./posseg/prob_emit.py?

    61087?./posseg/char_state_tab.py?

    53?./posseg/viterbi.py

    578?./__init__.py?

    4?./finalseg/prob_start.py?

    4?./finalseg/prob_trans.py?

    107?./finalseg/__init__.py?

    35226?./finalseg/prob_emit.py?

    31?./_compat.py?

    50?./__main__.py?

    111?./analyse/tfidf.py?

    37?./analyse/analyzer.py?

    104?./analyse/textrank.py?

    18?./analyse/__init__.py?

    192649?總用量

    其中prob*.py的文件是作者事先訓(xùn)練好的模型參數(shù)(λ=(A,B,π)),如狀態(tài)轉(zhuǎn)移概率、發(fā)射概率等。真正的代碼數(shù)也就:304+53+578+107+31+50+111+37+104+18=1393行(不包括test文件中的代碼),當(dāng)然作者的代碼寫的比較簡(jiǎn)潔。

    jieba分詞模型的參數(shù)數(shù)據(jù)(λ=(A,B,π))是如何生成的??

    即文件finalseg/prob_*.py,中初始化概率,狀態(tài)轉(zhuǎn)移概率,發(fā)射概率怎么算出來的??
    來源主要有兩個(gè): 一個(gè)是網(wǎng)上能下載到的1998人民日?qǐng)?bào)的切分語料還有一個(gè)msr的切分語料; 另一個(gè)是作者自己收集的一些txt小說,用ictclas把他們切分(可能有一定誤差)。 然后用python腳本統(tǒng)計(jì)詞頻?具體詳情。?

    要統(tǒng)計(jì)的主要有三個(gè)概率表

  • 位置轉(zhuǎn)換概率(狀態(tài)轉(zhuǎn)移概率),即B(開頭),M(中間),E(結(jié)尾),S(獨(dú)立成詞)四種狀態(tài)的轉(zhuǎn)移概率;?

  • 位置到單字的發(fā)射概率,比如P(“和”|M)表示一個(gè)詞的中間出現(xiàn)”和”這個(gè)字的概率;?

  • 詞語以某種狀態(tài)開頭的概率,其實(shí)只有兩種,要么是B,要么是S。

  • 3結(jié)巴分詞的思想

    算法實(shí)現(xiàn)分詞?

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

    作者這個(gè)版本中使用前綴字典實(shí)現(xiàn)了詞庫的存儲(chǔ)(即dict.txt文件中的內(nèi)容),而棄用之前版本的trie樹存儲(chǔ)詞庫,想想也是,python中實(shí)現(xiàn)的trie樹是基于dict類型的數(shù)據(jù)結(jié)構(gòu)而且dict中又嵌套dict 類型,這樣嵌套很深,導(dǎo)致內(nèi)存耗費(fèi)嚴(yán)重,詳情見作者把trie樹改成前綴詞典的?緣由, 具體實(shí)現(xiàn)見?gen_pfdict(self, f_name)。接著說DAG有向無環(huán)圖, 生成句子中漢字所有可能成詞情況所構(gòu)成的有向無環(huán)圖。DAG根據(jù)我們生成的前綴字典來構(gòu)造一個(gè)這樣的DAG,對(duì)一個(gè)sentence DAG是以{key:list[i,j…], …}的字典結(jié)構(gòu)存儲(chǔ),其中key是詞的在sentence中的位置,list存放的是在sentence中以key開始且詞sentence[key:i+1]在我們的前綴詞典中 的以key開始i結(jié)尾的詞的末位置i的列表,即list存放的是sentence中以位置key開始的可能的詞語的結(jié)束位置,這樣通過查字典得到詞, 開始位置+結(jié)束位置列表。

    例如:句子“抗日戰(zhàn)爭(zhēng)”生成的DAG中{0:[0,1,3]} 這樣一個(gè)簡(jiǎn)單的DAG, 就是表示0位置開始, 在0,1,3位置都是詞, 就是說0~0,0~1,0~3 即 “抗”,“抗日”,“抗日戰(zhàn)爭(zhēng)”這三個(gè)詞 在dict.txt中是詞。?


    (2)采用了動(dòng)態(tài)規(guī)劃查找最大概率路徑, 找出基于詞頻的最大切分組合;?
    基于上面的DAG利用動(dòng)態(tài)規(guī)劃查找最大概率路徑,這個(gè)理解DP算法的很容易就能明白了。根據(jù)動(dòng)態(tài)規(guī)劃查找最大概率路徑的基本思路就是對(duì)句子從右往左反向計(jì)算最大概率,..依次類推, 最后得到最大概率路徑, 得到最大概率的切分組合(這里滿足最優(yōu)子結(jié)構(gòu)性質(zhì),可以利用反證法進(jìn)行證明),這里代碼實(shí)現(xiàn)中有個(gè)小trick,概率對(duì)數(shù)(可以讓概率相乘的計(jì)算變成對(duì)數(shù)相加,防止相乘造成下溢,因?yàn)樵谡Z料、詞庫中每個(gè)詞的出現(xiàn)概率平均下來還是很小的浮點(diǎn)數(shù)).?
    (3)對(duì)于未登錄詞,采用了基于漢字成詞能力的 HMM 模型,使用了 Viterbi 算法;
    未登錄詞(即jieba中文分詞源碼分析(一))中說的OOV, 其實(shí)就是詞典 dict.txt 中沒有記錄的詞。這里采用了HMM模型,HMM是個(gè)簡(jiǎn)單強(qiáng)大的模型,可以參考這個(gè)網(wǎng)絡(luò)資源進(jìn)行學(xué)習(xí),HMM在實(shí)際應(yīng)用中主要用來解決3類問題:

  • a. 評(píng)估問題(概率計(jì)算問題)?:即給定觀測(cè)序列 O=O1,O2,O3…Ot和模型參數(shù)λ=(A,B,π),怎樣有效計(jì)算這一觀測(cè)序列出現(xiàn)的概率. (Forward-backward算法)

  • b. 解碼問題(預(yù)測(cè)問題)?:即給定觀測(cè)序列 O=O1,O2,O3…Ot和模型參數(shù)λ=(A,B,π),怎樣尋找滿足這種觀察序列意義上最優(yōu)的隱含狀態(tài)序列S。 (viterbi算法,近似算法)

  • c. 學(xué)習(xí)問題?:即HMM的模型參數(shù)λ=(A,B,π)未知,如何求出這3個(gè)參數(shù)以使觀測(cè)序列O=O1,O2,O3…Ot的概率盡可能的大. (即用極大似然估計(jì)的方法估計(jì)參數(shù),Baum-Welch,EM算法)

  • 模型的關(guān)鍵相應(yīng)參數(shù)λ=(A,B,π),經(jīng)過作者對(duì)大量語料的訓(xùn)練, 得到了finalseg目錄下的三個(gè)文件(初始化狀態(tài)概率(π)即詞語以某種狀態(tài)開頭的概率,其實(shí)只有兩種,要么是B,要么是S。這個(gè)就是起始向量, 就是HMM系統(tǒng)的最初模型狀態(tài),對(duì)應(yīng)文件prob_start.py;隱含狀態(tài)概率轉(zhuǎn)移矩A 即字的幾種位置狀態(tài)(BEMS四個(gè)狀態(tài)來標(biāo)記, B是開始begin位置, E是end, 是結(jié)束位置, M是middle, 是中間位置, S是single, 單獨(dú)成詞的位置)的轉(zhuǎn)換概率,對(duì)應(yīng)文件prob_trans.py;觀測(cè)狀態(tài)發(fā)射概率矩陣B 即位置狀態(tài)到單字的發(fā)射概率,比如P(“狗”|M)表示一個(gè)詞的中間出現(xiàn)”狗”這個(gè)字的概率,對(duì)應(yīng)文件prob_emit.py)。

    4參考文獻(xiàn)
  • 中文分詞之HMM模型詳解

  • HMM相關(guān)文章

  • 結(jié)巴分詞GitHub源碼

  • 作者:白寧超,工學(xué)碩士,現(xiàn)工作于四川省計(jì)算機(jī)研究院,研究方向是自然語言處理和機(jī)器學(xué)習(xí)。曾參與國(guó)家自然基金項(xiàng)目和四川省科技支撐計(jì)劃等多個(gè)省級(jí)項(xiàng)目。著有《自然語言處理理論與實(shí)戰(zhàn)》一書。

    作者博客官網(wǎng):

    https://bainingchao.github.io/

    作者公眾號(hào),歡迎關(guān)注:

    機(jī)器學(xué)習(xí)和自然語言處理公眾號(hào)ID:datathinks

    總結(jié)

    以上是生活随笔為你收集整理的jieba结巴分词--关键词抽取_结巴中文分词原理分析2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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