CRF++模型格式 命令 参数 说明

通过追加-t, –textmodel参数可以输出文本格式的CRF模型文件,通过该模型文本,可以加深对条件随机场的理解或为其他应用所利用。本文旨在介绍CRF++的文本模型格式,具体读取与解码将集成到HanLP中一并开源。

训练

语料

以BMES标注语料为例:

那	S
音	B
韵	E
如	S
轻	B
柔	E
的	S
夜	B
风	E
,	S

惊	S
溅	S
起	S
不	B
可	M
言	M
传	E
的	S
天	B
籁	E
。	S

注意字与标签之间的分隔符为制表符\t,否则会导致feature_index.cpp(86) [max_size == size] inconsistent column size错误。

特征模板

# Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
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]
U08:%x[-1,0]/%x[0,0]
U09:%x[0,0]/%x[1,0]

# Bigram
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时,训练完成

可见,如果希望训练快速结束,可以在命令行中适当减小maxiter值,增大eta值。

CRF模型格式

骨架

打开model.txt,其基本内容骨架如下:

version: 100
cost-factor: 1
maxid: 2159868
xsize: 1

B
E
M
S

U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
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]
U08:%x[-1,0]/%x[0,0]
U09:%x[0,0]/%x[1,0]
B

0 B
16 U00:-
20 U00:0
24 U00:1
28 U00:2
32 U00:3
36 U00:4
40 U00:5
44 U00:6
48 U00:7
52 U00:8
56 U00:9
60 U00:_B-1
64 U00:_B-2
……
17404 U01:厨
17408 U01:去
17412 U01:县
17416 U01:参
17420 U01:又
17424 U01:叉
17428 U01:及
17432 U01:友
17436 U01:双
17440 U01:反
17444 U01:发
17448 U01:叔
17452 U01:取
17456 U01:受
……
77800 U05:_B-1/一/个
107540 U05:一/方/面
107544 U05:一/无/所
107548 U05:一/日/三
107552 U05:一/日/为
107556 U05:一/日/之
……
566536 U06:万/吨/_B+1
……
2159864 U09:v/e

-8.5354017525999719
9.0491453814148901
7.0388286231971700
-7.2545558164093009
5.2799470769112835
-8.5333633546653758
-5.3549190735606933
5.2575182675282477
-5.4259109736696054

接下来我会把上述骨架分解说明——

文件头

version: 100
cost-factor: 1
maxid: 2159868
xsize: 1

说明了模型的版本,通过-c参数指定的cost-factor,特征函数的最大id,xsize是特征维数,也就是训练语料列数-1。

值得注意的是maxid比我们从文本中观察到的最大id大了4,这是为什么呢?且听下文分解。

标签

B
E
M
S

也就是最终的输出。

模板

U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
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]
U08:%x[-1,0]/%x[0,0]
U09:%x[0,0]/%x[1,0]
B

训练时用到的模板。

特征函数

0 B
16 U00:-
20 U00:0
24 U00:1
28 U00:2
32 U00:3
36 U00:4
40 U00:5
44 U00:6
48 U00:7
52 U00:8
56 U00:9
60 U00:_B-1
64 U00:_B-2
……
17404 U01:厨
17408 U01:去
17412 U01:县
17416 U01:参
17420 U01:又
17424 U01:叉
17428 U01:及
17432 U01:友
17436 U01:双
17440 U01:反
17444 U01:发
17448 U01:叔
17452 U01:取
17456 U01:受
……
77800 U05:_B-1/一/个
107540 U05:一/方/面
107544 U05:一/无/所
107548 U05:一/日/三
107552 U05:一/日/为
107556 U05:一/日/之
……
566536 U06:万/吨/_B+1
……
2159864 U09:v/e

