crf++学习笔记

example文件夹:有四个任务的训练数据、测试数据和模板文件。

crf_learn.exeCRF++的训练程序

 crf_test.exeCRF++的预测程序   

 libcrfpp.dll:训练程序和预测程序需要使用的静态链接库。

实际上,需要使用的就是crf_learn.execrf_test.exelibcrfpp.dll这三个文件。

一、简单使用

1.将crf_learn.execrf_test.exelibcrfpp.dll三个文件复制到到,含有exec.shtemplatetest.datatrain.data的文件夹(chunking)里。

2.cmd  cd进入该文件夹

crf_learn template train.data model   训练数据

crf_test -m model test.data >output.txt   测试数据

perl conlleval.pl < output.txt   评估效果(此处会报错误)需要下载perl(需要复制

conlleval.pl文件到文件夹里

3.会产生一个新的文件:model

这个训练过程的时间、迭代次数等信息就会输出到控制台上如果想要保存这些信息,我们可以将这些标准输出 流到文件,命令格式为:

crf_learn template_file train_file model_file >> train_info_file

eg:crf_learn template train.data model >> model_out.txt

4.有四个参数可以调整,我认为目前对我的试验有用的是:

-c float

这个参数设置CRFhyper-parameterc的数值越大,CRF拟合训练数据的程度越高。这个参数可以调整过拟合和不拟合之间的平衡度。这个参数可以通过 交叉验证? 等方法寻找较优的参数。(其实还不太懂?)

-f NUM

这个参数设置特征的cut-off thresholdCRF++使用训练数据中至少出现NUM次的特征。默认值为1

二、训练过程(详细)

crf_learn <模板> <训练语料> <模板文件>

其中模板和训练语料是需要事先准备好的,模板文件在训练完成后生成。

 训练中一些参数的说明:(没试过)

ter:迭代次数

terr:标记错误率

serr:句字错误率

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

diff:与上一个对象值之间的相对差

三、测试过程(详细)

1.输入命令进行测试数据,测试程序的命令为:

crf_test -m model_file test_file

eg: crf_test -m model test.data

2.同样,与crf_learn类似,输出的结果放到了标准输出流上,而这个输出结果是最重要的预测结果信息(预测文件的内容+预测标注,同样可以使用重定向,将结果保存下来,命令为:

crf_test -m model_file test_files >> result_file

egcrf_test -m model test.data >> output.txt

你会发现生成一个新的文件output.txt,就是我们的测试结果

3.在这里的参数 有两个-v -n,都是用来显示一些信息的

-v 可以用来预测标签概率值 -n用处不大

四、特征选取及模板的编写


特征选取的行是相对的,列数绝对的,

特征表示方法为:%x[行,列],行列的初始位置都为0

U00:%x[-2,0]

U01:%x[-1,0]

U02:%x[0,0]

U03:%x[1,0]

U04:%x[2,0]

U05:%x[-2,1]

U06:%x[-1,1]

U07:%x[0,1]

U08:%x[1,1]

U09:%x[2,1]

U10:%x[-1,0]/%x[0,0]

U11:%x[0,0]/%x[1,0]

U12:%x[-2,1]/%x[-1,1]

U13:%x[-1,1]/%x[0,1]

U14:%x[0,1]/%x[1,1]

U15:%x[1,1]/%x[2,1]

U16:%x[-2,1]/%x[-1,1]/%x[0,1]

U17:%x[-1,1]/%x[0,1]/%x[1,1]

U18:%x[0,1]/%x[1,1]/%x[2,1]

说明:

i. 其中#开头的行不起作为,为注释;

ii. 行与行之间可以有空行;

iii. Unigram的特征前使用字母U,而Bigram的特征前使用字母B后面的数字用于区分特征,当然这些数字不是一定要连续。


五、结果测评

下载(注意需要先安装perl)

要求crf_test一步使用的测试文件中本身带有答案这样解码后生成的结果会在答案的后一列。比如原来为:

    使 En N

     Sw N

     Bni B-ORG

     Mni I-ORG

     Eni I-ORG

     Bn N

    那么解码后变成:

    使 En N N

     Sw N N

     Bni B-ORG B-ORG

     Mni I-ORG I-ORG

     Eni I-ORG I-ORG

     Bn N N

    CoNLL 2000将把最后一列与倒数第二列进行对比,统计出最后各类的正确率,召回率、F值等。

评测命令为:perl conlleval.pl < <评测文件>

使用评测工具前要将评测文件中的所有制表位转换成空格,否则评测工具会出错


猜你喜欢

转载自blog.csdn.net/k411797905/article/details/80481210