CRF++命名实体识别

使用CRF++的windows版本

doc文件:就是官方主页的内容。

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

sdk文件夹:CRF++的头文件和静态链接库。

crf_learn.exe:CRF++的训练程序

crf_test.exe: CRF++的预测程序

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

实际上,需要使用的就是crf_learn.exe,crf_test.exe和libcrfpp.dll这三个文件。

 可以把crf_learn.exe,crf_test.exe,libcrfpp.dll三个文件拷到要训练的语料的文件夹内,如example/trainRM

训练程序

命令行:

% crf_learn template_file train_filemodel_file

这个训练过程的时间、迭代次数等信息会输出到控制台上(感觉上是crf_learn程序的输出信息到标准输出流上了),如果想保存这些标准输出流到文件上,命令格式如下:

% crf_learn template_file train_filemodel_file >>train_info_file


训练过程中的信息如下:

 



有4个主要的参数可以调整:

-a CRF-L2 or CRF-L1

规范化算法选择。默认是CRF-L2.一般来说L2算法效果要比L1算法稍微好一点,虽然L1算法中非零特征的数值要比L2中大幅度的小。

-c float

这个参数设置CRF的hyper-parameter。c的数值越大,CRF拟合训练数据的程度越高。这个参数可以调整过度拟合和不拟合之间的平衡度。这个参数可以通过交叉验证等方法寻找较优的参数。

-f NUM

这个参数设置特征的cut-off threshold。CRF++使用训练数据中至少NUM次出现的特征。默认值为1.当使用CRF++到大规模数据时,只出现一次的特征可能会有几百万,这个选项就会在这样的情况下起到作用。

-p NUM

如果电脑有多个CPU,那么可以通过多线程提升训练速度。NUM是线程数量。

 

带两个参数的命令行例子:

% crf_learn –f 3 –c 1.5 template_filetrain_file model_file


a)      语料的训练可以使用命令(在终端或DOS命令行中):crf_learn <模板> <训练语料> <模板文件>

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

注意:

1)   如果提示语料格式错误,则注意检查语料的存储编码,有些编码CRF++是会读取错误的;

2)   文件路径要正确,如果文件没在当前目录,那么要使用绝对路径。

b)      训练中一些参数的说明:

iter: 迭代次数

terr:标记错误率

serr:句字错误率

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

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

测试程序

命令行:

%crf_test –m model_file test_files

有两个参数-v和-n都是显示信息的,-v可以显示预测标签的概率值,-n可以显示不同可能序列的概率值,对于准确率,召回率,运行效率,没有影响,这里不说明了。

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

%crf_test –m model_file test_files>>result_file

 

评测工具CoNLL 2000的用法

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

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

 

文件格式

训练文件

训练文件由若干个句子组成(可以理解为若干个训练样例),不同句子之间通过换行符分隔,上图中显示出的有两个句子。每个句子可以由若干组标签,最后一组标签是标注,上图中有三列,即第一列和第二列都是已知的数据,第三列是要预测的标注,以上面例子为例是,根据第一列的词语和第二列的词性,预测第三列的标注。

 

训练语料格式:

a)      训练语料至少应具有两列,列间由空格或制表位间隔,且所有行(空行除外)必须具有相同的列数。句子间使用空行间隔。

b)       

 

类型主要包括:

人名:PER

地名:LOC

机构名:ORG

每类实体都以B-开始,如地名的开始字由B-LOC表示,如果一个地名包括多个字,则后面的字标为I-LOC

如果某个字不属于三类实体名,则标为N

 

特征的选取及模板的编写

a)      特征选取的行是相对的,列是绝对的,一般选取相对行前后m行,选取n-1列(假设语料总共有n列),特征表示方法为:%x[行,列],行列的初始位置都为0

测试文件

测试文件与训练文件格式自然是一样的,用过机器学习工具包的这个一般都很理解吧。

与SVM不同,CRF++没有单独的结果文件,预测结果通过标准输出流输出了,因此前面的命令行中,将结果重定向到文件中了。结果文件比测试文件多了一列,即为预测的标签,我们可以计算最后两列,一列的标注的标签,一列的预测的标签,来得到标签预测的准确率。

 

 

总结

命令行(命令行格式,参数,重定向)

调参数(一般也就调训练过程的c值)

标注集(这个很重要,研究相关)

模板文件(这个也很重要,研究相关)



























  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值