Hanlp分词之CRF中文词法分析详解


这是另一套基于 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以上版本中,所有的词法分析接口都同时支持简繁。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31524777/viewspace-2636268/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31524777/viewspace-2636268/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值