hadoop小學生
圣騎士
圣騎士
  • 注冊日期2018-09-13
  • 發帖數145
  • QQ3234520070
  • 火幣325枚
  • 粉絲0
  • 關注0
閱讀:18570回復:0

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

樓主#
更多 發布于:2019-05-17 10:07
本篇給大家分享baiziyu 寫的hanlp 中的N-最短路徑分詞以為下分享的原文,部分地方有稍作修改,內容僅供大家學習交流!

首先說明在HanLP對外提供的接口中沒有使用N-最短路徑分詞器的,作者在官網中寫到這個分詞器對于實體識別來說會比最短路徑分詞稍好,但是它的速度會很慢。對此我有點個人看法,N-最短路徑分詞相較于最短路徑分詞來說只是考慮了每個節點下的N種最佳路徑,在最后選出的至少N條路徑中,作者并沒有對他們進行篩選,而只是選擇了一條最優的路徑,只能說N-最短路徑分詞相較于最短路徑分詞對分詞歧義會有一定作用,而對于未登錄詞它的效果應該和最短路徑分詞相差不多,這只是個人的猜測,并沒有拿真實的語料驗證。如果后邊還有時間的話,我會把幾種分詞器在新聞語料上做一次對比評測。但是這種評測的意義可能不大,因為畢竟領域不同分詞器的效果也會不同,同文本分類一樣,至今依然沒有一種普適的分詞器。
前邊已經提到,在最短路徑分詞中,若每個結點處記錄N種最短路徑值,則該方法稱為N-最短路徑算法。在HanLP中通過兩個類ViterbiSegment和NshortSegment分別實現了最短路徑分詞和N-最短路徑分詞。這里要說明一下為什么說是N種而不是N個,原因是算法會在每個字節點處對所有到達該節點的路徑計算路徑值,然后按照路徑值做排序,所謂的“種”指的是路徑值的種類數,因此當存在相等路徑值的路徑時,節點處保留的路徑就不只有N個了。

圖片:圖1.jpg


從上圖的繼承關系我們可以看到最短路徑分詞器和N最短路徑分詞器都繼承了WordBasedSegment抽象類,也就是說他們從大類上講都屬于基于詞語的分詞器。后邊我們還會介紹基于詞典的分詞器(極速詞典分詞器)以及基于字的分詞器(感知機、條件隨機場分詞器)。這里再說明一下抽象類Segment它對外提供了分詞方法Seg,所有HanLP中實現的分詞方法類都繼承了該抽象類,并且實現了抽象方法segSentence。Seg方法對輸入的文本進行處理,當文本長度很長時,它會自動將其拆分為多個短文本,然后利用多線程技術,同步對多個短文本進行分詞處理,最后得到分詞后的文本,對于短文本Seg方法則直接用單線程處理。segSentence則會根據各種不同的分詞方法對文本進行分詞。這里Seg方法會調用segSentence方法,這就是兩個方法的關系。拿我們現在的N-最短路徑分詞來說,segSentence實現的就是N-最短路徑分詞。如果是最短路徑分詞,則segSentence實現的是最短路徑分詞。寫這些只是為了使剛接觸面向對象編程方法的小伙伴能清楚。
下邊我們還是以例句“他說的確實在理”為例來說明N-最短路徑分詞。程序對外表現就是計算出下邊的表

圖片:圖2.jpg


這里我們使N-最短路徑分詞中的N取2,可以看到算法從“實”字開始就開始有多種最優路徑了,截取了前top2種,最后得到了下邊的兩種分詞結果

圖片:圖3.png


至此,我們N-最短路徑分詞介紹結束,我們再來總結一下HanLP中兩種方法的異同。
1) 第1個區別是節點上保留的最優路徑前驅節點數。具體來說,當某個節點存在兩個以上前驅時,N-最短路徑一定會保留topN種路徑值的所有前驅節點,而最短路徑只會保留一個最短路徑值的前驅節點。
2) HanLP在實現上對N-最短路徑方法增加了數字、日期合并規則。
3) HanLP的N-最短路徑方法最終返回的還是一個最優路徑,并未對topN個分詞結果做篩選策略,雖然在有多個前驅的節點處保留了多個候選前驅,但是個人感覺兩者相差應該不多,可能對分詞歧義有效果,但是對未登錄詞應該作用不大。說白了它也還是基于詞典中單個詞語的概率做的,其他的文本信息都沒有用到。
這里,還要再說明一下,我們看到了分詞結果中含有了詞性標注,關于詞性標注我們會在后邊繼續介紹,它與分詞方法是兩個策略。程序也是先做了分詞再根據用戶配置做的詞性標注。

喜歡0 評分0
DKHadoop用著還不錯!
游客

返回頂部
广东体彩26选5