1. 程式人生 > >自然語言處理工具HanLP-N最短路徑分詞

自然語言處理工具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-最短路徑分詞。程式對外表現就是計算出下邊的表

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

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

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

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

(3) HanLP的N-最短路徑方法最終返回的還是一個最優路徑,並未對topN個分詞結果做篩選策略,雖然在有多個前驅的節點處保留了多個候選前驅,但是個人感覺兩者相差應該不多,可能對分詞歧義有效果,但是對未登入詞應該作用不大。說白了它也還是基於詞典中單個詞語的概率做的,其他的文字資訊都沒有用到。

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

相關推薦

自然語言處理工具HanLP-N路徑

本篇給大家分享baiziyu 寫的HanLP 中的N-最短路徑分詞。以為下分享的原文,部分地方有稍作修改,內容

hanlp中的N路徑

N-最短路徑 是中科院分詞工具NLPIR進行分詞用到的一個重要演算法,張華平、劉群老師在論文《基於N-最短路徑方法的中文詞語粗分模型》中做了比較詳細的介紹。該演算法演算法基本思想很簡單,就是給定一待處理字串,根據詞典,找出詞典中所有可能的詞,構造出字串的一個有向無環圖,算出從

HanlpN路徑詳細介紹

開發十年,就只剩下這套架構體系了! >>>   

Python中呼叫自然語言處理工具HanLP手記

HanLP方法封裝類: 1. # -*- coding:utf-8 -*- 2. # Filename: main.py 3. 4.from jpype import * 5.  5.startJVM(getDefaultJVMPath(), "-Djava.class.path=C:\h

自然語言處理工具HanLP-基於層疊HMM地名識別

本篇接上一篇內容《HanLP-基於HMM-Viterbi的人名識別原理介紹》介紹一下層疊隱馬的原理。 首先說一下上一篇介紹的人名

Python自然語言處理實戰(3):中文技術

3.1、中文分詞簡介       在英文中,單詞本身就是“詞”的表達,一篇英文文章就是“單詞”加分隔符(空格)來表示的,而在漢語中,詞以字為基本單位的,但是一篇文章的語義表達卻仍然是以詞來劃分的。       自中文自動分詞被提出以來,歷經將近30年的探索,提出了很多方法,可

自然語言處理基於java實現(1) 之 中文

下一篇<自然語言處理基於java實現(2) 之 詞性註釋> 程式原始碼下載 一. 題目如下: 1、針對人民日報語料,編寫程式: 抽取詞表 統計總詞數、不同的詞及其次數。輸出檔案格式: 第一行

HanLP-路徑

今天介紹的內容是最短路徑分詞。最近換回了thinkpad x1,原因是mac的13.3寸的螢幕看程式碼實在是不方便,也可能是人老了

自然語言處理工具HanLP在 Spring Boot中的應用

本文共 782字,閱讀大約需要 2分鐘 ! 概 述 HanLP 是基於 Java開發的 NLP工具包,由一系列模型與演算法組成,目標是普及自然語言處理在生產環境中的應用。而且 HanLP具備功能完善、效能高效、架構清晰、語料時新、可自定義的特點,因此十分好上手,本文就結合 Spring Bo

Hanlp自然語言處理工具的使用演練

Hanlp是由一系列模型與演算法組成的工具包,目標是普及自然語言處理在生產環境中的應用。Hanlp具備功能完善、效能高效、架構清洗、語料時新、可自定義的特點;提供詞法分析(中文分詞、磁性標註、命名實體識別)、句法分析、文字分類和情感分析等功能。 本篇將使用者輸入的語句根據詞庫進行分詞、關鍵詞提取、摘要提取、

Spring Boot中對自然語言處理工具hanlp的呼叫詳解

概 述 HanLP 是基於 Java開發的 NLP工具包,由一系列模型與演算法組成,目標是普及自然語言處理在生產環境中的應用。而且 HanLP具備功能完善、效能高效、架構清晰、語料時新、可自定義的特點,因此十分好上手,本文就結合 Spring Boot來將 HanLP用起來!  

自然語言處理工具HanLP的Python介面

pyhanlp: Python interfaces for HanLP HanLP的Python介面,支援自動下載與升級HanLP,相容py2、py3。 安裝 pip install pyhanlp 使用命令hanlp來驗證安裝,如因網路等原因自動安裝HanL

Hanlp自然語言處理工具之詞法分析器

  本章是接前兩篇《分詞工具Hanlp基於感知機的中文分詞框架》和《基於結構化感知機的詞性標註與命名實體識別框架》的。

自然語言處理工具python呼叫hanlp的方法步驟

Python呼叫hanlp的方法此前有分享過,本篇文章分享自“逍遙自在017”的部落格,個別處有修改,閱讀時請注意! 1.首先安

哈工大自然語言處理工具pyltp的本地安裝方法

在研究中發現,哈工大的LTP在分詞、實體識別等方面的效果甚至要優於中科院ICTCLAS,而且LTP還具備了目前在中文資訊處理領域較為罕見的語義角色標註(SRL)功能。以前我都是直接以get方式通過LTP-Cloud去使用的,但是由於受限於網速,當語料較大時 執行速度較慢。於是近期考慮在自己的機子

Python呼叫自然語言處理HanLP

Python呼叫自然語言處理包HanLP3.png一句話安裝pyhanlp,全自動下載安裝配置,還支援升級。 pip install pyhanlp 呼叫方法參考專案主頁:https://github.com/hankcs/pyhanlp Windows使用者如果遇到: building

斯坦福自然語言處理工具python環境配置

斯坦福自然語言處理工具python環境配置 1. 簡介 Stanford nlp group 是世界知名的自然語言處理研究組,該組的研究內容涵蓋了從基本的計算語言原理研究到NLP的關鍵應用技術。其中,該組所開發的coreNLP工具被廣泛應用,該工具提供了分詞、詞性標註、語

推薦一個自然語言處理工具——AllenNLP

AllenNLP: https://allennlp.org/   AllenNLP由艾倫人工智慧研究所建立和維護,與華盛頓大學和其他地方的研究人員密切合作。AllenNLP專案擁有一支由業內最佳研究人員和軟體工程師組成的專業團隊,與充滿活力的開源開發社群一起,在長期發展方面具有獨

Apache OpenNLP 1.9.1 釋出,自然語言處理工具

   Apache OpenNLP 1.9.1 釋出了,OpenNLP 是一個機器學習工具包,用於處理自然語言文字。支援大多數常用的 NLP 任務,例如:標識化、句子切分、部分詞性標註、名稱抽取、組塊、解析等。 更新內容如下: 新增 TrigramNameFeatureGe

自然語言處理工具包MALLET教程-中文版安裝使用指南

Mallet:自然語言處理工具包 MALLET是基於java的自然語言處理工具箱,包括分檔得分類、句類、主題模型、資訊抽取等其他機器學習在文字方面的應用,雖然是文字的應用,但是完全可以拿到多媒體方面來,例如機器視覺。 MALLET包含了足夠的文字分類的演算法,還有特徵提