本篇給大家分享baiziyu 寫的HanLP 中的N-最短路徑分詞。以為下分享的原文,部分地方有稍作修改,內(nèi)容僅供大家學(xué)習(xí)交流! 首先說明在HanLP對外提供的接口中沒有使用N-最短路徑分詞器的,作者在官網(wǎng)中寫到這個(gè)分詞器對于實(shí)體識別來說會比最短路徑分詞稍好,但是它的速度會很慢。對此我有點(diǎn)個(gè)人看法,N-最短路徑分詞相較于最短路徑分詞來說只是考慮了每個(gè)節(jié)點(diǎn)下的N種最佳路徑,在最后選出的至少N條路徑中,作者并沒有對他們進(jìn)行篩選,而只是選擇了一條最優(yōu)的路徑,只能說N-最短路徑分詞相較于最短路徑分詞對分詞歧義會有一定作用,而對于未登錄詞它的效果應(yīng)該和最短路徑分詞相差不多,這只是個(gè)人的猜測,并沒有拿真實(shí)的語料驗(yàn)證。如果后邊還有時(shí)間的話,我會把幾種分詞器在新聞?wù)Z料上做一次對比評測。但是這種評測的意義可能不大,因?yàn)楫吘诡I(lǐng)域不同分詞器的效果也會不同,同文本分類一樣,至今依然沒有一種普適的分詞器。 前邊已經(jīng)提到,在最短路徑分詞中,若每個(gè)結(jié)點(diǎn)處記錄N種最短路徑值,則該方法稱為N-最短路徑算法。在HanLP中通過兩個(gè)類ViterbiSegment和NshortSegment分別實(shí)現(xiàn)了最短路徑分詞和N-最短路徑分詞。這里要說明一下為什么說是N種而不是N個(gè),原因是算法會在每個(gè)字節(jié)點(diǎn)處對所有到達(dá)該節(jié)點(diǎn)的路徑計(jì)算路徑值,然后按照路徑值做排序,所謂的“種”指的是路徑值的種類數(shù),因此當(dāng)存在相等路徑值的路徑時(shí),節(jié)點(diǎn)處保留的路徑就不只有N個(gè)了。 ![]() 從上圖的繼承關(guān)系我們可以看到最短路徑分詞器和N最短路徑分詞器都繼承了WordBasedSegment抽象類,也就是說他們從大類上講都屬于基于詞語的分詞器。后邊我們還會介紹基于詞典的分詞器(極速詞典分詞器)以及基于字的分詞器(感知機(jī)、條件隨機(jī)場分詞器)。這里再說明一下抽象類Segment它對外提供了分詞方法Seg,所有HanLP中實(shí)現(xiàn)的分詞方法類都繼承了該抽象類,并且實(shí)現(xiàn)了抽象方法segSentence。Seg方法對輸入的文本進(jìn)行處理,當(dāng)文本長度很長時(shí),它會自動將其拆分為多個(gè)短文本,然后利用多線程技術(shù),同步對多個(gè)短文本進(jìn)行分詞處理,最后得到分詞后的文本,對于短文本Seg方法則直接用單線程處理。segSentence則會根據(jù)各種不同的分詞方法對文本進(jìn)行分詞。這里Seg方法會調(diào)用segSentence方法,這就是兩個(gè)方法的關(guān)系。拿我們現(xiàn)在的N-最短路徑分詞來說,segSentence實(shí)現(xiàn)的就是N-最短路徑分詞。如果是最短路徑分詞,則segSentence實(shí)現(xiàn)的是最短路徑分詞。寫這些只是為了使剛接觸面向?qū)ο缶幊谭椒ǖ男』锇槟芮宄?/span> 下邊我們還是以例句“他說的確實(shí)在理”為例來說明N-最短路徑分詞。程序?qū)ν獗憩F(xiàn)就是計(jì)算出下邊的表 ![]() 這里我們使N-最短路徑分詞中的N取2,可以看到算法從“實(shí)”字開始就開始有多種最優(yōu)路徑了,截取了前top2種,最后得到了下邊的兩種分詞結(jié)果 ![]() 至此,我們N-最短路徑分詞介紹結(jié)束,我們再來總結(jié)一下HanLP中兩種方法的異同。 (1) 第1個(gè)區(qū)別是節(jié)點(diǎn)上保留的最優(yōu)路徑前驅(qū)節(jié)點(diǎn)數(shù)。具體來說,當(dāng)某個(gè)節(jié)點(diǎn)存在兩個(gè)以上前驅(qū)時(shí),N-最短路徑一定會保留topN種路徑值的所有前驅(qū)節(jié)點(diǎn),而最短路徑只會保留一個(gè)最短路徑值的前驅(qū)節(jié)點(diǎn)。 (2) HanLP在實(shí)現(xiàn)上對N-最短路徑方法增加了數(shù)字、日期合并規(guī)則。 (3) HanLP的N-最短路徑方法最終返回的還是一個(gè)最優(yōu)路徑,并未對topN個(gè)分詞結(jié)果做篩選策略,雖然在有多個(gè)前驅(qū)的節(jié)點(diǎn)處保留了多個(gè)候選前驅(qū),但是個(gè)人感覺兩者相差應(yīng)該不多,可能對分詞歧義有效果,但是對未登錄詞應(yīng)該作用不大。說白了它也還是基于詞典中單個(gè)詞語的概率做的,其他的文本信息都沒有用到。 這里,還要再說明一下,我們看到了分詞結(jié)果中含有了詞性標(biāo)注,關(guān)于詞性標(biāo)注我們會在后邊繼續(xù)介紹,它與分詞方法是兩個(gè)策略。程序也是先做了分詞再根據(jù)用戶配置做的詞性標(biāo)注 |
|