`

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

 

  • 大小: 59.5 KB
分享到:
评论

相关推荐

    基于Elasticsearch的HanLP分词插件.zip

    多种分词方式支持HanLP提供的多种分词方式,包括标准分词、索引分词、NLP分词、CRF分词、N最短路分词、最短路分词和极速词典分词。 自定义词典允许用户加载自定义词典,以增强分词效果。 远程词典支持支持从远程...

    hanlp分词解析字符串.zip

    同时,HanLP还支持多种分词模式,包括基于规则的分词、基于统计的分词和CRF分词等,用户可以根据实际需求选择合适的分词模式。 在解析字符串方面,HanLP也表现出了强大的能力。它能够将复杂的字符串进行深入解析,...

    基于CRF++的中文分词 数据+CRF++工具+java源码

    中文分词是自然语言处理(NLP)中的基础任务,它是指将连续的汉字序列切分成具有独立语义的词语单元,这对于理解和分析中文文本至关重要。CRF(Conditional Random Field,条件随机场)是一种概率模型,常用于序列...

    基于CRF++的中文分词 数据+CRF++工具+java源码.zip

    中文分词是自然语言处理(NLP)中的一个基础任务,因为中文没有明显的词边界,如英文中的空格,因此需要通过特定算法将连续的汉字序列切分成有意义的词语。CRF++是一种条件随机场(Conditional Random Fields)的...

    分词词法分析算法-BiGRU+CRF

    众所*知,通过Bilstm已经可以实现分词或命名实体标注了,同样地单独的CRF也可以很好的实现。既然LSTM都已经可以预测了,为啥要搞一个LSTM+CRF的hybrid model? 因为单独LSTM预测出*的标注可能会出现(I-Organization-...

    基于Python和PFR语料库实现的CRF中文分词源码+数据+超详细注释(课程作业).zip

    基于Python和PFR语料库实现的CRF中文分词源码+数据+超详细注释(课程作业).zip基于Python和PFR语料库实现的CRF中文分词源码+数据+超详细注释(课程作业).zip基于Python和PFR语料库实现的CRF中文分词源码+数据+超详细...

    crf++ 中文分词

    **中文分词是自然语言处理中的基础步骤,它将连续的汉字序列切分成具有语义意义的词语单元,为后续的文本分析、信息提取、情感分析等任务提供基础。CRF++是一个开源的条件随机场(Conditional Random Field)库,...

    CRF中文语句结构分析

    **CRF中文语句结构分析** CRF(Conditional Random Fields,条件随机场)是一种概率图模型,常用于序列标注任务,如词性标注、命名实体识别、句法分析等自然语言处理(NLP)领域的问题。在中文语句结构分析中,CRF...

    做分词用到的一个工具包CRF++,亲测可以使用

    做分词用到的一个工具包CRF++,亲测可以使用.安装过程有什么问题的可以看下我的博客: http://blog.csdn.net/gdufstfknight/article/details/79030743

    Python-基于UniversalTransformerCRF的中文分词和词性标注

    Sequence labeling base on universal transformer (Transformer encoder) and CRF; 基于Universal Transformer CRF 的中文分词和词性标注

    一种优化的用于中文分词的CRF机器学习模型.pdf

    【标题与描述解析】: 该文档主要讨论了一种针对中文分词问题的优化的条件随机场(Conditional Random Fields, CRF)机器学习模型。优化的目的是为了减少训练时间和内存消耗,提高分词速度和准确性。 【核心知识点】...

    自定义语法与CFG,通过hanlp和nltk的CRF语法解析算法进行语法树构建,并使用for循环进行遍历树,然后分词合并成短语

    通过hanlp和nltk的CRF语法解析算法进行语法树构建,并使用for循环进行遍历树,然后分词合并成短语,然后标记 # cfg.py 通过hanlp和nltk的CRF语法解析算法进行语法树构建 ``` /home/kuo/anaconda2/envs/py3/bin/...

    CRF++ 训练中文分词

    CRF++是一款开源的条件随机场(Conditional Random Fields, CRF)工具,广泛应用于自然语言处理(Natural Language Processing, NLP)任务,特别是在中文分词领域。条件随机场是一种统计建模方法,常用于序列标注...

    crf分词标注训练语料

    在自然语言处理(NLP)领域,中文分词是一项基础且关键的任务,它涉及到将连续的汉字序列分割成有意义的词汇单元。CRF(Conditional Random Field,条件随机场)是一种常用的序列标注模型,在中文分词任务中表现出色...

    CRF 分词算法

    **CRF分词算法详解** 条件随机场(Conditional Random Fields, CRF)是一种在序列标注任务中广泛应用的统计建模方法。在这个压缩包文件中,包含了一个名为"crfparser_0.10"的程序,它是一个实现CRF算法的源代码库,...

    Python-语义理解口语理解项目包含有词法分析中文分词词性标注命名实体识别

    在这个项目中,词法分析可能使用了如Jieba、HanLP或THULAC等工具,它们能够高效地对中文文本进行切分。 2. **中文分词**:由于中文没有明显的空格来区分单词,分词是必要的。Jieba等库可以识别出连续的汉字序列,并...

    人工智能中自然语言词法分析器

    词法分析器的主要工作是对输入的句子进行分词,即将连续的字符序列分割成具有特定含义的词汇单元。在英语中,这些词汇单元可能是单词;而在汉语中,由于没有明显的空格分隔,词法分析器还需要解决复杂的分词问题。...

    CRF分词实验

    在中文文本处理中,由于没有明显的空格分隔,词语分词是预处理的第一步,它对于后续的文本分析、信息检索、机器翻译等任务至关重要。条件随机场(Conditional Random Field, CRF)是一种常用的序列标注模型,在分词...

Global site tag (gtag.js) - Google Analytics