结构化识别装置标记框架是一个完整的在线学习框架,使用识别装置进行序列标记任务,应用于中文分词、词性标记、命名实体识别三个问题,该框架通过一种算法解决了三个问题本文首先介绍中文分词框架的部分内容。
中文分词
训练
您只需指定输入数据的路径(对于单个文档为文件路径,对于多文档为文件夹路径,处理灵活)和模型的存储位置。
命令行
jva-cphanlp.jar com.hank cs.Han LP.model.perceptron.main-task CWS-train-referencedata/test/pku 98/199801
API
public void testTrain () throws Exception
{
perceptrontrainertrainer=newcwstrainer (;
perceptron trainer.result result=trainer.train ()
' data/test/pku98/199801.txt ',
Config.CWS_MODEL_FILE
);
//System.out.printf (准确率F1:%.2fn (,result.prf[2] ) );
}
事实上,数据和任务允许您自由调整迭代次数、压缩率和线程数以确保最佳结果:
//*
*培训
*
* @ param培训文件培训集
* @ param develop文件开发集
* @ param模型文件模型保存路径
* @param compressRatio压缩率
* @param maxIteration的最大迭代次数
* @param threadNum线程数
包含* @return模型和精度的结构
* @throws IOException
*/
publicresulttrain (stringtrainingfile,String developFile,
String modelFile,final double compressRatio,
final int maxIteration,final int threadNum ) throws IOException
单线程时使用AveragedPerceptron算法,收敛性好; 多线程时使用StructuredPerceptron,变动较大。 有关两种算法的精度比较,请参见下一节。 当前缺省的多线程、线程数为系统的CPU内核数。 请根据自己的需求平衡精度和速度。
准确度
sighan2005在msr数据集上的性能评估结果如下。
对词汇没有进行任何预处理
只使用了7个状态特征,没有使用词典
压缩率0.0,迭代次数50
时间包括加载数据和序列化模型
在任何PerceptronTagger中,用户都可以调用精度评估界面。
//*
*性能测试
*
* @param corpora数据集
* @return默认返回accuracy,部分子类可能返回p、r、F1
* @throws IOException
*/
public double [ ] evaluate (string corpora ) throws IOException
速度
目前,感知机分词是所有“单词结构词”分词器实现中最快的,比自己编写的CRF解码快1倍。 新版的CRF词法分析器框架复用了感知机的维特比译码算法,速度持平。
测试时必须关闭词法分析器自定义词典、词性标记和命名实体识别
测试环境Java8 i7-6700K
测试
测试时,只需提供分词模型的路径即可。
publicvoidtestcws
{
perceptronsegmentersegmenter=newperceptronsegmenter (config.CWS _ model _ file );
system.out.println (segmenter.segment ) (“商品和服务”);
}
通常,对商品和服务的分词结果为[商品、和、服务]。 训练任何词汇时建议尝试这个简单的句子,作为HelloWorld进行测试。 如果此示例错误,则表示数据格式、规模或API调用存在问题。 不应急于部署在线,而应仔细进行故障排除。
此外,数据包中打包了1998年1月通过人民日报资料训练的模型,如果没有传递路径,则默认加载配置文件中指定的模型。
在本系统中,分词器PerceptronSegmenter的作用更为单一,只负责分词,不负责词性标注和实体识别的命名。 这是接口设计上的一个新尝试,将来有可能在v2.0中大规模采用这种思路进行重构。