Hanlp分詞之CRF中文詞法分析詳解

2020-12-17 大快搜索

這是另一套基於CRF的詞法分析系統,類似感知機詞法分析器,提供了完善的訓練與分析接口。

CRF的效果比感知機稍好一些,然而訓練速度較慢,也不支持在線學習。

默認模型訓練自OpenCorpus/pku98/199801.txt,隨hanlp 1.6.2以上版本發布

語料格式等與感知機詞法分析器相同,請先閱讀《感知機詞法分析器》。

中文分詞

訓練

CRFSegmenter segmenter = new CRFSegmenter(null);

segmenter.train("data/test/pku98/199801.txt", CWS_MODEL_PATH);

輸出為HanLP私有的二進位模型,有興趣的話還可以通過命令導出為兼容CRF++的純文本格式。

java -cp hanlp.jar com.hankcs.hanlp.model.crf.crfpp.crf_learn -T cws.bin cws.txt

與CRF++兼容

由於C++的運行效率和內存效率優於Java,所以推薦直接利用CRF++執行大規模訓練。

首先將人民日報語料轉換為CRF++格式:

CRFSegmenter segmenter = new CRFSegmenter(null);

segmenter.convertCorpus("data/test/pku98/199801.txt", "data/test/crf/cws-corpus.tsv");

然後準備一份特徵模板,或者直接用HanLP默認的:

segmenter.dumpTemplate("data/test/crf/cws-template.txt");

接著用CRF++的crf_learn執行訓練:

crf_learn cws-template.txt cws-corpus.tsv cws -t

·此處必須使用-t命令CRF++輸出文本格式的模型cws.txt

·HanLP只兼容CRF++的文本模型,不兼容二進位

將cws.txt格式的模型傳入CRFSegmenter或CRFLexicalAnalyzer的構造函數即可創建分詞器,同時HanLP會自動創建二進位緩存.txt.bin,下次加載耗時將控制在數百毫秒內。

預測

可通過如下方式加載:

CRFSegmenter segmenter = new CRFSegmenter(CWS_MODEL_PATH);

List<String> wordList = segmenter.segment("商品和服務");

System.out.println(wordList);

不傳入模型路徑時將默認加載配置文件指定的模型。

詞性標註

CRF詞性標註器的訓練與加載與中文分詞類似,對應CRFPOSTagger。

命名實體識別

CRF命名實體識別也是類似的用法,對應CRFNERecognizer。

CRF詞法分析器

訓練了1至3個模型後,可以構造CRF詞法分析器:

/**

* 構造CRF詞法分析器

*

* @param cwsModelPath CRF分詞器模型路徑

* @param posModelPath CRF詞性標註器模型路徑

* @param nerModelPath CRF命名實體識別器模型路徑

*/

public CRFLexicalAnalyzer(String cwsModelPath, String posModelPath, String nerModelPath) throws IOException

/**

* 加載配置文件指定的模型

*

* @throws IOException

*/

public CRFLexicalAnalyzer() throws IOException

構造後可以調用analyze接口或與舊接口兼容的seg:

CRFLexicalAnalyzer analyzer = new CRFLexicalAnalyzer();

String[] tests = new String[]{

"商品和服務",

"上海華安工業(集團)公司董事長譚旭光和秘書胡花蕊來到美國紐約現代藝術博物館參觀",

"微軟公司於1975年由比爾·蓋茲和保羅·艾倫創立,18年啟動以智慧雲端、前端為導向的大改組。" // 支持繁體中文

};

for (String sentence : tests)

{

System.out.println(analyzer.analyze(sentence));

System.out.println(analyzer.seg(sentence));

}

在1.6.2以上版本中,所有的詞法分析接口都同時支持簡繁。

