CRF++的简单使用

系统 1799 0

CRF++ 是著名的条件随机场开源工具,也是目前综合性能最佳的 CRF 工具。本文简要介绍其使用方法。

一、 工具包的下载:

a)          http://crfpp.sourceforge.net

其中有两种,一种是 Linux 下(带源码)的,一种是 win32 的,当然是在什么平台下用就下载什么版本了。

b)          http://download.csdn.net/source/1425683

两种版本打成一个包了。

二、 安装:

a)          Windows 版的无须安装,直接解压即可使用;

b)          Linux 版本的安装方法是:

                         i.               解压到某目录下

                       ii.               打开控制台,将当前目录切换到解压目录

                      iii.               依次输入命令:     

./configure

make

su

make install

                            注:需要 root 权限才能成功安装。

三、 训练语料格式:

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

b)          一些合法的语料示例:

                         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

假设当前行为“京”字这一行,那么特征可以这样选取:

特征模板

意义

代表特征

%x[-2,0]

-2 行, 0

%x[-1,0]

-1 行, 0

%x[0,0]

0 行, 0

%x[1,0]

1 行, 0

%x[2,0]

2 行, 0

%x[-2,1]

-2 行, 1

Sw

%x[-1,1]

-1 行, 1

Bns

%x[0,1]

0 行, 1

Mns

%x[1,1]

1 行, 1

Ens

%x[2,1]

2 行, 1

Sw

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

-1 0 列与 0 0 列的组合

/

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

0 0 列与 1 0 列的组合

/

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

-2 1 列与 -1 1 列的组合

Sw/ Bns

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

-1 1 列与 0 1 列的组合

Bns/Mns

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

0 1 列与 1 1 列的组合

Mns/Ens

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

1 1 列与 2 1 列的组合

Ens/Sw

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

-2 1 列、 -1 1 列、 0 1 列的组合

Sw/Bns/Mns

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

-1 1 列、 0 1 列、 1 1 列的组合

Bns/Mns/Ens

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

0 1 列、 1 1 列、 2 1 列的组合

Mns/Ens/Sw

b)          模板制作:模板分为两类: Unigram Bigram

其中 Unigram/Bigram 是指输出 token Unigram/Bigrams ,而不是特征。

c)          以前面示例中的特征为特征,制作为 Unigram 模板如下:

#Unigram

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 。后面的数字用于区分特征,当然这些数字不是一定要连续。

五、 训练方法

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

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

注意:

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

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

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

ter :迭代次数

terr :标记错误率

serr :句字错误率

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

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

六、 解码方法

a)          可以使用 crf_test -m < 模板文件 > < 测试文件 1> < 测试文件 2> ……。

b)          结果会直接输出到屏幕上面,如果想让结果保存到文件中,那么使用重定向,在上面命令后面加上一个开关“ > ”即可: crf_test -m < 模板文件 > < 测试文件 1> > < 保存位置 > 。例如: crf_test -m model test.txt > result.txt

七、 评测工具 CoNLL 2000 的用法

a)          下载:

                         i.               http://download.csdn.net/source/1425687

                       ii.               http://www.cnts.ua.ac.be/conll2000/chunking/output.html

b)          使用它是用来评分,所以要求 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 值等。

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

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

CRF++的简单使用


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论