CRF++的参数设置

特征模板

# Unigram template 模板
# unigram-features一元特征  
U00:%x[-2,0]  
U01:%x[-1,0]  
U02:%x[0,0]  
U03:%x[1,0]  
U04:%x[2,0]  
# bigram-features二元特征
U08:%x[-1,0]/%x[0,0]  
U09:%x[0,0]/%x[1,0]
# trigram-featuress三元特征
U05:%x[-2,0]/%x[-1,0]/%x[0,0]  
U06:%x[-1,0]/%x[0,0]/%x[1,0]  
U07:%x[0,0]/%x[1,0]/%x[2,0]
# Bigram template 模板
B

T**:%x[#,#]中的T表示模板类型,两个"#"分别表示相对的行偏移与列偏移。

一共有两种模板:

第一种是Unigram template:第一个字符是U,这是用于描述unigram feature的模板。每一行%x[#,#]生成一个CRFs中的点(state)函数: f(s, o), 其中s为t时刻的的标签(output),o为t时刻的上下文.如CRF++说明文件中的示例函数:

func1 = if (output = B and feature="U02:那") return 1 else return 0

它是由U02:%x[0,0]在输入文件的第一行生成的点函数.将输入文件的第一行"代入"到函数中,函数返回1,同时,如果输入文件的某一行在第1列也是“那”,并且它的output(第2列)同样也为B,那么这个函数在这一行也返回1。

第二种是Bigram template:第一个字符是B,每一行%x[#,#]生成一个CRFs中的边(Edge)函数:f(s', s, o), 其中s'为t – 1时刻的标签.也就是说,Bigram类型与Unigram大致机同,只是还要考虑到t – 1时刻的标签.如果只写一个B的话,默认生成f(s', s),这意味着前一个output token和current token将组合成bigram features。

命令行

使用下列命令可以得到一个model文件和一个model.txt文件,后者是本文的主要研究对象。

..\..\crf_learn  -f 3 -c 4.0 template pku_training.bmes.txt model -t

参数解释如下:

可选参数 

-f, –freq=INT使用属性的出现次数不少于INT(默认为1)

-m, –maxiter=INT设置INT为LBFGS的最大迭代次数 (默认10k)

-c, –cost=FLOAT      设置FLOAT为代价参数,过大会过度拟合 (默认1.0)

-e, –eta=FLOAT设置终止标准FLOAT(默认0.0001)

-C, –convert将文本模式转为二进制模式

-t, –textmodel为调试建立文本模型文件

-a, –algorithm=(CRF|MIRA)

选择训练算法,默认为CRF-L2

-p, –thread=INT线程数(默认1),利用多个CPU减少训练时间

-H, –shrinking-size=INT

设置INT为最适宜的跌代变量次数 (默认20)

-v, –version显示版本号并退出

-h, –help显示帮助并退出

输出

训练过程中会输出一些信息,其意义如下:



    iter:迭代次数。当迭代次数达到maxiter时,迭代终止

    terr:标记错误率

    serr:句子错误率

    obj:当前对象的值。当这个值收敛到一个确定值的时候,训练完成

    diff:与上一个对象值之间的相对差。当此值低于eta时,训练完成

猜你喜欢

转载自blog.csdn.net/qqywm/article/details/85088800