大部分状况下,标签体系越复杂准确度也越高,但相应的训练时间也会增长。所以须要根据实际状况选择合适的标签体系。html
特征模版是一个文本文件,其内容以下所示,其中每行表示一个特征。以下模板使用了unigram特征,而且仅以字符自己做为特征而不考虑其余特征。除当前字符外,还使用了其先后3个字,以及上下文的组合做为特征。CRF++会根据特征模版生成相关的特征函数。关于特征模版的详细解释能够查看官网文档,而且对于特征的选择和设计能够灵活配置。网络
#Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U5:%x[-2,0]/%x[-1,0]
U6:%x[-1,0]/%x[0,0]
U7:%x[0,0]/%x[1,0]
U8:%x[1,0]/%x[2,0]
CRF模型的训练数据是一行一个token,一句话由多行token组成,以下图所示。函数
a) 训练命令:crf_learn template_file train_file model工具
其中template_file是模板文件,train_file是训练语料,都须要事先准备好;model是CRF++根据模板和训练语料生成的文件,用于解码。性能
b) 测试命令:crf_test -m model_file test_file > result_file学习
其中 model_file是刚才生成的model文件,test_file是待测试语料,“>result_file”是重定向语句,指将屏幕输出直接输出到文件result_file中。测试
结合规则进行改进.net
看来单从字的角度着眼已然不够,因而试图利用分词和词性标注信息。利用工具对文本进行分词标注,每一行的token仍然是以单字为特征,中间加入词性的信息以下图所示。针对这样的信息构建新的模板,利用中间一列的信息,能够提升准确率。设计
CRF++是著名的条件随机场开源工具,也是目前综合性能最佳的CRF工具。Windows版的无须安装,直接解压便可使用。3d
训练语料至少应具备两列,列间由空格或制表位间隔,且全部行(空行除外)必须具备相同的列数。句子间使用空行间隔。
如:
i. 有两列特征的
太 Sd N
短 Sa N
而 Bu N
已 Eu N
。 Sw N
以 Sp N
家 Bn N
乡 En N
的 Su N
ii. 只有一列特征的
太 N
短 N
而 N
已 N
。 N
以 N
家 N
乡 N
的 N
a) 特征选取的行是相对的,列是绝对的,通常选取相对行先后m行,选取n-1列(假设语料总共有n列),特征表示方法为:%x[行,列],行列的初始位置都为0。例如:
i. 之前面语料为例
“ Sw N
北 Bns B-LOC
京 Mns I-LOC
市 Ens I-LOC
首 Bn N
假设当前行为“京”字这一行,那么特征能够这样选取:
随着深度学习的兴起,RNN、LSTM、BILSTM等模型已经被证实在NLP任务上有着良好的表现。相比传统模型,RNN可以考虑长远的上下文信息,而且可以解决CRF特征选择的问题,能够将主要的精力花在网络设计和参数调优上,但RNN通常须要较大的训练数据,在小规模数据集上,CRF表现较好。在学术界,目前比较流行的作法是将BILISTM和CRF进行结合,借鉴两个模型各自的优势,来达到更好的效果。
本文只是大概介绍了crf++进行实体识别的一些思路,要真正理解还须要多去实践。
统计学习方法.李航
CRF++的简单使用 - Felomeng的技术博客 - CSDN博客