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

2020-12-05 大快搜索

這是另一套基於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以上版本中,所有的詞法分析接口都同時支持簡繁。

相關焦點

  • BiLSTM+CRF 的實現詳解
    CRF 是一種常用的序列標註算法,可用於詞性標註,分詞,命名實體識別等任務。BiLSTM+CRF 是目前比較流行的序列標註算法,其將 BiLSTM 和 CRF 結合在一起,使模型即可以像 CRF 一樣考慮序列前後之間的關聯性,又可以擁有 LSTM 的特徵抽取及擬合能力。
  • 簡明條件隨機場CRF介紹 | 附帶純Keras實現
    ▲ 4tag分詞模型中輸出網絡圖而在序列標註任務中,我們的正確答案是一般是唯一的。比如「今天天氣不錯」,如果對應的分詞結果是「今天/天氣/不/錯」,那麼目標輸出序列就是 bebess,除此之外別的路徑都不符合要求。
  • 英語語法篇:現在分詞的內在規律
    大家都知道,分詞(participle)有現在分詞(present participle)和過去分詞(past participle)之分,兩者在意義上有差別,而搞清楚這兩類分詞意義上的差別是正確使用分詞的前提。
  • 海量新聞信息處理中的中文分詞算法研究
    參數的線性鏈CRF把給定輸入序列x得到的狀態序列y的條件概率定義為:               4-2-1 Z(x)是一個範化因子,使得在給定輸入上的所有可能的狀態序列的概率之和為1;表示一個特徵函數,通常取布爾值,是訓練中得到的,與每個特徵相關的權重參數,它的取值反映了特徵函數所代表的事件發生的可能性。
  • 職稱英語考試語法詳解篇:現在分詞
    現在分詞和過去分詞主要差別在於:現在分詞表示「主動和進行」,過去分詞表示「被動和完成」(不及物動詞的過去分詞不表示被動,只表示完成)。分詞可以有自己的狀語、賓語或邏輯主語等。  1、分詞作狀語分詞在句子中作狀語,可以表示時間、條件、原因、結果、讓步、伴隨等。分詞做狀語時,它的邏輯主語與句子的主語一致。
  • CRF用過了,不妨再了解下更快的MEMM?
    相信做 NLP 的讀者朋友們就算沒親自做過也會聽說過 BiLSTM+CRF 做中文分詞、命名實體識別等任務,卻幾乎沒有聽說過 BiLSTM+HMM、BiLSTM+MEMM 的,這是為什麼呢?今天就讓我們來學習一番 MEMM,並且通過與 CRF 的對比,來讓我們更深刻地理解概率圖模型的思想與設計。
  • 聯合漢語分詞和依存句法分析的統一模型:當前效果最佳
    這種模型將漢語分詞和依存句法分析集成在一個分析模型中。它比以前的聯合模型性能更好,並在漢語分詞和依存句法分析中實現了當前最佳的結果。與英語不同,漢語句子由連續的字符組成,詞語之間缺乏明顯的界限。由於詞語常被認為是最小語義單位,因此漢語分詞(CWS)成為下遊漢語自然語言處理的預處理步驟。
  • 現在分詞和過去分詞的用法
    :現在分詞表示「主動和進行」,過去分詞表示「被動和完成」(不及物動詞的過去分詞不表示被動,只表示完成)。分詞可以有自己的狀語、賓語或邏輯主語等。  1)分詞作狀語分詞在句子中作狀語,可以表示時間、條件、原因、結果、讓步、伴隨等。分詞做狀語時,它的邏輯主語與句子的主語一致。作狀語的分詞相當於一個狀語從句。  【例如】  Hearing the news, they all jumped with joy.
  • 高考英語核心突破(分詞)
    (上海2010年33題)【答案】amused【解析】通過分析句子成分可知,此處考察非謂語動詞作賓語補足語。非謂語動詞amuse跟其邏輯主語colleague之間為被動關係,時間上與位於動詞並無明顯先後順序,故選用所給動詞的過去分詞amused,表示狀態。
  • 現在分詞和過去分詞作狀語的用法
    現在分詞(doing)和過去分詞(done)都有副詞性質,可以在句中充當狀語,表示時間、條件、原因、讓步、結果、方式或伴隨狀況等。一、分詞充當狀語時,分詞的邏輯主語一般要和句子主語保持一致。分詞充當狀語可視為狀語從句的簡化版,前提是狀語從句主語和主句主語一致。
  • 分詞的常見用法有哪些?聽一線教師為你解析
    總體來說,分詞為非謂語動詞,有兩種形式:現在分詞和過去分詞。從它們與主語或邏輯主語之間的邏輯關係來說,現在分詞表示主語或邏輯主語進行的主動動作;過去分詞表示主語或邏輯主語所呈現的被動動關係。從分詞與謂語動詞的邏輯關係來說,現在分詞表示一個持續的或者正在進行的動作;過去分詞表示一個已經完成的動作。
  • 0730 知識點分享:現在分詞和過去分詞的用法
    現在分詞和過去分詞主要差別在於:現在分詞表示「主動和進行」,過去分詞表示「被動和完成」(不及物動詞的過去分詞不表示被動,只表示完成)。分詞可以有自己的狀語、賓語或邏輯主語等。1)分詞作狀語分詞在句子中作狀語,可以表示時間、條件、原因、結果、讓步、伴隨等。分詞做狀語時,它的邏輯主語與句子的主語一致。作狀語的分詞相當於一個狀語從句。
  • 自然語言處理條件隨機場CRF
    In practice3.1 Feature templatecrf++ 和 sklearn crfsuite 都是現成的CRF工具包。這裡用crf++舉例說明。實際使用中,我們需要先定義自己的特徵模板Feature template,然後特徵模板會生成特徵函數。訓練集通常用是CoNLL格式,如下圖,表格內容是對特徵模板的解析。
  • 中文分詞最佳紀錄刷新,兩大模型分別解決中文分詞及詞性標註問題
    中文分詞的SOTA中文分詞目的是在中文的字序列中插入分隔符,將其切分為詞。例如,「我喜歡音樂」將被切分為「我/喜歡/音樂」(「/」表示分隔符)。中文語言因其特殊性,在分詞時面臨著兩個主要難點。一是歧義問題,由於中文存在大量歧義,一般的分詞工具在切分句子時可能會出錯。
  • 科學網—幫機器學會中文分詞和詞性標註
    ■本報記者 鄭金武
  • 英語非謂語動詞最全總結:-ed 分詞,-ing 分詞 和 不定式 to do
    動詞的非謂語形式:動詞不做謂語時的固定形式(1)動詞的非謂語形式包括:動詞不定式、動名詞和分詞三種形式;其中分詞又包含現在分詞和過去分詞兩種形式。它們在句子中不能單獨作謂語。(2)動詞不定式:① 形式:動詞不定式基本形式由「不定式記號to+動詞原形」構成。它的否定形式只要在「to」 前面加上「not」。
  • 每天調用達80億次的小米MiNLP平臺,近期又開源了中文分詞功能
    機器之心報導作者:陳萍近日,小米開源了其自然語言處理平臺 MiNLP 的中文分詞功能,具備分詞效果好、輕量級、詞典可定製、多粒度切分以及調用更便捷等特點。在自然語言處理任務中,除了模型之外,底層的數據處理也是非常重要的。
  • 中文分詞新模型幫它進步
    這兩篇論文均聚焦自然語言處理中文分詞領域。據研究人員介紹,分詞及詞性標註是中文自然語言處理的基本任務,但當前沒有比較好的一體化解決方案,而且中文分詞普遍存在歧義和未登錄詞的難題。基於此,兩篇論文各自提出了鍵-值記憶神經網絡的中文分詞模型和基於雙通道注意力機制的分詞及詞性標註模型,將外部知識(信息)融入分詞及詞性標註模型,剔除了分詞「噪音」誤導,提升了分詞及詞性標註效果。
  • 2016考研英語:分詞作狀語的用法總結
    在考研英語閱讀中,長難句的結構分析一直是閱讀理解中一個不容忽視的障礙,盤根錯節的從句和結構複雜的非謂語動詞常常把我們搞得暈頭轉向,不知所措。其實,由於非謂語動詞短語比起從句來說會使整個句子更為緊湊和簡潔,所以在文章中常常會使用到非謂語動詞短語。
  • 簡單有效的多標準中文分詞
    本文介紹一種簡潔優雅的多標準中文分詞方案,可聯合多個不同標準的語料庫訓練單個模型,同時輸出多標準的分詞結果。通過不同語料庫之間的遷移學習提升模型的性能,在10個語料庫上的聯合試驗結果優於絕大部分單獨訓練的模型。模型參數和超參數全部共享,複雜度不隨語料庫種類增長。