原文鏈接:https://blog.csdn.net/weixin_43378396/article/details/103848628
新詞發(fā)現(xiàn)是 NLP 的基礎(chǔ)任務(wù)之一,通過(guò)對(duì)已有語(yǔ)料進(jìn)行挖掘,從中識(shí)別出新詞。新詞發(fā)現(xiàn)也可稱為未登錄詞識(shí)別,嚴(yán)格來(lái)講,新詞是指隨時(shí)代發(fā)展而新出現(xiàn)或舊詞新用的詞語(yǔ)。同時(shí),我認(rèn)為特定領(lǐng)域的專有名詞也可歸屬于新詞的范疇。何出此言呢?通常我們會(huì)很容易找到通用領(lǐng)域的詞表,但要找到某個(gè)具體領(lǐng)域的專有名詞則非常困難,因此特定領(lǐng)域的專有名詞相對(duì)于通用領(lǐng)域的詞語(yǔ)即為新詞。換言之,“新”并非只是時(shí)間上的概念,同樣可以遷移到領(lǐng)域或空間上。因此,新詞發(fā)現(xiàn)不僅可以挖掘隨時(shí)間變化而產(chǎn)生的新詞,也可以挖掘不同領(lǐng)域的專有名詞。
接下來(lái),讓我們開始一場(chǎng)新詞發(fā)現(xiàn)的探索之旅吧。首先,對(duì)于“新詞發(fā)現(xiàn)”這個(gè)標(biāo)題,我們可將其拆分為“發(fā)現(xiàn)”和“新詞”兩個(gè)步驟:
“發(fā)現(xiàn)”:依據(jù)某種手段或方法,從文本中挖掘詞語(yǔ),組成新詞表; “新詞”:借助挖掘得到的新詞表,和之前已有的舊詞表進(jìn)行比對(duì),不在舊詞表中的詞語(yǔ)即可認(rèn)為是新詞。 “新詞發(fā)現(xiàn)”的難點(diǎn)主要在于“發(fā)現(xiàn)”的過(guò)程——如何從文本中挖掘到詞語(yǔ)?那么有辦法回避這個(gè)問(wèn)題嗎?讓我們思索一下“新詞”的過(guò)程:比對(duì)挖掘得到的新詞表和舊詞表,從代碼的角度來(lái)說(shuō)。
for 新詞 in 新詞表:if 新詞 not in 舊詞表:print("這是新詞")
簡(jiǎn)單地講,只要不是舊詞就是新詞唄,那么我們?cè)趯?duì)文本進(jìn)行分詞時(shí),假設(shè)分詞工具可以得到舊詞,那么分詞工具不能切分、切分有誤或切分后不在舊詞表中的詞語(yǔ)不就是新詞了嗎?這就是“新詞發(fā)現(xiàn)”的傳統(tǒng)做法——基于分詞的方法。
基于分詞的方法 先對(duì)文本進(jìn)行分詞,余下未能成功匹配的片段(分詞后的中文、連續(xù)的數(shù)字、連續(xù)的英文)就是新詞。下面將以這篇文章為例:
使用經(jīng)過(guò)汽車語(yǔ)料訓(xùn)練后的 pkuseg 分詞器效果太好了,不利于后續(xù)的演示與說(shuō)明,所以最終選擇使用 jieba 分詞(捂臉哭.jpg)。
【問(wèn)題 1】:怎么去判斷片段是否成功匹配了呢?
示例 1:內(nèi)飾方面,兩款新車配色上采用了全新的赭黑內(nèi)飾,
分詞 1:['內(nèi)飾', '兩款', '新車', '配色', '采用', '全新', '赭', '黑', '內(nèi)飾']
示例 2:動(dòng)力方面,兩款新車?yán)^續(xù)搭載1.5L自然吸氣發(fā)動(dòng)機(jī) 分詞 2:[‘動(dòng)力’, ‘兩款’, ‘新車’, ‘搭載’, ‘1.5’, ‘L’, ‘自然’, ‘吸氣’, ‘發(fā)動(dòng)機(jī)’]
對(duì)于問(wèn)題 1,我們可以將分詞后的單個(gè)字作為未成功匹配片段,例如示例 1 中的“赭黑”,jieba 分詞后得到 [“赭”, “黑”],將這連續(xù)的兩個(gè)單字整合到一塊,即可獲得新詞“赭黑”。同理,我們可以將示例 2 中的 “1.5” 視為一個(gè)單獨(dú)的片段,“L” 也為一個(gè)單獨(dú)的匹配,將其整合為“1.5L”。但如果僅僅只將單個(gè)字作為未成功匹配片段,則會(huì)漏掉較多的新詞,見下方問(wèn)題 2。
【問(wèn)題 2】:對(duì)于一些較長(zhǎng)的新詞,例如“人艱不拆”,使用 jieba 分詞得到 [“人艱”, “不”, “拆”],此時(shí)的未成功匹配片段就不全是單字。換言之,新詞中包含詞語(yǔ)。
對(duì)于問(wèn)題 2,我們可以找一份常用詞表(該詞表要盡可能齊全),然后借助這份詞表去過(guò)濾分詞后得到的常用詞,最后余下的就是新詞。假設(shè)“人艱”不在常用詞表中,那么過(guò)濾后仍會(huì)留下 [“人艱”, “不”, “拆”],此時(shí)我們就可以將這些連續(xù)的片段進(jìn)行整合,得到“人艱不拆”。但這樣就完美了嗎?沒有,還有不少遺漏的新詞,見下方問(wèn)題 3。
【問(wèn)題 3】:如果新詞中包含的詞語(yǔ)在常用詞表中該怎么辦?該問(wèn)題相當(dāng)于在問(wèn)題 3 的基礎(chǔ)上提出了——新詞中包含常用詞語(yǔ)。例如“一帶一路”,使用 jieba 分詞可得到 [“一帶”, “一路”]。而對(duì)于問(wèn)題 3 則比較難處理,需要更多繁復(fù)的規(guī)則去做后處理。
此外,新詞發(fā)現(xiàn)的目標(biāo)是挖掘文本中的新詞,或者說(shuō)未登錄詞,來(lái)幫助后續(xù)的分詞等工作。而基于分詞的方法則相當(dāng)于從目標(biāo)反推過(guò)程,這種方法未嘗不可行,但分詞的準(zhǔn)確性本身依賴于詞庫(kù)的完整性,如果詞庫(kù)中根本沒有新詞,又怎么能信任分詞的結(jié)果呢?自然,最終得到的效果也不會(huì)特別好。
通過(guò)上述的分析,可以知道傳統(tǒng)的方法存在許多的掣肘,那么有什么新的方法嗎?通過(guò)查閱資料以及一些思考,在新詞發(fā)現(xiàn)方面,目前主要有基于規(guī)則和基于統(tǒng)計(jì)兩種方法。接下來(lái),讓我們具體談?wù)勥@兩種方法。
基于規(guī)則的方法
根據(jù)新詞的構(gòu)詞特征或外型特征建立規(guī)則庫(kù)、專業(yè)詞庫(kù)或模式庫(kù),然后通過(guò)規(guī)則匹配發(fā)現(xiàn)新詞。因此,我們需要對(duì)已有的語(yǔ)料有著足夠的了解,繼而從語(yǔ)料中抽取固定的模式來(lái)匹配和發(fā)現(xiàn)新詞。例如,在一份汽車領(lǐng)域的語(yǔ)料中抽取所需的汽車新詞。
從上面的汽車文章中可以發(fā)現(xiàn),頓號(hào)(、)前后的詞語(yǔ)通常會(huì)是汽車領(lǐng)域的專有名詞,這正是我們需要的新詞。故而,我們可以通過(guò)編寫正則表達(dá)式的方式,從文章中將這些內(nèi)容抽取出來(lái),并依據(jù)相應(yīng)的規(guī)則作清洗和過(guò)濾。
【優(yōu)點(diǎn)】:新詞挖掘的效果非常好,像“支持CarPlay+CarLife雙機(jī)互聯(lián)”這一類夾雜中文、英文和標(biāo)點(diǎn)符號(hào)的詞語(yǔ)(短語(yǔ))也能抽取出來(lái)。
【缺點(diǎn)】:與領(lǐng)域耦合過(guò)深,無(wú)法將建立的規(guī)則庫(kù)、專業(yè)詞庫(kù)以及模式庫(kù)遷移到其他領(lǐng)域中,需要根據(jù)領(lǐng)域內(nèi)容重新搭建。甚至與特定類型、出版社、渠道的文章耦合過(guò)深,例如汽車之家的汽車文章和易車的汽車文章的格式就不同,需要為不同的數(shù)據(jù)源搭建相應(yīng)的規(guī)則庫(kù)。一旦數(shù)據(jù)源的文章格式變動(dòng),規(guī)則庫(kù)也需要作相應(yīng)的修改。無(wú)論是搭建還是后續(xù)的維護(hù),都需要大量的人工成本。
基于統(tǒng)計(jì)的方法
基于統(tǒng)計(jì)的方法根據(jù)有無(wú)標(biāo)注數(shù)據(jù)可分為有監(jiān)督方法和無(wú)監(jiān)督方法。
有監(jiān)督方法
有監(jiān)督方法利用標(biāo)注語(yǔ)料,將新詞發(fā)現(xiàn)看作分類或者序列標(biāo)注問(wèn)題:
基于文本片段的某些統(tǒng)計(jì)量,以此作為特征訓(xùn)練二分類模型; 基于序列信息進(jìn)行序列標(biāo)注直接得到新詞,或?qū)Φ玫降男略~再進(jìn)行判定。
通常可以用 HMM、CRF、SVM 等機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)。但是在實(shí)際應(yīng)用中,獲取大量的標(biāo)注語(yǔ)料數(shù)據(jù)是非常困難的一件事情,并且既然已經(jīng)有了手工標(biāo)注的數(shù)據(jù),那么直接把標(biāo)注得到的新詞加入到新詞詞庫(kù)就好了,又何必建模來(lái)解決呢?所以,探索無(wú)監(jiān)督的挖掘方法在新詞發(fā)現(xiàn)領(lǐng)域中更有價(jià)值。
無(wú)監(jiān)督方法
不依賴于任何已有的詞庫(kù)、分詞工具和標(biāo)注語(yǔ)料,僅僅根據(jù)詞的共同特征,利用統(tǒng)計(jì)策略將一段大規(guī)模語(yǔ)料中可能成詞的文本片段全部提取出來(lái),然后再利用語(yǔ)言知識(shí)排除不是新詞語(yǔ)的“無(wú)用片段”或者計(jì)算相關(guān)度,尋找相關(guān)度最大的字與字的組合。最后,把所有抽取得到的詞和已有的詞庫(kù)進(jìn)行比較,就能得到新詞。
實(shí)際上,利用統(tǒng)計(jì)策略對(duì)語(yǔ)料進(jìn)行切分,形成若干塊文本片段,這相當(dāng)于一次粗淺的分詞。接下來(lái),再對(duì)這些文本片段作一次清洗與過(guò)濾,余下的文本片段即可作為新詞詞庫(kù)。因此,上述過(guò)程可簡(jiǎn)化為兩個(gè)步驟:
構(gòu)建詞庫(kù) 新詞比對(duì)
目前已有的大多數(shù)基于統(tǒng)計(jì)的新詞發(fā)現(xiàn)方案和博客,其根本思想都是源于 matrix67 纂寫的《互聯(lián)網(wǎng)時(shí)代的社會(huì)語(yǔ)言學(xué):基于SNS的文本數(shù)據(jù)挖掘》。下文所講的內(nèi)容也未能跳離這個(gè)框架,只是在前人的基礎(chǔ)上增加了些許自身的理解與嘗試,以及努力嘗試將實(shí)現(xiàn)步驟呈現(xiàn)給讀者。
構(gòu)建詞庫(kù)
怎么樣的文本片段才能作為一個(gè)詞語(yǔ)?或者說(shuō)作為一個(gè)詞語(yǔ)的文本片段需要滿足什么條件 。
接下來(lái),讓我們依次探討這三個(gè)條件對(duì)判斷成詞的作用與意義。
詞頻
首先,被選中的文本片段要在語(yǔ)料中出現(xiàn)多次,目的是為了排除偶然情況,例如筆誤的情況。因此,我們可以通過(guò)設(shè)置一個(gè)閾值,將頻數(shù)超過(guò)該閾值的文本片段提取出來(lái),作為當(dāng)前語(yǔ)料的詞匯輸出。
但光憑詞頻不足以判斷,一個(gè)經(jīng)常出現(xiàn)的文本片段有可能不是一個(gè)詞,而是多個(gè)詞構(gòu)成的詞組,例如“的電影”、“在北京”等詞組。這些詞組并不是我們想要的詞語(yǔ),我們想要的是“電影院”之類的詞語(yǔ)。此時(shí)就需要凝聚程度來(lái)幫助我們作進(jìn)一步的判斷。
凝聚程度
凝聚程度用以衡量相鄰字組合成詞語(yǔ)的程度,如果兩個(gè)人經(jīng)常待在一起,我們往往會(huì)認(rèn)為他們的關(guān)系很親密,而字與字之間的“親密關(guān)系”則通過(guò)凝聚程度(其他文獻(xiàn)中稱為“凝合程度”)來(lái)表示。
凝聚程度要如何進(jìn)行計(jì)算呢?詞組的出現(xiàn)概率除以構(gòu)成詞組的各個(gè)詞語(yǔ)的出現(xiàn)概率的乘積,最后對(duì)結(jié)果做一次對(duì)數(shù)處理(可以理解為對(duì)計(jì)算得到的概率值組了一次映射)。
PMI(x,y)=log?2p(x,y)p(x)p(y)P M I(x, y)=\log _{2} \frac{p(x, y)}{p(x) p(y)} </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mord mathdefault" style="margin-right: 0.10903em;">M</span><span class="mord mathdefault" style="margin-right: 0.07847em;">I</span><span class="mopen">(</span><span class="mord mathdefault">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 2.363em; vertical-align: -0.936em;"></span><span class="mop"><span class="mop">lo<span style="margin-right: 0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.206968em;"><span class="" style="top: -2.45586em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.24414em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.427em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord mathdefault">x</span><span class="mclose">)</span><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="mclose">)</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord mathdefault">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="mclose">)</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.936em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></span></p>
p(x, y) <= p(x)、p(x, y) <= p(y),且 p(x) < 0、p(y) < 0,因此:
p(x,y)p(x)p(y)≥1\frac{p(x, y)}{p(x)p(y)} \geq 1 </span><span class="katex-html"><span class="base"><span class="strut" style="height: 2.363em; vertical-align: -0.936em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.427em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord mathdefault">x</span><span class="mclose">)</span><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="mclose">)</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord mathdefault">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="mclose">)</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.936em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.64444em; vertical-align: 0em;"></span><span class="mord">1</span></span></span></span></span></span></p>
對(duì)于 log 函數(shù)而言,真數(shù) >= 1,函數(shù)值 >= 0,加上 log 函數(shù)相當(dāng)于將原本的函數(shù)值映射到 [0, +∞] 區(qū)間,且增速放緩。
仍然以“的電影”和“電影院”為例。
電影:0.01,院:0.01,電影院:0.001
P(電影院)/P(電影)P(院):0.001 / (0.01 * 0.01) = 10
電影:0.01,的:0.2,的電影:0.002 P(的電影)/P(的)P(電影):0.002 / (0.01 * 0.2) = 1
上面的結(jié)果表明“電影院”更可能是一個(gè)有意義的搭配,而“的電影”則更像是“的”和“電影”這兩個(gè)成分偶然拼到一塊。
凝聚程度的計(jì)算方式很大程度上受到文本切分的影響,因此我將這部分的內(nèi)容移到了文本切分部分。
自由程度
詞語(yǔ)作為漢語(yǔ)中的一個(gè)基本語(yǔ)義單元,具備一個(gè)顯著的特征——可以靈活地應(yīng)用到不同的場(chǎng)景中。例如“機(jī)器學(xué)習(xí)”,上下文可以搭配很多動(dòng)詞和名詞“學(xué)習(xí)人工智能知識(shí)”、“從事人工智能行業(yè)”。但對(duì)于“人工智”這個(gè)詞語(yǔ)來(lái)說(shuō),上文依然可以搭配很多詞語(yǔ),下文卻基本上只能搭配“能”。那么,我們可以認(rèn)為“人工智”不是一個(gè)完整的詞語(yǔ)。
換個(gè)角度來(lái)看,詞語(yǔ)的自由程度可以理解為詞語(yǔ)之間的相關(guān)性弱,換言之,詞語(yǔ)的獨(dú)立性高。蘇劍林大佬纂寫的《無(wú)監(jiān)督構(gòu)建詞庫(kù):更快更好的新詞發(fā)現(xiàn)算法》 一文中提到:
為什么要分詞?人本來(lái)就是按照字來(lái)書寫和理解的呀?
當(dāng)模型的記憶和擬合能力足夠強(qiáng)(或者簡(jiǎn)單點(diǎn),足夠智能)的時(shí)候,我們完全可以不用分詞的,直接基于字的模型就可以做,比如基于字的文本分類、問(wèn)答系統(tǒng)等,早已有人在研究。但是,即便這些模型能夠成功,也會(huì)因?yàn)槟P蛷?fù)雜而導(dǎo)致效率下降,因此,很多時(shí)候(尤其是生產(chǎn)環(huán)境中),我們會(huì)尋求更簡(jiǎn)單、更高效的方案。
什么方案最高效?以文本分類為例,估計(jì)最簡(jiǎn)單高效的方案就是“樸素貝葉斯分類器”了,類似的,比較現(xiàn)代的是 FastText,它可以看作是“樸素貝葉斯”的“神經(jīng)網(wǎng)絡(luò)版”。要注意,樸素貝葉斯基于一個(gè)樸素的假設(shè):特征之間相互獨(dú)立。這個(gè)假設(shè)越成立,樸素貝葉斯的效果就越好。然而,對(duì)于文本來(lái)說(shuō),顯然上下文緊密聯(lián)系,這個(gè)假設(shè)還成立嗎?
注意到,當(dāng)特征之間明顯不獨(dú)立的時(shí)候,可以考慮將特征組合之后,使得特征之間的相關(guān)性減弱,再用樸素貝葉斯。比如,對(duì)于文本,如果以字為特征,則樸素假設(shè)顯然不成立,如“我喜歡數(shù)學(xué)”中的“喜”和“歡”、“數(shù)”和“學(xué)”都明顯相關(guān),這時(shí)候我們考慮將特征進(jìn)行組合,得到“我/喜歡/數(shù)學(xué)”,這樣三個(gè)片段之間的相關(guān)性就沒有那么強(qiáng)了,因此可以考慮用上述結(jié)果。
可以發(fā)現(xiàn),這個(gè)過(guò)程很像分詞,或者反過(guò)來(lái)說(shuō),分詞的主要目的之一,就是將句子分為若干個(gè)相關(guān)性比較弱的部分,便于進(jìn)一步處理。
知道了什么是自由程度,以及為什么自由程度可以作為新詞的評(píng)估指標(biāo),那么我們?cè)撊绾斡?jì)算當(dāng)前文本片段的自由程度呢?簡(jiǎn)單地講,如何衡量當(dāng)前文本片段的上下文可搭配詞語(yǔ)的豐富程度呢?
matrix67 提出可以使用信息熵 來(lái)進(jìn)行度量,令當(dāng)前文本片段為 x,其上文的詞語(yǔ)為
yly_l</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.336108em;"><span class="" style="top: -2.55em; margin-left: -0.03588em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right: 0.01968em;">l</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>,下文的詞語(yǔ)為 <span class="katex--inline"><span class="katex"><span class="katex-mathml">yry_r</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.151392em;"><span class="" style="top: -2.55em; margin-left: -0.03588em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right: 0.02778em;">r</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>。<br> <span class="katex--display"><span class="katex-display"><span class="katex"><span class="katex-mathml">H(y∣x)=?∑yp(y∣x)logp(y∣x)H(y|x) = -\sum_y p(y|x)log p(y|x) </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathdefault" style="margin-right: 0.08125em;">H</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="mord">∣</span><span class="mord mathdefault">x</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 2.43612em; vertical-align: -1.38611em;"></span><span class="mord">?</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.05001em;"><span class="" style="top: -1.89999em; margin-left: 0em;"><span class="pstrut" style="height: 3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right: 0.03588em;">y</span></span></span><span class="" style="top: -3.05001em;"><span class="pstrut" style="height: 3.05em;"></span><span class=""><span class="mop op-symbol large-op">∑</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 1.38611em;"><span class=""></span></span></span></span></span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="mord">∣</span><span class="mord mathdefault">x</span><span class="mclose">)</span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord mathdefault">o</span><span class="mord mathdefault" style="margin-right: 0.03588em;">g</span><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="mord">∣</span><span class="mord mathdefault">x</span><span class="mclose">)</span></span></span></span></span></span></p>
當(dāng)前文本片段的上文和下文可搭配詞語(yǔ)越豐富,則其上文信息熵(左信息熵)和下文信息熵(右信息熵)越大。一般,我們?nèi)∽笥倚畔㈧刂械淖钚≈怠?/p>
當(dāng)然我們也可以自行設(shè)計(jì)一個(gè)合理的統(tǒng)計(jì)量去度量自由程度。例如,綜合考慮文本片段左右信息熵(LE、RE)的大小、LE 與 RE 差的絕對(duì)值 (|LE - RE|)。
L(W)=log?LE?eRE+RE?eLE∣LE?RE∣L(W)=\log \frac{L E \cdot e^{R E}+R E \cdot e^{L E}}{|L E-R E|} </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathdefault">L</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right: 0.13889em;">W</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 2.45433em; vertical-align: -0.936em;"></span><span class="mop">lo<span style="margin-right: 0.01389em;">g</span></span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.51833em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord">∣</span><span class="mord mathdefault">L</span><span class="mord mathdefault" style="margin-right: 0.05764em;">E</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">?</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mord mathdefault" style="margin-right: 0.00773em;">R</span><span class="mord mathdefault" style="margin-right: 0.05764em;">E</span><span class="mord">∣</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault">L</span><span class="mord mathdefault" style="margin-right: 0.05764em;">E</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">?</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mord"><span class="mord mathdefault">e</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.841331em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight" style="margin-right: 0.00773em;">R</span><span class="mord mathdefault mtight" style="margin-right: 0.05764em;">E</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mord mathdefault" style="margin-right: 0.00773em;">R</span><span class="mord mathdefault" style="margin-right: 0.05764em;">E</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">?</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mord"><span class="mord mathdefault">e</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.841331em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">L</span><span class="mord mathdefault mtight" style="margin-right: 0.05764em;">E</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.936em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></span></p>
從執(zhí)行流程上來(lái)看,自由程度的閾值計(jì)算相當(dāng)于對(duì)上一步凝聚程度所得的詞表進(jìn)行了一次過(guò)濾,從中剔除不滿足自由程度要求的詞語(yǔ)。
語(yǔ)義完整
語(yǔ)義完整是我在閱讀《Automated Phrase Mining from Massive Text Corpora》這篇論文時(shí)得到的靈感。一個(gè)詞語(yǔ)的語(yǔ)義應(yīng)該是完整的,例如“電影院”。而不應(yīng)該像“的電影”,語(yǔ)義是欠缺的。
那么如何去判斷一個(gè)文本片段的語(yǔ)義是否完整呢?初步的想法:依據(jù)詞性標(biāo)注,判斷構(gòu)成文本片段的各子文本片段的詞性,例如“前麥弗遜式獨(dú)立懸架”,經(jīng)過(guò)詞性標(biāo)注后的結(jié)果 [('前', 'f'), ('麥弗遜式', 'n'), ('獨(dú)立', 'v'), ('懸架', 'n')],構(gòu)成偏正結(jié)構(gòu),因此我們可認(rèn)為具有完整的語(yǔ)義信息。
再舉個(gè)反例,例如“前麥弗遜式獨(dú)立懸架驅(qū)”,其詞性標(biāo)注結(jié)果 [('前', 'f'), ('麥弗遜式', 'n'), ('獨(dú)立', 'ad'), ('懸架', 'v'), ('驅(qū)', 'v')],最后一個(gè)“驅(qū)”字為動(dòng)詞 v,那么這個(gè)詞語(yǔ)不具備完整的語(yǔ)義,因此我們可以認(rèn)為“前麥弗遜式獨(dú)立懸架驅(qū)”不應(yīng)該作為一個(gè)詞語(yǔ)。
然而語(yǔ)義完整很難在實(shí)際中進(jìn)行運(yùn)用,例如“人艱不拆”,其詞性標(biāo)注 [('人', 'n'), ('艱', 'a'), ('不', 'd'), ('拆', 'v')],如果按照“前麥弗遜式獨(dú)立懸架驅(qū)”的判斷標(biāo)準(zhǔn),那么“人艱不拆”不應(yīng)該作為一個(gè)詞語(yǔ)。因此,語(yǔ)義完整的判斷標(biāo)準(zhǔn)該如何設(shè)置,以及在評(píng)判標(biāo)準(zhǔn)中的定位都是一個(gè)值得商榷的問(wèn)題。
缺點(diǎn):限于查找較短的新詞語(yǔ),但不便于描述詞語(yǔ)的內(nèi)部和外部結(jié)構(gòu)特征,同時(shí)對(duì)于出現(xiàn)頻率很低的新詞識(shí)別效果不好。
文本切分
文本切分主要有兩種處理方式:合詞與切分。接下來(lái)我會(huì)詳細(xì)地介紹這兩種處理方式的執(zhí)行過(guò)程。
合詞
從左到右依次計(jì)算相鄰文本片段的凝聚程度,若達(dá)到設(shè)定的閾值,則將這兩段文本片段整合為一塊新的文本片段,然后繼續(xù)去計(jì)算該整合后的文本片段與下一段相鄰文本片段的凝聚程度。不斷循環(huán),直到無(wú)文本片段。
【處理過(guò)程】:以“巧克力”為例。
首先,計(jì)算“巧克”的凝聚程度,若超過(guò)閾值,則將其合并; 然后計(jì)算“巧克”與“力”的凝聚程度,若超過(guò)閾值,則將其合并,得到“巧克力”。
【問(wèn)題 1】:當(dāng)兩段相鄰文本片段整合為一塊新的文本片段時(shí),我們?cè)撊绾稳カ@取這塊新文本片段的頻數(shù)呢?同樣,三段、四段乃至 n 段文本片段整合后,該如何計(jì)算這些文本片段的頻數(shù)呢?
【解決方案】:以“巧克力”為例,我們需要統(tǒng)計(jì) 2-gram 的頻數(shù),對(duì)于較長(zhǎng)的詞語(yǔ),則需要統(tǒng)計(jì) n-gram 的頻數(shù)。
上述解決方案仍然不是一個(gè)明智之舉,n-gram 的 n 值越大,需要統(tǒng)計(jì)的詞語(yǔ)也越多,對(duì)性能的開銷也逐漸增大。此外,如何設(shè)置 n 值也是一個(gè)值得商榷的問(wèn)題,一般 n ≤ 5。但這對(duì)于一些特殊領(lǐng)域的新詞發(fā)現(xiàn)并不能起到良好的效果,例如汽車領(lǐng)域中的“前麥弗遜式獨(dú)立懸架”,存在較長(zhǎng)的新詞。
【問(wèn)題 2】:令合詞操作得到的文本片段為 A,下一段相鄰文本片段為 B。隨著合詞操作的進(jìn)行,P(A) 和 P(A, B) 一般會(huì)越來(lái)越小且越來(lái)越接近。此時(shí),P(B) 對(duì) PMI(A, B) 起主要影響作用。那么只要文本片段 B 是一些低頻字,PMI(A, B) 的值仍然可以超過(guò)設(shè)定的閾值,從而將文本片段 A 和 B 整合得到 C,但 C 很有可能不是我們想要的新詞,例如“前麥弗遜式獨(dú)立懸架驅(qū)”,由于“驅(qū)”字在語(yǔ)料中出現(xiàn)的頻率很低,因此極容易將“前麥弗遜式獨(dú)立懸架”和“驅(qū)”進(jìn)行整合,得到不期待的結(jié)果。
【解決方案】:使用平均互信息(AMI)作為凝聚程度的計(jì)算公式(參考自"新詞發(fā)現(xiàn)"算法探討與優(yōu)化-SmoothNLP)。
AMI(X,y)=1nlog2p(X,y)p(x1)?p(xn)p(y)AMI(X, y) = \frac{1}{n} log_2 \frac{p(X, y)}{p(x_1) \cdots p(x_n)p(y)} </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathdefault">A</span><span class="mord mathdefault" style="margin-right: 0.10903em;">M</span><span class="mord mathdefault" style="margin-right: 0.07847em;">I</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right: 0.07847em;">X</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 2.363em; vertical-align: -0.936em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.32144em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault">n</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.686em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord mathdefault">o</span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.03588em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.427em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord"><span class="mord mathdefault">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="minner">?</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord"><span class="mord mathdefault">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.151392em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">n</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mclose">)</span><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="mclose">)</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right: 0.07847em;">X</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault" style="margin-right: 0.03588em;">y</span><span class="mclose">)</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.936em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></span><br> 其中 n 表示文本片段的個(gè)數(shù),例如“巧克力”和“的”,其中“巧克力”由三個(gè)文本片段組成,因此 n = 4。<br> <span class="katex--display"><span class="katex-display"><span class="katex"><span class="katex-mathml">AMI(巧克力,的)=14log2p(巧克力的)p(巧)p(克)p(力)p(的)AMI(\text{巧克力}, \text{的}) = \frac{1}{4} log_2 \frac{p(\text{巧克力的})}{p(\text{巧})p(\text{克})p(\text{力})p(\text{的})} </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathdefault">A</span><span class="mord mathdefault" style="margin-right: 0.10903em;">M</span><span class="mord mathdefault" style="margin-right: 0.07847em;">I</span><span class="mopen">(</span><span class="mord text"><span class="mord cjk_fallback">巧克力</span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord text"><span class="mord cjk_fallback">的</span></span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 2.363em; vertical-align: -0.936em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.32144em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord">4</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.686em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord mathdefault">o</span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.03588em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.427em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord text"><span class="mord cjk_fallback">巧</span></span><span class="mclose">)</span><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord text"><span class="mord cjk_fallback">克</span></span><span class="mclose">)</span><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord text"><span class="mord cjk_fallback">力</span></span><span class="mclose">)</span><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord text"><span class="mord cjk_fallback">的</span></span><span class="mclose">)</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault">p</span><span class="mopen">(</span><span class="mord text"><span class="mord cjk_fallback">巧克力的</span></span><span class="mclose">)</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.936em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></span></p>
實(shí)際上
1n\frac{1}{n}</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.19011em; vertical-align: -0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.845108em;"><span class="" style="top: -2.655em;"><span class="pstrut" style="height: 3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">n</span></span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.394em;"><span class="pstrut" style="height: 3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.345em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span> 可視為對(duì)文本片段長(zhǎng)度的一個(gè)懲罰系數(shù),而這懲罰系數(shù)我們可以視情況自行設(shè)定。</p>
切詞
從左到右依次計(jì)算相鄰文本片段的凝聚程度(與合詞不同,每次只計(jì)算相鄰兩個(gè)文本片段的凝聚程度),若未達(dá)到設(shè)定的閾值,則將這兩段文本片段進(jìn)行切分。不斷循環(huán),直到無(wú)文本片段。
【處理過(guò)程】:以“巧克力真好吃”為例。
首先,計(jì)算“巧克”的凝聚程度,若超過(guò)閾值,則繼續(xù)計(jì)算“克力”的凝聚程度,若仍然超過(guò)閾值,則繼續(xù)計(jì)算下一對(duì)文本片段“力真”的凝聚程度; 若“力真”的凝聚程度小于閾值,則進(jìn)行切分“力|真”,繼續(xù)計(jì)算下一對(duì)文本片段; 最終可得“巧克力|真|好吃”。
合詞、切詞與凝聚程度
【合詞與切詞的比較】:
合詞需要更多的統(tǒng)計(jì)信息,而切詞僅需要 2-gram 的統(tǒng)計(jì)信息(計(jì)算相鄰兩個(gè)文本片段的凝聚程度)即可,因此切詞的執(zhí)行開銷要遠(yuǎn)小于合詞; 合詞的過(guò)程中會(huì)遇到合詞 中提到的問(wèn)題2,而切詞不會(huì)出現(xiàn)該問(wèn)題;
切詞的缺陷
切詞忽略了更多的上下文信息,因?yàn)榍性~僅考慮相鄰兩個(gè)文本片段,例如對(duì)于“電影院”,切詞只會(huì)計(jì)算“電”和“影”、“影”和“院”之間的凝聚程度。我們都知道 P(影) >= P(電影),P(影院) ≈ P(電影院),那么計(jì)算得到的凝聚程度,PMI(電影,院) > PMI(影,院)。對(duì)于一些三字以上且包含常用字的詞語(yǔ),通過(guò)切詞的方式往往會(huì)被“一刀兩斷”。
“電”、“影”、“院”三位好朋友手拉手,“電”小朋友是一位交際花,她有許多的朋友,而人的精力總是有限的,因此“電”小朋友和“影”小朋友的玩耍時(shí)間遠(yuǎn)沒有“影”小朋友和“院”小朋友來(lái)得多。但我們沒有因?yàn)椤半姟钡呐笥讯嗲液汀坝啊币黄鹜嫠5臅r(shí)間少,而認(rèn)為他們倆不是朋友。因此,僅考慮相鄰文本片段的切詞過(guò)程計(jì)算得到的是“封閉程度”,而非凝聚程度。例如,“饕餮”、“沆瀣”等詞,他們只擁有彼此。
針對(duì)這個(gè)問(wèn)題,蘇劍林大佬提出了改進(jìn),在文章《無(wú)監(jiān)督構(gòu)建詞庫(kù):更快更好的新詞發(fā)現(xiàn)算法》中提出了多字的凝聚程度計(jì)算方式。以下是文章中的原文:
文章《【中文分詞系列】 2. 基于切分的新詞發(fā)現(xiàn)》其實(shí)就是這個(gè)意思,只是那里認(rèn)為,文本的相關(guān)性僅由相鄰兩字(2grams)來(lái)決定,這在很多時(shí)候都是不合理的,比如“林心如”中的“心如”、“共和國(guó)”中的“和國(guó)”,凝固度(相關(guān)性)都不是很強(qiáng),容易錯(cuò)切。
因此,本文就是在前文的基礎(chǔ)上改進(jìn),那里只考慮了相鄰字的凝固度,這里同時(shí)考慮多字的內(nèi)部的凝固度(ngrams),比如,定義三字的字符串內(nèi)部凝固度為:
min?{P(abc)P(ab)P(c),P(abc)P(a)P(bc)}\min \left\{\frac{P(a b c)}{P(a b) P(c)}, \frac{P(a b c)}{P(a) P(b c)}\right\} </span><span class="katex-html"><span class="base"><span class="strut" style="height: 2.40003em; vertical-align: -0.95003em;"></span><span class="mop">min</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="minner"><span class="mopen delimcenter" style="top: 0em;"><span class="delimsizing size3">{<!-- --></span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.427em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">a</span><span class="mord mathdefault">b</span><span class="mclose">)</span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">c</span><span class="mclose">)</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">a</span><span class="mord mathdefault">b</span><span class="mord mathdefault">c</span><span class="mclose">)</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.936em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.427em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">a</span><span class="mclose">)</span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">b</span><span class="mord mathdefault">c</span><span class="mclose">)</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">a</span><span class="mord mathdefault">b</span><span class="mord mathdefault">c</span><span class="mclose">)</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.936em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose delimcenter" style="top: 0em;"><span class="delimsizing size3">}</span></span></span></span></span></span></span></span></p>
如果按照這一種思路來(lái)做的話,切詞方式所帶來(lái)的實(shí)現(xiàn)與執(zhí)行上的優(yōu)勢(shì)(不需要獲取更多的統(tǒng)計(jì)信息 n-gram)將蕩然無(wú)存。蘇劍林大佬之所以選用這種方式,是因?yàn)樗徊捎昧四鄢潭群驮~頻作為新詞的判斷依據(jù)。為什么不加上自由程度呢?因?yàn)樽杂沙潭鹊挠?jì)算時(shí)間要遠(yuǎn)大于凝聚程度。在上文的自由程度 中也提到,自由程度在流程上的主要貢獻(xiàn)在于對(duì)凝聚程度所得到的詞表進(jìn)行過(guò)濾,至于需不需要耗費(fèi)大量的時(shí)間去做這一層過(guò)濾,則需要視情況而定,這大概也是蘇劍林大佬放棄使用自有程度的原因之一吧。
并且按照上述方法來(lái)做,仍然不能解決兩字詞語(yǔ)存在的切分問(wèn)題,對(duì)于一些頻數(shù)較高的字,例如“在”、“利”等,我們?cè)谟?jì)算其組合(“現(xiàn)在”、“利益”)的凝聚程度時(shí),所得到的凝聚程度往往較低,容易被切分成單字。
【示例】:以“利率”為例,在所有語(yǔ)料中“利率”出現(xiàn)的次數(shù)不會(huì)太多,同時(shí)“率”的出現(xiàn)次數(shù)略高于“利率”,那么在凝聚程度的計(jì)算公式中,“利”的出現(xiàn)次數(shù)對(duì)最終凝聚程度起到關(guān)鍵作用。但像“利”這一類高頻字,會(huì)使得計(jì)算得到的凝聚程度較小,低于設(shè)定的閾值,從而使得“利率”這一類的詞被切分。
那么如何去解決這一類的切分問(wèn)題呢?
切分問(wèn)題的一些方案
針對(duì)上一小節(jié)提到的切分問(wèn)題,我針對(duì)目前已有的工作提出了兩個(gè)思路:
調(diào)整凝聚程度計(jì)算公式; 依據(jù)自由程度進(jìn)行擴(kuò)展。
調(diào)整凝聚程度計(jì)算公式
切分問(wèn)題的實(shí)質(zhì)在于高頻字對(duì)成詞的影響,那么我們適當(dāng)調(diào)低高頻字對(duì)成詞的影響,或提高共現(xiàn)頻率在計(jì)算公式中的比重。
【簡(jiǎn)單的實(shí)現(xiàn)方式】:
PMI(A,B)=log2αP(AB)β1P(A)?β2P(B)PMI(A, B) = log_2\frac{\alpha P(AB)}{\beta_1 P(A) * \beta_2 P(B)} </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mord mathdefault" style="margin-right: 0.10903em;">M</span><span class="mord mathdefault" style="margin-right: 0.07847em;">I</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 2.363em; vertical-align: -0.936em;"></span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord mathdefault">o</span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.03588em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.427em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord"><span class="mord mathdefault" style="margin-right: 0.05278em;">β</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.05278em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">?</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.05278em;">β</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.05278em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose">)</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose">)</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.936em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></span><br> <span class="katex--inline"><span class="katex"><span class="katex-mathml">α\alpha</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span></span></span></span></span> 用以提高 A、B 共現(xiàn)頻率的權(quán)重,而 <span class="katex--inline"><span class="katex"><span class="katex-mathml">β1\beta_1</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.05278em;">β</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.05278em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span> 和 <span class="katex--inline"><span class="katex"><span class="katex-mathml">β2\beta_2</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.05278em;">β</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.05278em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span> 則可視為對(duì)高頻字的懲罰系數(shù)。</p>
如果
α\alpha</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span></span></span></span></span> 和 <span class="katex--inline"><span class="katex"><span class="katex-mathml">β\beta</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord mathdefault" style="margin-right: 0.05278em;">β</span></span></span></span></span> 是一個(gè)固定的數(shù)值,且 <span class="katex--inline"><span class="katex"><span class="katex-mathml">β1\beta_1</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.05278em;">β</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.05278em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span> = <span class="katex--inline"><span class="katex"><span class="katex-mathml">β2\beta_2</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.05278em;">β</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.05278em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>,相當(dāng)于在原式上乘上了一個(gè)固定的系數(shù) <span class="katex--inline"><span class="katex"><span class="katex-mathml">γ\gamma</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em;"></span><span class="mord mathdefault" style="margin-right: 0.05556em;">γ</span></span></span></span></span>,起到的作用并不大,完全可有通過(guò)調(diào)整凝聚程度的閾值(除以 <span class="katex--inline"><span class="katex"><span class="katex-mathml">γ\gamma</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em;"></span><span class="mord mathdefault" style="margin-right: 0.05556em;">γ</span></span></span></span></span>)來(lái)起到相應(yīng)的作用。因此,我認(rèn)為線性地改變?cè)讲⒉荒芷鸬礁倪M(jìn)作用。但它提供了兩種可行的改進(jìn)方向:</p>
非線性地增大共現(xiàn)頻率的權(quán)重; 非線性地降低高頻字的權(quán)重。
非線性地增大共現(xiàn)頻率的權(quán)重
為了加大共現(xiàn)頻率的權(quán)重,我們可以在原式的基礎(chǔ)上再乘上共現(xiàn)頻率:
PMI(A,B)′=P(A,B)log2P(A,B)P(A)P(B)PMI(A, B)' = P(A, B) log_2 \frac{P(A, B)}{P(A) P(B)} </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.05189em; vertical-align: -0.25em;"></span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mord mathdefault" style="margin-right: 0.10903em;">M</span><span class="mord mathdefault" style="margin-right: 0.07847em;">I</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.801892em;"><span class="" style="top: -3.113em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 2.363em; vertical-align: -0.936em;"></span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose">)</span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord mathdefault">o</span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.03588em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.427em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mclose">)</span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose">)</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose">)</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.936em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></span></p>
上式實(shí)際上就是互信息的計(jì)算公式,此時(shí) P(A)、P(B) 和 P(AB) 都是固定的值,我們可以通過(guò)給 P(AB) 加上未知的系數(shù),使其轉(zhuǎn)變?yōu)樽兞俊?br />
AB=αP(AB)AB = \alpha P(AB) </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathdefault">A</span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose">)</span></span></span></span></span></span></p>
這樣我們就可以將原式視作共現(xiàn)頻率 P(AB) 的一個(gè)函數(shù)。
f(AB)=log2αP(A,B)P(A)P(B)f(AB) = log_2 \frac{\alpha P(A, B)}{P(A) P(B)} </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathdefault" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 2.363em; vertical-align: -0.936em;"></span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord mathdefault">o</span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.03588em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.427em;"><span class="" style="top: -2.314em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mclose">)</span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose">)</span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.677em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose">)</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.936em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></span></p>
最終轉(zhuǎn)變?yōu)?#xff1a;
PMI(A,B)′=ABf(AB)PMI(A, B)' = AB f(AB) </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.05189em; vertical-align: -0.25em;"></span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span><span class="mord mathdefault" style="margin-right: 0.10903em;">M</span><span class="mord mathdefault" style="margin-right: 0.07847em;">I</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.801892em;"><span class="" style="top: -3.113em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathdefault">A</span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mord mathdefault" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord mathdefault">A</span><span class="mord mathdefault" style="margin-right: 0.05017em;">B</span><span class="mclose">)</span></span></span></span></span></span></p>
f(AB) 可理解為共現(xiàn)頻率的非線性權(quán)重系數(shù),上述式子對(duì)實(shí)際的計(jì)算沒有作用,提供了另一種角度的解釋。
【互信息計(jì)算公式效果】:
【原式效果】:
可以看到乘上共現(xiàn)頻率的效果并不如原始的效果,這有兩方面的原因:
乘上共現(xiàn)頻率后的凝聚程度閾值需要相應(yīng)地調(diào)低,但共現(xiàn)頻率的波動(dòng)較大,如何設(shè)置凝聚程度閾值是一個(gè)問(wèn)題; 馬太效應(yīng):較大的共現(xiàn)頻率可以得到更高的凝聚程度,而較低的共現(xiàn)頻率則得到更低的凝聚程度,這顯然不是我們想看到的。
此時(shí),我們亦然陷入一個(gè)誤區(qū):單純地提高共現(xiàn)頻率對(duì)結(jié)果不一定能起到正向作用,或者說(shuō)依靠固定值或共現(xiàn)頻率去提高共現(xiàn)頻率的權(quán)重不是一個(gè)好辦法。
單純提高共現(xiàn)頻率的權(quán)重,這可能會(huì)幫助我們解決“利|益”的切分問(wèn)題,但同時(shí)也會(huì)導(dǎo)致“美麗”和“的”組合成“美麗的”。當(dāng)然,并非說(shuō)這條路走不通,而是需要借助更多的信息,在共現(xiàn)頻率權(quán)重的計(jì)算過(guò)程中引入其他的統(tǒng)計(jì)信息。
非線性地降低高頻字的權(quán)重
一種簡(jiǎn)單的實(shí)現(xiàn)方式:比較 P(A) 和 P(B) 的大小,若 P(A) > P(B),那么
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.05278em;">β</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.05278em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span> < <span class="katex--inline"><span class="katex"><span class="katex-mathml"></span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.05278em;">β</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.05278em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">?</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>。目的在于非線性地降低高頻字在式子中的權(quán)重。通過(guò)這種方式,我們可以適當(dāng)提高“現(xiàn)在”、“利益”等詞的凝聚程度,但同時(shí)也會(huì)提高“漂亮的”、“美麗的”這些詞語(yǔ)的凝聚程度。簡(jiǎn)單地說(shuō),我們不想降低“的”、“了”、“呢”這些高頻字的權(quán)重,為了方便后續(xù)的說(shuō)明,特將這些字命名為“停用字”。</p>
對(duì)于這種情況,我們可以按字的頻數(shù)取 topK,然后對(duì)這些字的頻率加大懲罰。
下面是從汽車領(lǐng)域的 80w 文章中統(tǒng)計(jì)的 top 100 字頻率。取語(yǔ)料中統(tǒng)計(jì)得到的 topk 能夠更準(zhǔn)確地反映領(lǐng)域的特點(diǎn),但很顯然“車”、“型”這些字是我們需要的。
在實(shí)際處理過(guò)程中,通用領(lǐng)域的“停用字”也往往是特定領(lǐng)域的“停用字”,因此我們直接使用通用領(lǐng)域的“停用字”即可,例如找一份停用詞表,從中將單字抽取出來(lái)。
'嗬', '嗯', '噯', '嘎', '噓', '嘛', '嘻', '嘿', ......
依據(jù)自由程度進(jìn)行擴(kuò)展
思路:依據(jù)凝聚程度得到的“候選詞”的自由程度來(lái)將相鄰的“候選詞”重新進(jìn)行組合。
【具體步驟】:
若切分后的文本片段自由程度小于設(shè)定閾值,則嘗試將當(dāng)前文本片段與相鄰文本片段進(jìn)行組合; 計(jì)算組合后的文本片段的自由程度,若自由程度提高則繼續(xù)組合相鄰的文本片段; 若連續(xù)組合之后的文本片段的自由程度高于設(shè)定閾值,則將這段文本片段作為新的詞語(yǔ),否則出局。
【問(wèn)題 1】:連續(xù)組合相鄰文本片段會(huì)導(dǎo)致最終得到一個(gè)超長(zhǎng)的詞語(yǔ)嗎?
【回答 1】:不會(huì),當(dāng)超過(guò)某個(gè)臨界點(diǎn)時(shí)(n = 4),字?jǐn)?shù)越長(zhǎng)的文本片段其自由程度越低。因?yàn)?n-gram 中的 n 越大,得到的文本的頻數(shù)越低,因此其相鄰詞語(yǔ)的數(shù)量也越少,信息熵越來(lái)越低,低于設(shè)定的閾值。
【注意】:“利”的左信息熵不能作為“利率”的左信息熵,換言之,“利”的左鄰詞語(yǔ)不能作為“利率”的左鄰詞語(yǔ),必須要“利”和“率”共有的左鄰才能作為“利率”的左鄰詞語(yǔ)。右信息熵同理。
執(zhí)行過(guò)程
首先將文本拆分為文本片段(字符、英文單詞等); 基于凝聚程度和切詞方式對(duì)文本進(jìn)行切分,獲得一個(gè)粗的詞庫(kù),同時(shí)也對(duì)文本做了一次粗的分詞; 基于自由程度從上一步的到得詞庫(kù)中篩選出詞語(yǔ);
告一段落
新詞發(fā)現(xiàn)還有許多的工作可以去嘗試:
嘗試從文本中挖掘更多的統(tǒng)計(jì)量,而非僅僅局限于頻數(shù)和頻率; 如何去設(shè)計(jì)一套無(wú)監(jiān)督的評(píng)估指標(biāo)也是非常有挑戰(zhàn)的工作; 全文主要講述切詞的工作,關(guān)于合詞也有不少可探索的工作。
參考
新詞發(fā)現(xiàn):中文新詞識(shí)別技術(shù)簡(jiǎn)介:https://blog.csdn.net/sinat_33741547/article/details/81704798 互聯(lián)網(wǎng)時(shí)代的社會(huì)語(yǔ)言學(xué):基于 SNS 的文本數(shù)據(jù)挖掘:http://www.matrix67.com/blog/archives/5044 "新詞發(fā)現(xiàn)"算法探討與優(yōu)化-SmoothNLP:https://zhuanlan.zhihu.com/p/80385615 無(wú)監(jiān)督構(gòu)建詞庫(kù):更快更好的新詞發(fā)現(xiàn)算法:https://zhuanlan.zhihu=
創(chuàng)作挑戰(zhàn)賽 新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔 為你收集整理的新词发现简介 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。