自然語言處理工具HanLP-N最短路徑分詞
本篇給大家分享 寫的 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-最短路徑分詞。程式對外表現就是計算出下邊的表
這裡我們使 N-最短路徑分詞中的N取2,可以看到演算法從“實”字開始就開始有多種最優路徑了,擷取了前top2種,最後得到了下邊的兩種分詞結果
至此,我們 N-最短路徑分詞介紹結束,我們再來總結一下HanLP中兩種方法的異同。
( 1) 第1個區別是節點上保留的最優路徑前驅節點數。具體來說,當某個節點存在兩個以上前驅時,N-最短路徑一定會保留topN種路徑值的所有前驅節點,而最短路徑只會保留一個最短路徑值的前驅節點。
( 2) HanLP在實現上對N-最短路徑方法增加了數字、日期合併規則。
( 3) HanLP的N-最短路徑方法最終返回的還是一個最優路徑,並未對topN個分詞結果做篩選策略,雖然在有多個前驅的節點處保留了多個候選前驅,但是個人感覺兩者相差應該不多,可能對分詞歧義有效果,但是對未登入詞應該作用不大。說白了它也還是基於詞典中單個詞語的機率做的,其他的文字資訊都沒有用到。
這裡,還要再說明一下,我們看到了分詞結果中含有了詞性標註,關於詞性標註我們會在後邊繼續介紹,它與分詞方法是兩個策略。程式也是先做了分詞再根據使用者配置做的詞性標註。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2644687/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自然語言處理:分詞方法自然語言處理分詞
- 自然語言處理之jieba分詞自然語言處理Jieba分詞
- 自然語言處理工具pyhanlp分詞與詞性標註自然語言處理HanLP分詞詞性標註
- NLP自然語言處理中的hanlp分詞例項自然語言處理HanLP分詞
- 自然語言處理中的分詞問題總結自然語言處理分詞
- 中文自然語言處理工具集:分詞,相似度匹配自然語言處理分詞
- Python 自然語言處理(基於jieba分詞和NLTK)Python自然語言處理Jieba分詞
- 自然語言處理工具中的中文分詞器介紹自然語言處理中文分詞
- 自然語言處理NLP(6)——詞法分析自然語言處理詞法分析
- Python自然語言處理實戰(3):中文分詞技術Python自然語言處理中文分詞
- NLP自然語言處理中英文分詞工具集錦與基本使用介紹自然語言處理分詞
- 入門自然語言處理必看:圖解詞向量自然語言處理圖解
- Pyhanlp自然語言處理中的新詞識別HanLP自然語言處理
- NPL---自然語言處理單詞界定問題自然語言處理
- 自然語言處理(NLP)自然語言處理
- 詞!自然語言處理之詞全解和Python實戰!自然語言處理Python
- Hanlp自然語言處理中的詞典格式說明HanLP自然語言處理
- Hanlp自然語言處理工具之詞法分析器HanLP自然語言處理詞法分析
- 自然語言處理(NLP)系列(一)——自然語言理解(NLU)自然語言處理
- 12 種自然語言處理的開源工具自然語言處理開源工具
- 自然語言處理(NLP)概述自然語言處理
- 自然語言處理NLP(四)自然語言處理
- Python自然語言處理Python自然語言處理
- 自然語言處理工具hanlp定製使用者詞條自然語言處理HanLP
- 精通Python自然語言處理 4 :詞性標註--單詞識別Python自然語言處理詞性標註
- Python 自然語言處理(NLP)工具庫彙總Python自然語言處理
- 開源自然語言處理工具包hanlp中CRF分詞實現詳解自然語言處理HanLPCRF分詞
- Python自然語言處理 1 語言處理與PythonPython自然語言處理
- HanLP 自然語言處理 for nodejsHanLP自然語言處理NodeJS
- [譯] 自然語言處理真是有趣!自然語言處理
- 自然語言處理與分析(one)自然語言處理
- 05.序列模型 W2.自然語言處理與詞嵌入模型自然語言處理
- Python自然語言處理工具Python自然語言處理
- Python自然語言處理 6 學習分類文字Python自然語言處理
- 中國語文(自然語言處理)作業自然語言處理
- Python自然語言處理 3 處理原始文字Python自然語言處理
- 人工智慧 (06) 自然語言處理人工智慧自然語言處理
- 自然語言處理的最佳實踐自然語言處理