相關焦點

  • Java中文語言處理HanLP
    官網:http://hanlp.linrunsoft.com/1、中文分詞:http://hanlp.linrunsoft.com/doc/_build/html/segment.html2、摘要關鍵字:http://hanlp.linrunsoft.com/doc/_build/html
  • 自然語言處理工具python調用hanlp中文實體識別
    Hanlp作為一款重要的中文分詞工具,在GitHub的用戶量已經非常之高,應該可以看得出來大家對於hanlp這款分詞工具還是很認可的。本篇繼續分享一篇關於hanlp的使用實例即Python調用hanlp進行中文實體識別。
  • 【推薦】中文自然語言處理利器-HanLP
    如果用戶有自定義的需求,可以參考方式二,使用hanlp.properties進行配置。HanLP中的數據分為詞典和模型,其中詞典是詞法分析必需的,模型是句法分析必需的。data│├─dictionary└─model用戶可以自行增刪替換,如果不需要句法分析等功能的話,隨時可以刪除model文件夾。
  • pyhanlp 停用詞與用戶自定義詞典功能詳解
    hanlp的詞典模式之前我們看了hanlp的詞性標註,現在我們就要使用自定義詞典與停用詞功能了,首先關於HanLP的詞性標註方式具體請看HanLP詞性標註集。print(HanLP.segment(text))# 增加用戶詞典,對其他分詞器同樣有效# 注意此處,CRF分詞器將單身狗分為了n 即使單身狗:"nz 1024 n 1"CRFnewSegment = HanLP.newSegment("crf
  • 韋編 | HanLP——面向中文的自然語言處理常用工具包
    其基本功能有:中文分詞  詞性標註  命名實體識別  依存句法分析  關鍵詞提取  新詞發現  短語提取  自動摘要  文本分類  拼音簡繁  文本推薦  情感分析  word2vec 文本聚類等。HanLP由三部分組成:HanLP = .jar + data + .properties官方文檔:github地址,https://github.com/hankcs/HanLP下載data和jar文件:https://github.com/hankcs/HanLP/tree/v1.7.7解壓後,在配置文件中(hanlp.properties
  • 【分詞】從why到how的中文分詞詳解,從算法原理到開源工具
    近期Jieba分詞器中就上線了這麼一個用這種方法得到的先進分詞模型(其實是個通用的詞法分析模型),感興趣的小夥伴可以自行了解一下。預訓練模型和知識蒸餾的資料很多了,這裡就不贅述啦。jieba: 不會 講課 的 程式設計師 不是 一名 好 的 算法 工程2 THULAC(THU Lexical Analyzer for Chinese)由清華大學自然語言處理與社會人文計算實驗室研製推出的一套中文詞法分析工具包
  • 97.5%準確率的深度學習中文分詞(字嵌入+Bi-LSTM+CRF)
    本文給出基於深度學習的中文分詞實現,藉助大規模語料,不需要構造額外手工特徵,在2014年人民日報語料上取得97.5%的準確率。模型基本是參考論文:http://www.aclweb.org/anthology/N16-1030相關方法中文分詞是個比較經典的問題,各大網際網路公司都會有自己的分詞實現。
  • 探索小米開源分詞MiNLP基於深度學習的分詞工作
    https://github.com/XiaoMi/MiNLP大家可以star + fork小米自然語言處理平臺(MiNLP)具備詞法、句法、語義分析等數十個功能模塊
  • NLP-入門實體命名識別(NER)+Bilstm-CRF模型原理Pytorch代碼詳解——最全攻略
    希望能夠以這篇文章為載體,幫助其他跟我一樣的學習者梳理、串起NER的各個小知識點,最後上手NER的主流模型(Bilstm+CRF)(文中講的是pytorch,但是懂了pytorch去看keras十分容易相信我哈)二、主流模型Bilstm-CRF實現詳解(Pytorch篇)一、NER資料參考:NLP之CRF應用篇(序列標註任務)(CRF++的詳細解析、Bi-LSTM+CRF
  • 【NER】NLP-入門實體命名識別(NER)+Bilstm-CRF模型原理Pytorch代碼詳解——最全攻略
    )代碼運行環境一、NER資料參考:NLP之CRF應用篇(序列標註任務)(CRF++的詳細解析、Bi-LSTM+CRF中CRF層的詳細解析、Bi-LSTM後加CRF的原因、CRF和Bi-LSTM+CRF優化目標的區別)CRF++完成的是學習和解碼的過程:訓練即為學習的過程,預測即為解碼的過程。
  • 分詞工具哪家強?中文詞法分析工具LAC測評來啦
    By    Charlotte77前言:本文轉載自AINLP,是對百度深度學習中文詞法分析工具的詳細體驗和測評,大家可以對比一下其他的工具分詞效果,文末可以關注AINLP體驗各種不同分詞工具的效果~            關鍵詞
  • 【分詞】中文分詞的古今中外,你想知道的都在這裡
    近期Jieba分詞器中就上線了這麼一個用這種方法得到的先進分詞模型(其實是個通用的詞法分析模型),感興趣的小夥伴可以自行了解一下。預訓練模型和知識蒸餾的資料很多了,這裡就不贅述啦。jieba: 不會 講課 的 程式設計師 不是 一名 好 的 算法 工程2 THULAC(THU Lexical Analyzer for Chinese)由清華大學自然語言處理與社會人文計算實驗室研製推出的一套中文詞法分析工具包
  • 中文分詞工具測評
    引言分詞對於研究和應用中文自然語言處理的童鞋來說,都是一個非常非常基礎的部件,分詞的質量直接影響到後續詞性標註、命名實體識別、句法分析等部件的準確性
  • NLP快速入門:手把手教你用HanLP做中文分詞
    中文分詞技術作為中文自然語言處理的第一項核心技術,是眾多上層任務的首要基礎工作,同時在日常的工作中起著基礎性的作用。本文將講解如何在Python環境下調用HanLP包進行分詞,並結合Python語言簡約的特性,實現一行代碼完成中文分詞。
  • 中文分詞技術全解析,你想知道的都在這裡(附開源工具)
    中的"Hey"和"you"是需要與身後的標點分隔開的為什麼需要分詞?能不能不分詞?中文分詞難在哪?從古至今的分詞算法原理從中到外的分詞工具當處理大規模語言文本時,要理解文本內容進行分析,我們人類通常是通過「詞」這個最小的可理解性語言單位來進行初步理解的,但為了提高效率,使用機器(計算機)來進行語言文本的分析,我們也可以從「分詞」開始。
  • 專欄 中文分詞工具測評
    分詞對於研究和應用中文自然語言處理的童鞋來說,都是一個非常非常基礎的部件,分詞的質量直接影響到後續詞性標註、命名實體識別、句法分析等部件的準確性
  • tensorflow中crf源碼解析
    剛學習lstm+crf時,就閱讀過crf層的源碼,發現時間一久,就忘了。這次準備重新閱讀一下,順便做個筆記。主要的目的是深入理解代碼細節,提高自己編寫模型的能力。本文假定大家對lstm+crf的基本原理基本清楚。
  • 百度詞法分析工具 LAC 全面升級,2.0 版在線極速體驗
    關於中文詞法分析(中文分詞、詞性標註、命名實體識別)相關的工具,我們在之前已經多次提到過百度LAC,除了在易用性上稍弱外,其他方面,特別在專名識別的橫向對比中還是很亮眼的。,實現中文分詞、詞性標註、專名識別等功能。
  • 一文詳解如何用 python 做中文分詞
    這種工作,專業術語叫做分詞。在介紹分詞工具及其安裝之前,請確認你已經閱讀過《從零開始教你用 Python 做詞雲》一文,並且按照其中的步驟做了相關的準備工作,然後再繼續依照本文的介紹一步步實踐。  分詞中文分詞的工具有很多種。有的免費,有的收費。有的在你的筆記本電腦裡就能安裝使用,有的卻需要聯網做雲計算。
  • 英語語法詳解:現在分詞和動名詞區別
    新東方網>英語>英語學習>語法詞彙>語法指導>正文英語語法詳解:現在分詞和動名詞區別 2016-01-19 15:02 來源:北京新東方北美VIP 作者:路宇