pyhanlp 共性分析与短语提取
簡(jiǎn)介
HanLP中的詞語(yǔ)提取是基于互信息與信息熵。想要計(jì)算互信息與信息熵有限要做的是 文本分詞進(jìn)行共性分析。在作者的原文中,有幾個(gè)問題,為了便于說明,這里首先給出短語(yǔ)提取的原理。在文末在給出pyhanlp的調(diào)用代碼。
共性分析
“”"
一階共性分析,也就是詞頻統(tǒng)計(jì) 信息=1 先進(jìn)=1 圖像=1二階共性分析 信息→算法= tf=1 mi=8.713143111007891 le=0.0 re=0.0 score=NaN 先進(jìn)→視頻= tf=1 mi=6.451079180589085 le=0.0 re=0.0 score=NaN 圖像→技術(shù)= tf=1 mi=7.207932334602241 le=0.0 re=0.0 score=NaN 圖形→圖像= tf=1 mi=12.339379582248355 le=0.0 re=0.0 score=NaN 處理→方面= tf=1 mi=3.9000932023763872 le=0.0 re=0.0 score=NaN三階共性分析 信息→算法→處理= tf=1 mi=0.0 le=0.0 re=0.0 先進(jìn)→視頻→處理= tf=1 mi=0.0 le=0.0 re=0.0 圖像→技術(shù)→信息= tf=1 mi=0.0 le=0.0 re=0.0“”"
互信息mi,左熵lr,右熵re,詳細(xì)解釋見下文
信息論中的互信息
一般而言,信道中總是存在著噪聲和干擾,信源發(fā)出消息x,通過信道后信宿只可能收到由于干擾作用引起的某種變形的y。信宿收到y(tǒng)后推測(cè)信源發(fā)出x的概率,這一過程可由后驗(yàn)概率p(x|y)來(lái)描述。相應(yīng)地,信源發(fā)出x的概率p(x)稱為先驗(yàn)概率。我們定義x的后驗(yàn)概率與先驗(yàn)概率比值的對(duì)數(shù)為y對(duì)x的互信息量(簡(jiǎn)稱互信息)。
根據(jù)熵的連鎖規(guī)則,有
因此,
H(X) - H(X|Y) = H(Y) - H(Y|X)這個(gè)差叫做X和Y的互信息,記作I(X;Y)。
其中P(x) 為 單詞x出現(xiàn)的次數(shù)與總單詞數(shù)的比值(數(shù)學(xué)含義為單詞x出現(xiàn)的概率)。而P(x,y)則為二階短語(yǔ)x->y 出現(xiàn)的次數(shù)與所有二階短語(yǔ)的次數(shù)。
比如在剛剛的說明中,假設(shè)默認(rèn)分詞方式將“后驗(yàn)概率”分為“后驗(yàn)”,“概率” 兩個(gè)大短語(yǔ),則后驗(yàn)->概率 這個(gè)二階短語(yǔ)一共出現(xiàn)了兩次,假設(shè)所有二階短語(yǔ)合共有一百個(gè),則p(后驗(yàn)->概率) = 2 /100 = 1/ 50。
要注意的是hanlp作者個(gè)的文章《基于互信息和左右信息熵的短語(yǔ)提取識(shí)別》中。公式與表標(biāo)準(zhǔn)定義的互信息并不一致,少乘了一個(gè)p(x,y),查看源碼發(fā)現(xiàn)作者確實(shí)是按照沒有p(x,y)的公式進(jìn)行計(jì)算的。不過使用簡(jiǎn)化公式計(jì)算似乎也是沒有問題的。此處還可以參考大魚的一篇文章
信息熵
利用信息熵提取
熵這個(gè)術(shù)語(yǔ)表示隨機(jī)變量不確定性的量度。具體表述如下: 一般地, 設(shè)X 是取有限個(gè)值的隨機(jī)變量( 或者說X 是有限個(gè)離散事件的概率場(chǎng)) , X 取值x 的概率為P ( x ) , 則X 的熵定義為:
左右熵是指多字詞表達(dá)的左邊界的熵和右邊界的熵。左右熵的公式如下:
具體計(jì)算方法是,以左熵為例,對(duì)一個(gè)串左邊所有可能的詞以及詞頻,計(jì)算信息熵,然后求和。
比如算法->工程師這個(gè)二階短語(yǔ),其左邊可能有很多接續(xù),比如“從事算法工程師”和“成為算法工程師”,當(dāng)其接續(xù)多了,左熵也就會(huì)更高。這個(gè)二階短語(yǔ)是一個(gè)二階短語(yǔ)的可能性就更大一些。
但是這里存在一個(gè)問題,賈母默認(rèn)分詞與停用詞效果不好,可能會(huì)將“abcd”分成“a,b,c,d”然后去掉“c”這種停用詞,這樣“a,b,d”則可能被作為一個(gè)三階短語(yǔ)發(fā)現(xiàn)。在HanLP中因?yàn)橹荒馨l(fā)現(xiàn)二階短語(yǔ),所以可能因?yàn)槿サ簟癮,b”中的一個(gè)導(dǎo)致無(wú)法發(fā)現(xiàn)二階短語(yǔ)這種情況出現(xiàn),但是這只存在著理論上的可能。
共性分析
共性 是指 文本中詞語(yǔ)共同出現(xiàn)的情況。在hanlp中如果直接調(diào)用共性分析模塊不僅可以獲取詞頻統(tǒng)計(jì),還可以一同給出互信息mi,左熵lr,右熵re。以下是pyhanlp中的使用。
from pyhanlp import * # 共性分析 Occurrence = JClass("com.hankcs.hanlp.corpus.occurrence.Occurrence") PairFrequency = JClass("com.hankcs.hanlp.corpus.occurrence.PairFrequency") TermFrequency = JClass("com.hankcs.hanlp.corpus.occurrence.TermFrequency") TriaFrequency = JClass("com.hankcs.hanlp.corpus.occurrence.TriaFrequency")occurrence = Occurrence() occurrence.addAll("在計(jì)算機(jī)音視頻和圖形圖像技術(shù)等二維信息算法處理方面目前比較先進(jìn)的視頻處理算法") occurrence.compute()print("一階共性分析,也就是詞頻統(tǒng)計(jì)") unigram = occurrence.getUniGram() for entry in unigram.iterator():term_frequency = entry.getValue()print(term_frequency) print()print('二階共性分析') bigram = occurrence.getBiGram() for entry in bigram.iterator():pair_frequency = entry.getValue()if pair_frequency.isRight():print(pair_frequency) print()print('三階共性分析') trigram = occurrence.getTriGram() for entry in trigram.iterator():tria_frequency = entry.getValue()if tria_frequency.isRight():print(tria_frequency) 一階共性分析,也就是詞頻統(tǒng)計(jì) 信息=1 先進(jìn)=1 圖像=1 圖形=1 處理=2 技術(shù)=1 方面=1 比較=1 目前=1 算法=2 視頻=2 計(jì)算機(jī)=1 音=1二階共性分析 信息→算法= tf=1 mi=8.713143111007891 le=0.0 re=0.0 score=NaN 先進(jìn)→視頻= tf=1 mi=6.451079180589085 le=0.0 re=0.0 score=NaN 圖像→技術(shù)= tf=1 mi=7.207932334602241 le=0.0 re=0.0 score=NaN 圖形→圖像= tf=1 mi=12.339379582248355 le=0.0 re=0.0 score=NaN 處理→方面= tf=1 mi=3.9000932023763872 le=0.0 re=0.0 score=NaN 處理→算法= tf=1 mi=9.104492277137243 le=0.0 re=0.0 score=NaN 技術(shù)→信息= tf=1 mi=3.8693779358135583 le=0.0 re=0.0 score=NaN 方面→目前= tf=1 mi=12.682109172098322 le=0.0 re=0.0 score=NaN 比較→先進(jìn)= tf=1 mi=5.906980690246837 le=0.0 re=0.0 score=NaN 目前→比較= tf=1 mi=13.23476122866847 le=0.0 re=0.0 score=NaN 算法→處理= tf=1 mi=9.104492277137243 le=0.0 re=0.0 score=NaN 視頻→圖形= tf=1 mi=10.041190100727349 le=0.0 re=0.0 score=NaN 視頻→處理= tf=1 mi=4.9968437492887805 le=0.0 re=0.0 score=NaN 計(jì)算機(jī)→音= tf=1 mi=10.441320189120539 le=0.0 re=0.0 score=NaN 音→視頻= tf=1 mi=8.362759316806295 le=0.0 re=0.0 score=NaN三階共性分析 信息→算法→處理= tf=1 mi=0.0 le=0.0 re=0.0 先進(jìn)→視頻→處理= tf=1 mi=0.0 le=0.0 re=0.0 圖像→技術(shù)→信息= tf=1 mi=0.0 le=0.0 re=0.0 圖形→圖像→技術(shù)= tf=1 mi=0.0 le=0.0 re=0.0 處理→方面→目前= tf=1 mi=0.0 le=0.0 re=0.0 技術(shù)→信息→算法= tf=1 mi=0.0 le=0.0 re=0.0 方面→目前→比較= tf=1 mi=0.0 le=0.0 re=0.0 比較→先進(jìn)→視頻= tf=1 mi=0.0 le=0.0 re=0.0 目前→比較→先進(jìn)= tf=1 mi=0.0 le=0.0 re=0.0 算法→處理→方面= tf=1 mi=0.0 le=0.0 re=0.0 視頻→圖形→圖像= tf=1 mi=0.0 le=0.0 re=0.0 視頻→處理→算法= tf=1 mi=0.0 le=0.0 re=0.0 計(jì)算機(jī)→音→視頻= tf=1 mi=0.0 le=0.0 re=0.0 音→視頻→圖形= tf=1 mi=0.0 le=0.0 re=0.0短語(yǔ)提取
- 說明
- 內(nèi)部采用MutualInformationEntropyPhraseExtractor實(shí)現(xiàn),用戶可以直接調(diào)用MutualInformationEntropyPhraseExtractor.extractPhrase(text, size)。
- 算法詳解
- 《基于互信息和左右信息熵的短語(yǔ)提取識(shí)別》
該功能的實(shí)現(xiàn)依賴于共性分析,詳細(xì)內(nèi)容可以查看《基于互信息和左右信息熵的短語(yǔ)提取識(shí)別》
pyhan中的短語(yǔ)提取
# 短語(yǔ)提取 text = """算法工程師\n算法(Algorithm)是一系列解決問題的清晰指令,也就是說,能夠?qū)σ欢ㄒ?guī)范的輸入,在有限時(shí)間內(nèi)獲得所要求的輸出。如果一個(gè)算法有缺陷,或不適合于某個(gè)問題,執(zhí)行這個(gè)算法將不會(huì)解決這個(gè)問題。不同的算法可能用不同的時(shí)間、空間或效率來(lái)完成同樣的任務(wù)。一個(gè)算法的優(yōu)劣可以用空間復(fù)雜度與時(shí)間復(fù)雜度來(lái)衡量。算法工程師就是利用算法處理事物的人。\n1職位簡(jiǎn)介\n算法工程師是一個(gè)非常高端的職位;\n專業(yè)要求:計(jì)算機(jī)、電子、通信、數(shù)學(xué)等相關(guān)專業(yè);\n學(xué)歷要求:本科及其以上的學(xué)歷,大多數(shù)是碩士學(xué)歷及其以上;\n語(yǔ)言要求:英語(yǔ)要求是熟練,基本上能閱讀國(guó)外專業(yè)書刊;\n必須掌握計(jì)算機(jī)相關(guān)知識(shí),熟練使用仿真工具M(jìn)ATLAB等,必須會(huì)一門編程語(yǔ)言。\n2研究方向\n視頻算法工程師、圖像處理算法工程師、音頻算法工程師 通信基帶算法工程師\n\n3目前國(guó)內(nèi)外狀況\n目前國(guó)內(nèi)從事算法研究的工程師不少,但是高級(jí)算法工程師卻很少,是一個(gè)非常緊缺的專業(yè)工程師。算法工程師根據(jù)研究領(lǐng)域來(lái)分主要有音頻/視頻算法處理、圖像技術(shù)方面的二維信息算法處理和通信物理層、雷達(dá)信號(hào)處理、生物醫(yī)學(xué)信號(hào)處理等領(lǐng)域的一維信息算法處理。\n在計(jì)算機(jī)音視頻和圖形圖像技術(shù)等二維信息算法處理方面目前比較先進(jìn)的視頻處理算法:機(jī)器視覺成為此類算法研究的核心;另外還有2D轉(zhuǎn)3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),運(yùn)動(dòng)估計(jì)運(yùn)動(dòng)補(bǔ)償算法(Motion estimation/Motion Compensation),去噪算法(Noise Reduction),縮放算法(scaling),銳化處理算法(Sharpness),超分辨率算法(Super Resolution),手勢(shì)識(shí)別(gesture recognition),人臉識(shí)別(face recognition)。\n在通信物理層等一維信息領(lǐng)域目前常用的算法:無(wú)線領(lǐng)域的RRM、RTT,傳送領(lǐng)域的調(diào)制解調(diào)、信道均衡、信號(hào)檢測(cè)、網(wǎng)絡(luò)優(yōu)化、信號(hào)分解等。\n" +另外數(shù)據(jù)挖掘、互聯(lián)網(wǎng)搜索算法也成為當(dāng)今的熱門方向。\n算法工程師逐漸往人工智能方向發(fā)展。"""phraseList = HanLP.extractPhrase(text, 10) print(phraseList); [算法工程師, 算法處理, 一維信息, 算法研究, 圖像技術(shù), 信號(hào)處理, 信息算法, 處理算法, 視頻算法, 通信物理]總結(jié)
以上是生活随笔為你收集整理的pyhanlp 共性分析与短语提取的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyhanlp 提取关键词、自动摘要
- 下一篇: pyhanlp 词性标注(正篇)