`

分词工具Hanlp基于感知机的中文分词框架

 
阅读更多

 

结构化感知机标注框架是一套利用感知机做序列标注任务,并且应用到中文分词、词性标注与命名实体识别这三个问题的完整在线学习框架,该框架利用1个算法解决3个问题,时自治同意的系统,同时三个任务顺序渐进,构成流水线式的系统。本文先介绍中文分词框架部分内容。

中文分词

训练

只需指定输入语料的路径(单文档时为文件路径,多文档时为文件夹路径,灵活处理),以及模型保存位置即可:

命令行

java -cp hanlp.jar com.hankcs.hanlp.model.perceptron.Main -task CWS -train -reference data/test/pku98/199801.txt -model data/test/perceptron/cws.bin

API

 

    public void testTrain() throws Exception

    {        

        PerceptronTrainer trainer = new CWSTrainer();

        PerceptronTrainer.Result result = trainer.train(

            "data/test/pku98/199801.txt",

            Config.CWS_MODEL_FILE

            );

        //        System.out.printf("准确率F1:%.2f\n", result.prf[2]);

    }

事实上,视语料与任务的不同,迭代数、压缩比和线程数都可以自由调整,以保证最佳结果:

 

    /**

     * 训练

     *

     * @param trainingFile  训练集

     * @param developFile   开发集

     * @param modelFile     模型保存路径

     * @param compressRatio 压缩比

     * @param maxIteration  最大迭代次数

     * @param threadNum     线程数

     * @return 一个包含模型和精度的结构

     * @throws IOException

     */

    public Result train(String trainingFile, String developFile,

                        String modelFile, final double compressRatio,

                        final int maxIteration, final int threadNum) throws IOException

单线程时使用AveragedPerceptron算法,收敛较好;多线程时使用StructuredPerceptron,波动较大。关于两种算法的精度比较,请参考下一小节。目前默认多线程,线程数为系统CPU核心数。请根据自己的需求平衡精度和速度。

 

准确率

 

sighan2005的msr数据集上的性能评估结果如下:

 



 

 

<!--[if !supportLists]-->l <!--[endif]-->语料未进行任何预处理

<!--[if !supportLists]-->l <!--[endif]-->只使用了7种状态特征,未使用词典

<!--[if !supportLists]-->l <!--[endif]-->压缩比0.0,迭代数50

<!--[if !supportLists]-->l <!--[endif]-->总耗时包含语料加载与模型序列化

<!--[if !supportLists]-->l <!--[endif]-->对任意PerceptronTagger,用户都可以调用准确率评估接口:

 

 

    /**

     * 性能测试

     *

     * @param corpora 数据集

     * @return 默认返回accuracy,有些子类可能返回P,R,F1

     * @throws IOException

     */

    public double[] evaluate(String corpora) throws IOException

速度

目前感知机分词是所有“由字构词”的分词器实现中最快的,比自己写的CRF解码快1倍。新版CRF词法分析器框架复用了感知机的维特比解码算法,所以速度持平。

 



 

 

<!--[if !supportLists]-->l <!--[endif]-->测试时需关闭词法分析器的自定义词典、词性标注和命名实体识别

<!--[if !supportLists]-->l <!--[endif]-->测试环境 Java8 i7-6700K

测试

测试时只需提供分词模型的路径即可:

 

public void testCWS() throws Exception

{

    PerceptronSegmenter segmenter = new PerceptronSegmenter(Config.CWS_MODEL_FILE);

    System.out.println(segmenter.segment("商品和服务"));

}

 

正常情况下对商品和服务的分词结果为[商品, 和, 服务]。建议在任何语料上训练时都试一试这个简单的句子,当作HelloWorld来测试。若这个例子都错了,则说明语料格式、规模或API调用上存在问题,须仔细排查,而不要急着部署上线。

 

另外,数据包中已经打包了在人民日报语料1998年1月份上训练的模型,不传路径时将默认加载配置文件中指定的模型。

 

在本系统中,分词器PerceptronSegmenter的职能更加单一,仅仅负责分词,不再负责词性标注或命名实体识别。这是一次接口设计上的新尝试,未来可能在v2.0中大规模采用这种思路去重构。

  • 大小: 11.8 KB
  • 大小: 54.6 KB
分享到:
评论

相关推荐

    python写的基于感知机的中文分词系统

    基于字的用感知机实现的中文分词系统。完全训练后对微软的测试集精度可以达到96%多。我上传的版本是完整的代码(训练和分词),大家自己用附带的微软训练数据训练就可以了,只有一个文件。 代码总的来说写的还是很...

    读书笔记2之中文分词流程HanLP

    中文分词是自然语言处理(NLP)中的基础任务,主要目标是将连续的汉字序列分割成具有独立语义的词语。在这个过程中,涉及到多个步骤和技术。以下是对中文分词流程以及汉语文本处理库HanLP的详细解析。 首先,**句子...

    基于HanLP对地址字符串分词流程图.eddx

    基于HanLP对地址字符串分词流程图.eddx

    alice 加入ik分词,中文空格分词,hanlp 语义分词

    HanLP是一款由哈工大社会计算与信息检索研究中心开发的强大中文处理工具包,除了具备基本的分词功能外,还提供了词性标注、命名实体识别等功能。HanLP的分词效果通常优于IKAnalyzer,尤其是在处理复杂语境时。 ### ...

    基于HanLP自然语言处理包的elasticsearch分词器 hanlp-tokenizer-master

    基于HanLP自然语言处理包的elasticsearch分词器 功能 本分词器使用HanLP提供的维特比分词 屏蔽了本地配置用户词典 增加同义词索引功能 增加远程词典热更新(用户词典,停词典,同义词典) 使用 目前支持的es版本为...

    Java中通过HanLP实现文本分词、提取关键词、聚类(工具资源+实例)

    HanLP是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构...提供词法分析(中文分词、词性标注、命名实体识别)、句法分析、文本分类和情感分析等功能。

    基于感知机的分词算法简介

    我原来发过一个“python写的基于感知机的中文分词系统”的资源,那个是很完整的代码,包括训练数据等。但是代码没有任何注释,所以我又提交这个说明文档。但这个文档是用pageplayer做的(pageplayer压缩后有19M我发...

    中文分词工具类

    最新中文分词工具jar包,使用方便,分词准确,中文分析的一个不错的包

    NLPIR、pyltp、jieba、hanlp、snownlp分词工具安装使用记录

    最近适用了这五款分词工具,光是下载安装就踩了很多坑,特别是pyltp...三、 Jieba第一步:pip安装,指令为第二步:基于python中jieba包的中文分词中详细使用。四、 Hanlp第一步:下载Hanlp 。第二步:在eclipse里导入项

    hanlp分词各类词性状态表,汉普分词规格表,hanlp各类词性表,hanlp分词词性表,nlp领域

    hanlp分词各类词性状态表: 比如: a 形容词 ad 副形词 b 区别词 n 名词 h 前缀 i 成语 j 简称略语 k 后缀 l 习用语 m 数词 mg 数语素 Mg 甲乙丙丁之类的数词 mq 数量词

    HanLP实现文本分词、提取关键词、聚类(工具资源+实例)

    HanLP是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构...提供词法分析(中文分词、词性标注、命名实体识别)、句法分析、文本分类和情感分析等功能。

    中文地址分词及匹配项目

    标题中的“中文地址分词及匹配项目”是一个专注于处理中文地址的系统,它涉及到两个主要技术:中文地址的分词和地址匹配。分词是将连续的文本序列切分成具有独立意义的词语,而在中文环境下,由于没有明显的空格作为...

    ansj中文分词工具

    **ansj中文分词工具**是一款专为处理中文文本而设计的开源分词库,尤其在2015年时,其在Java开发领域中备受瞩目。作为一个专业的IT大师,我将详细介绍ansj分词工具及其在Java工程中的应用。 **一、ansj分词工具概述...

    基于java的开发源码-中文分词工具包 smallseg.zip

    基于java的开发源码-中文分词工具包 smallseg.zip 基于java的开发源码-中文分词工具包 smallseg.zip 基于java的开发源码-中文分词工具包 smallseg.zip 基于java的开发源码-中文分词工具包 smallseg.zip 基于java的...

    关键词分词工具(宏命令) 改进版(.rar

    这个“改进版”工具可能采用了更先进的分词算法,比如基于词典的分词方法、统计分词方法(如最大匹配法、最少切分法、双向最大匹配法等),甚至可能结合了深度学习技术,如词嵌入(Word Embedding)和双向长短时记忆...

    基于Elasticsearch的HanLP分词插件.zip

    本项目是一个基于Elasticsearch的HanLP分词插件,旨在为Elasticsearch提供强大的中文分词功能。HanLP是一个开源的中文自然语言处理工具包,支持多种分词方式和自然语言处理任务。通过本插件,用户可以在Elastic...

    Hanlp分词实现从网络片段中提取省份和城市

    在这个场景中,我们关注的是如何利用Java语言和HanLP分词库来实现从网络片段中抽取省份和城市这一特定需求。HanLP是由科大讯飞开发的一款高性能的自然语言处理工具包,它提供了丰富的中文分词、词性标注、命名实体...

    关键词分词工具(带宏)

    关键词分词工具带宏关键词分词工具带宏关键词分词工具带宏关键词分词工具带宏关键词分词工具带宏

    百度竞价推广关键词自动分词工具 关键词分词工具(宏命令)改进版 过万关键词轻松

    百度竞价推广关键词自动分词工具,wps可用,需启用宏

    seo优化工具-中文分词工具

    中文分词工具是SEO优化中不可或缺的工具,它专门处理中文文本,因为中文句子由汉字组成,不像英文单词之间有明显的空格分隔。中文分词就是将连续的汉字序列切分成具有语义的词汇单位,这对于理解和分析中文内容至关...

Global site tag (gtag.js) - Google Analytics