天然語言處理工具HanLP-N最短路徑分詞

本篇給你們分享baiziyu 寫的HanLP 中的N-最短路徑分詞。覺得下分享的原文,部分地方有稍做修改,內容僅供你們學習交流!算法

首先說明在HanLP對外提供的接口中沒有使用N-最短路徑分詞器的,做者在官網中寫到這個分詞器對於實體識別來講會比最短路徑分詞稍好,可是它的速度會很慢。對此我有點我的見解,N-最短路徑分詞相較於最短路徑分詞來講只是考慮了每一個節點下的N種最佳路徑,在最後選出的至少N條路徑中,做者並無對他們進行篩選,而只是選擇了一條最優的路徑,只能說N-最短路徑分詞相較於最短路徑分詞對分詞歧義會有必定做用,而對於未登陸詞它的效果應該和最短路徑分詞相差很少,這只是我的的猜想,並無拿真實的語料驗證。若是後邊還有時間的話,我會把幾種分詞器在新聞語料上作一次對比評測。可是這種評測的意義可能不大,由於畢竟領域不一樣分詞器的效果也會不一樣,同文本分類同樣,至今依然沒有一種普適的分詞器。編程

前邊已經提到,在最短路徑分詞中,若每一個結點處記錄N種最短路徑值,則該方法稱爲N-最短路徑算法。在HanLP中經過兩個類ViterbiSegment和NshortSegment分別實現了最短路徑分詞和N-最短路徑分詞。這裏要說明一下爲何說是N種而不是N個,緣由是算法會在每一個字節點處對全部到達該節點的路徑計算路徑值,而後按照路徑值作排序,所謂的「種」指的是路徑值的種類數,所以當存在相等路徑值的路徑時,節點處保留的路徑就不僅有N個了。多線程

 

從上圖的繼承關係咱們能夠看到最短路徑分詞器和N最短路徑分詞器都繼承了WordBasedSegment抽象類,也就是說他們從大類上講都屬於基於詞語的分詞器。後邊咱們還會介紹基於詞典的分詞器(極速詞典分詞器)以及基於字的分詞器(感知機、條件隨機場分詞器)。這裏再說明一下抽象類Segment它對外提供了分詞方法Seg,全部HanLP中實現的分詞方法類都繼承了該抽象類,而且實現了抽象方法segSentence。Seg方法對輸入的文本進行處理,當文本長度很長時,它會自動將其拆分爲多個短文本,而後利用多線程技術,同步對多個短文本進行分詞處理,最後獲得分詞後的文本,對於短文本Seg方法則直接用單線程處理。segSentence則會根據各類不一樣的分詞方法對文本進行分詞。這裏Seg方法會調用segSentence方法,這就是兩個方法的關係。拿咱們如今的N-最短路徑分詞來講,segSentence實現的就是N-最短路徑分詞。若是是最短路徑分詞,則segSentence實現的是最短路徑分詞。寫這些只是爲了使剛接觸面向對象編程方法的小夥伴能清楚。學習

下邊咱們仍是以例句「他說的確實在理」爲例來講明N-最短路徑分詞。程序對外表現就是計算出下邊的表spa

這裏咱們使N-最短路徑分詞中的N取2,能夠看到算法從「實」字開始就開始有多種最優路徑了,截取了前top2種,最後獲得了下邊的兩種分詞結果線程

至此,咱們N-最短路徑分詞介紹結束,咱們再來總結一下HanLP中兩種方法的異同。對象

(1) 第1個區別是節點上保留的最優路徑前驅節點數。具體來講,當某個節點存在兩個以上前驅時,N-最短路徑必定會保留topN種路徑值的全部前驅節點,而最短路徑只會保留一個最短路徑值的前驅節點。blog

(2) HanLP在實現上對N-最短路徑方法增長了數字、日期合併規則。排序

(3) HanLP的N-最短路徑方法最終返回的仍是一個最優路徑,並未對topN個分詞結果作篩選策略,雖然在有多個前驅的節點處保留了多個候選前驅,可是我的感受二者相差應該很少,可能對分詞歧義有效果,可是對未登陸詞應該做用不大。說白了它也仍是基於詞典中單個詞語的機率作的,其餘的文本信息都沒有用到。繼承

這裏,還要再說明一下,咱們看到了分詞結果中含有了詞性標註,關於詞性標註咱們會在後邊繼續介紹,它與分詞方法是兩個策略。程序也是先作了分詞再根據用戶配置作的詞性標註。

相關文章
相關標籤/搜索