按照[id] [参数o]的格式排列,你可能会奇怪,f(s, o)应该接受两个参数才对。其实s隐藏起来了,注意到id不是连续的,而是隔了四个,这表示这四个标签(s=b|m|e|s)和公共的参数o组合成了四个特征函数。特别的,0-15为BEMS转移到BEMS的转移函数,也就是f(s', s, o=null)。

值得注意的是,_B-1表示句子第一个单词前面的一个单词,_B+1表示末尾后面的一个单词,你可以在最大熵的模型中找到类似的逻辑处理,依次类推。

特征函数权值

后面的小数依id顺序对应每个特征函数的权值。

9.0491453814148901
7.0388286231971700
-7.2545558164093009
5.2799470769112835
-8.5333633546653758
-5.3549190735606933
5.2575182675282477
-5.4259109736696054

关于解码

严格来讲,解码并不属于本文的范围,但是不说说解码的话,对特征函数权值的理解就仅仅限于“浮点数”这一表面。所以简要地说说解码,比如说我们有一个句子“商品和服务”,对于每个字都按照上述模板生成一系列U特征函数的参数代入,得到一些类似010101的函数返回值,乘上这些函数的权值求和,就得到了各个标签的分数,由大到小代表输出这些标签的可能性。

至于B特征函数(这里特指简单的f(s', s)),在Viterbi后向解码的时候,前一个标签确定了后就可以代入当前的B特征函数,计算出每个输出标签的分数,再次求和排序即可。

Reference

CRF++工具包使用介绍.ppt

原文 http://www.hankcs.com/nlp/the-crf-model-format-description.html

时间: 2024-10-27 06:21:49

CRF++模型格式 命令 参数 说明的相关文章

linux中mount命令参数详解(nfs 参数)

1,命令格式mount命令的格式如下: mount [-t vfstype] [-o  options] device dir mount命令参数非常多,如下为与NFS相关的参数. (1)-a:把/etc/fstab中列出的路径全部挂载.(2)-t:需要mount的类型,如nfs等.(3)-r:将mount的路径定为read only.(4)-v mount:过程的每一个操作都有message传回到屏幕上.(5)rsize=n:在NFS服务器读取文件时NFS使用的字节数,默认值是1 024个字节

写批处理必备的一些命令参数使用技巧_DOS/BAT

 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件. 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令.当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的.批处理的程序

linux ftp命令参数全集

linux ftp命令参数是我们常用的服务器控制手段.那么我们现在就来介绍一些linux ftp命令参数.希望能帮助大家快速查阅,这些命令都是常用的,肯定会对您有所帮助.以下是linux ftp命令参数的详解. FTP> ! 从 ftp 子系统退出到外壳。 FTP> ? 显示 ftp 命令说明。? 和 help 相同。 格式:? [command] 说明:[command]指定需要帮助的命令名称。假如没有指定 command,linux ftp命令参数将显示全部命令的列表。 FTP> a

HDFS命令行客户端使用,命令行客户端支持的命令参数,常用命令参数介绍

3.HDFS的shell(命令行客户端)操作 3.1HDFS命令行客户端使用 HDFS提供shell命令行客户端,使用方法如下: [toto@hadoop hadoop-2.8.0]$ hdfs dfs -ls /     (推荐使用这种方式,hdfs现在这种是最新的一种方式) Found 4 items drwxr-xr-x   - toto supergroup          0 2017-05-29 14:01 /findbugs-1.3.9 drwxr-xr-x   - toto s

探索PowerShell (四) PowerShell的对象、格式与参数_PowerShell

今天贴博文晚了,感谢各位能继续关注! 本节将要给大家介绍一下PowerShell下的对象,基本格式以及参数.依然属于PowerShell的基础. PowerShell中的对象 在本教程开篇我们说过,PowerShell是基于面向对象化的,不像传统的shell那样基于文本.这其中最主要的原因就是因为Win平台在管理操作上主要以面向对象为主,因此为了符合系统特点和我们的操作习惯,PowerShell也继承了这一特色.因此,不像传统的shell,在PowerShell中,我们可以随意地与对象进行互动,

Linux ls命令参数详解_Linux

      -a -- 全部(all).列举目录中的全部文件,包括隐藏文件(.filename).位于这个列表的起首处的 .. 和 . 依次是指父目录和你的当前目录.      -l -- 长(long).列举目录内容的细节,包括权限(模式).所有者.组群.大小.创建日期.文件是否是到系统其它地方的链接,以及链接的指向.      -F -- 文件类型(File type).在每一个列举项目之后添加一个符号.这些符号包括:/ 表明是一个目录:@ 表明是到其它文件的符号链接:* 表明是一个可执行文

Flash对象在(x)HTML中的格式和参数及安全性

这是份总结,有不恰达的地方欢迎一同讨论 联系方式 : 龙藏 longzang@taobao.com 点击这里全幅围观 或者点下面大图去 slideshare.net 站点围观: Flash对象在(X)Html中的格式和参数及安全性 PDF下载: Flash对象在(x)HTML中的格式和参数及安全性 Download "FlashObjectInHTML"

Word 2013中如何快速访问工具栏并添加自动套用格式命令

在Word2013中 ,为了执行"自动套用格式"命令,用户可以使用组合键Ctrl+Alt+K进行操作(参考教程<Word2013中使用Ctrl+Alt+K组合键自动套用格式>).除此之外,还可以将"自动套用格式"命令添加到快速访问工具栏中,操作步骤如下所述: 第1步,打开Word2013文档窗口,依次单击"文件"→"选项"按钮,如图2013080227所示. 图2013080227 单击"选项"

linux系统下的df命令参数详解

  linux中df命令参数功能:检查文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 语法:df [选项] 说明:linux中df命令可显示所有文件系统对i节点和磁盘块的使用情况. 该命令各个选项的含义如下: -a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统. -k 以k字节为单位显示. -i 显示i节点信息,而不是磁盘块. -t 显示各指定类型的文件系统的磁盘空间使用情况. -x 列出不是某一指定类型