中文天然语言处理工具hanlp隐马角色标注详解

本文旨在介绍如何利用HanLP训练分词模型,包括语料格式、语料预处理、训练接口、输出格式等。 目前HanLP内置的训练接口是针对一阶HMM-NGram设计的,另外附带了通用的语料加载工具,能够经过少许代码导出供其余训练工具使用的特定格式(如CRF++)。算法

语料格式ide

输入语料格式为人民日报分词语料库格式。该格式并无明确的规范,但整体知足如下几点:函数

一、单词与词性之间使用“/”分割,如华尔街/nsf,且任何单词都必须有词性,包括标点等。工具

二、单词与单词之间使用空格分割,如美国/nsf 华尔街/nsf 股市/n。spa

三、支持用[]将多个单词合并为一个复合词,如[纽约/nsf 时报/n]/nz,复合词也必须遵照1和2两点规范。.net

你能够参考OpenCorpus/pku98/199801.txt(做者并没有版权,请勿询问)。设计

语料预处理对象

语料预处理指的是将语料加载到内存中,根据须要增删改其中部分词语的一个过程。 在HanLP中,这是经过CorpusLoader.walk实现的:接口

 

        CorpusLoader.walk("path/to/your/corpus", new CorpusLoader.Handler()内存

        {

            @Override

            public void handle(Document document)

            {

                System.out.println(document);

            }

        });

其中,document对象就是加载到内存的文档,对应某一个文本文件。用户能够经过document.getSimpleSentenceList等接口获取文档中的句子列表,每一个句子都是单词的链表,具体参数请参考source.jar,再也不赘述。而Handler是一个处理逻辑(lambda函数),在此能够编写本身的预处理代码。

 

· CRF分词采用BMES标注集,从人民日报转换到CRF训练语料的完整预处理代码请参考com.hankcs.test.model.TestCRF#testPrepareCRFTrainingCorpus。

· 若不使用上述预处理代码则请注意:因为在HanLP实现的CRF分词解码算法中,数词被转换为M,英文被转换为W;因此在训练CRF分词以前,须要用相同的逻辑预处理语料。转换代码请参考:com.hankcs.test.model.TestCRF#compile

训练HMM-NGram分词模型

HMM-NGram在HanLP中特地被处理为文本形式,方便用户理解、修改HMM-NGram模型(习惯上称为词典,但这并不表明它不是模型)。此处的训练就是为了获得分词所需的所有模型,而训练,只需一两行代码:

 

 final NatureDictionaryMaker dictionaryMaker = new NatureDictionaryMaker();

        CorpusLoader.walk("path/to/your/corpus", new CorpusLoader.Handler()

        {

            @Override

            public void handle(Document document)

            {

                dictionaryMaker.compute(CorpusUtil.convert2CompatibleList(document.getSimpleSentenceList(true)));

            }

        });

        dictionaryMaker.saveTxtTo("data/test/CoreNatureDictionary");

 

其中,document.getComplexSentenceList()表明获取复合词句子列表(即复合词原样输出),用户能够将其替换为CorpusUtil.convert2CompatibleList(document.getSimpleSentenceList(true))来将复合词拆分为单个词语。

 

输出格式

训练后一共得出3个文件:

一、CoreNatureDictionary.txt:单词词性词典

二、CoreNatureDictionary.ngram.txt:二元接续词典

三、CoreNatureDictionary.tr.txt:词性转移矩阵

接下来用户能够经过替换配置文件中的CoreDictionaryPath来使用新训练的词典。

相关文章
相关标签/搜索