CRF++使用说明
摘选自 :CRF++: Yet Another CRF toolkit
Usage:
1.输入输出文件
- He PRP B-NP
- reckons VBZ B-VP
- the DT B-NP
- current JJ I-NP
- account NN I-NP
- deficit NN I-NP
- will MD B-VP
- narrow VB I-VP
- to TO B-PP
- only RB B-NP
- # # I-NP
- 1.8 CD I-NP
- billion CD I-NP
- in IN B-PP
- September NNP B-NP
- . . O
- He PRP B-NP
- reckons VBZ B-VP
- ..
由许多token组成,每一行称之为一个token,每个token包含许多列,一般第0列是词本身,最后一列是词应该输出的标记(状态),中间的列是词的Pos,可以有多个,例如可以是词性等
输出文件与输入文件一样,只不过最后一列的可有可无,包含最后一列时可用于测试
2. feature template
2.1 模板基础和介绍
- Input: Data
- He PRP B-NP
- reckons VBZ B-VP
- the DT B-NP << CURRENT TOKEN
- current JJ I-NP
- account NN I-NP
template | expanded feature |
%x[0,0] | the |
%x[0,1] | DT |
%x[-1,0] | reckons |
%x[-2,1] | PRP |
%x[0,0]/%x[0,1] | the/DT |
ABC%x[0,1]123 | ABCDT123 |
模板由 %x[row,col]指定,row表示行偏移,col表示第col列。eg,当前元素是the的话,%x[0,1]表示DT,%x[-1,0]表示reckons等
2.2 模板类型
一共有两种类型的模板,Unigram和Bigram
2.2.1 Unigram
如果一个 %x[0,1]模板(这个模板的意思就是利用当前词的第一列(词性)去预测最后一列(输出)),会产生如下函数:
|
当前词的U01特征是DT,当前词的输出是B-NP 当前词的U01特征是DT,当前词的输出是I-NP 当前词的U01特征是DT,当前词的输出是O 当前词的U01特征是NN,当前词的输出是B-NP 当前词的U01特征是NN,当前词的输出是O |
一共有 L*N个特征函数,L是输出的类别墅,N是expanded feature的数目
2.2.2 Bigram
会自动产生当前特征和前一个特征的合并,一共会有L*L*N个特征函数
2.2.3 区别两个unigram与bigram
- unigram: |output tag| x |all possible strings expanded with a macro|
- bigram: |output tag| x |output tag| x |all possible strings expanded with a macro|
模板示例
# Unigram
- U00:%x[-2,0]
- U01:%x[-1,0]
- U02:%x[0,0]
- U03:%x[1,0]
- U04:%x[2,0]
- U05:%x[-1,0]/%x[0,0]
- U06:%x[0,0]/%x[1,0]
- U10:%x[-2,1]
- U11:%x[-1,1]
- U12:%x[0,1]
- U13:%x[1,1]
- U14:%x[2,1]
- U15:%x[-2,1]/%x[-1,1]
- U16:%x[-1,1]/%x[0,1]
- U17:%x[0,1]/%x[1,1]
- U18:%x[1,1]/%x[2,1]
- U20:%x[-2,1]/%x[-1,1]/%x[0,1]
- U21:%x[-1,1]/%x[0,1]/%x[1,1]
- U22:%x[0,1]/%x[1,1]/%x[2,1]
- # Bigram
- B
‘#’在模板中表示注释,bigram中的B表示就只采用前一个token和当前token作为bigram特征
3 训练
3.1 命令
crf_learn template_file train_file model_file
3.2 输出
- CRF++: Yet Another CRF Tool Kit
- Copyright(C) 2005 Taku Kudo, All rights reserved.
- reading training data: 100.. 200.. 300.. 400.. 500.. 600.. 700.. 800..
- Done! 1.94 s
- Number of sentences: 823
- Number of features: 1075862
- Number of thread(s): 1
- Freq: 1
- eta: 0.00010
- C: 1.00000
- shrinking size: 20
- Algorithm: CRF
- iter=0 terr=0.99103 serr=1.00000 obj=54318.36623 diff=1.00000
- iter=1 terr=0.35260 serr=0.98177 obj=44996.53537 diff=0.17161
- iter=2 terr=0.35260 serr=0.98177 obj=21032.70195 diff=0.53257
- iter=3 terr=0.23879 serr=0.94532 obj=13642.32067 diff=0.35138
- iter=4 terr=0.15324 serr=0.88700 obj=8985.70071 diff=0.34134
- iter=5 terr=0.11605 serr=0.80680 obj=7118.89846 diff=0.20775
- iter=6 terr=0.09305 serr=0.72175 obj=5531.31015 diff=0.22301
- iter=7 terr=0.08132 serr=0.68408 obj=4618.24644 diff=0.16507
- iter=8 terr=0.06228 serr=0.59174 obj=3742.93171 diff=0.18953
- iter: 迭代次数
- terr: error rate with respect to tags. (# of error tags/# of all tag)
- serr: error rate with respect to sentences. (# of error sentences/# of all sentences)
- obj: current object value. When this value converges to a fixed point, CRF++ stops the iteration.
- diff: relative difference from the previous object value.
3.3 参数
- -a CRF-L2 or CRF-L1:
指定正则化项。默认参数是L2。一般情况,L2比L1略好,但L1正则化情况下非零的特征数目明显比L2正则化少。 - -c float:
CRF中的hyper-parameter参数。C越大,CRF拟合训练数据过好,所以C是一个权衡过拟合和欠拟合的参数。训练结果受C值的影响较大。可以通过交叉验证等确定C的取值。 - -f NUM:
设置参与训练的特征的阈值。仅使用出现次数不小于NUM次的特征。默认值是1。在大数据中,只出现一次的特征会有成百上千,此时这个选项就会很有用。 - -p NUM:
如果电脑有多个CPU,可以多线程训练,NUM是线程数。
eg
- crf_learn -f 3 -c 1.5 template_file train_file model_file
0.45以上的版本,还有single-best MIRA training模式,通过-a MIRA 指定,参数选项与上面的类似
4 预测
- crf_test -m model_file test_files ...
每一行中前面的列是预测数据中的特征和真实结果,最后一列是通过训练得到的标注结果
输出普通结果
- % crf_test -m model test.data
- Rockwell NNP B B
- International NNP I I
- Corp. NNP I I
- 's POS B B
- Tulsa NNP I I
- unit NN I I
- ..
输出真实值的概率
- % crf_test -v1 -m model test.data| head
- # 0.478113
- Rockwell NNP B B/0.992465
- International NNP I I/0.979089
- Corp. NNP I I/0.954883
- 's POS B B/0.986396
- Tulsa NNP I I/0.991966
- ...
输出所有情况的概率
- % crf_test -v2 -m model test.data
- # 0.478113
- Rockwell NNP B B/0.992465 B/0.992465 I/0.00144946 O/0.00608594
- International NNP I I/0.979089 B/0.0105273 I/0.979089 O/0.0103833
- Corp. NNP I I/0.954883 B/0.00477976 I/0.954883 O/0.040337
- 's POS B B/0.986396 B/0.986396 I/0.00655976 O/0.00704426
- Tulsa NNP I I/0.991966 B/0.00787494 I/0.991966 O/0.00015949
- unit NN I I/0.996169 B/0.00283111 I/0.996169 O/0.000999975
- ..
我
CRF++使用说明的更多相关文章
- 用CRF做命名实体识别(一)
用CRF做命名实体识别(二) 用CRF做命名实体识别(三) 用BILSTM-CRF做命名实体识别 博客园的markdown格式可能不太方便看,也欢迎大家去我的简书里看 摘要 本文主要讲述了关于人民日报 ...
- 使用conlleval.pl对CRF测试结果进行评价的方法
基于CRF做命名实体识别系列 用CRF做命名实体识别(一) 用CRF做命名实体识别(二) 用CRF做命名实体识别(三) 评测 用CRF做完命名实体识别我们测试之后得到的结果就是预测的标签,并不能直接得 ...
- CRF++评测脚本CoNLL 2000
关于CRF++工具如何使用这里就不再赘述了,网上相关资源很多,如官方提供的http://crfpp.googlecode.com/svn/trunk/doc/index.html.虽然http://w ...
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- 【NLP】基于自然语言处理角度谈谈CRF(二)
基于自然语言处理角度谈谈CRF 作者:白宁超 2016年8月2日21:25:35 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务 ...
- 【NLP】基于机器学习角度谈谈CRF(三)
基于机器学习角度谈谈CRF 作者:白宁超 2016年8月3日08:39:14 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务中都 ...
- 【NLP】基于统计学习方法角度谈谈CRF(四)
基于统计学习方法角度谈谈CRF 作者:白宁超 2016年8月2日13:59:46 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务 ...
- 【中文分词】条件随机场CRF
之前介绍的MMEM存在着label bias问题,因此Lafferty et al. [1] 提出了CRF (Conditional Random Field). BTW:比较有意思的是,这篇文章的二 ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
随机推荐
- 解决Android NDK 报jxxx编译找不到
如题 解决: 引入NDK对应的arm或者x86库 如果你用的是GinyMotion模拟器,那就引入x86库 不多说了,见截图 1.选择Propertities->C/C++ General-&g ...
- 【转】Struts2 和 Spring MVC对比
1. 实现机制 struts2框架是类级别的拦截,每次来了请求就创建一个controller中对应的Action,然后调用setter getter方法把request中的数据注入 .struts2实 ...
- Unity 使用 Stripping Level == Use micro mscorlib 导致 MD5.Create() 返回NULL
这几天在弄资源更新,昨天导出Android APK 到手机上測试,发现MD5 校验的时候一直出错.打出Log 又一次导包測试发现 MD5.Create() 返回NULL 可是在电脑上是好好的,在手机上 ...
- DDL语句--改动表
改动表是指改动数据库中已经存在的表的定义.改动表比又一次定义表简单.不须要又一次载入数据.也不会影响正在进行的服务. MySQL中通过ALTER TABLE语句来改动表.改动表包含改动表名.改动字段数 ...
- ASP.NET MVC3 系列教程 - 模型
I:基础绑定的实现 1.在前面的两篇基础文章(路由 及 控制器&视图)当中,还没对QueryString的绑定进行介绍,因为我觉得它更适合放在这一章节中去介绍.我们在用WebForm去开发的时 ...
- JavaScript点击按钮显示 确认对话框
//JavaScript点击按钮显示确认对话框 <html xmlns="http://www.w3.org/1999/xhtml"> <head> < ...
- ios 微信开发
首先依照对应的文档获得对应的key - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NS ...
- SQL 将两个结构相同的表合并到成一个表
select * into 新表名 from (select * from T1 union all select * from T2) 这个语句可以实现将合并的数据追加到一个新表中. 不合并重复数据 ...
- Swift新手教程12-可选链
可选链 原创Blog,转载请注明出处 我的博客地址 http://blog.csdn.net/hello_hwc 可选链提供一个一种可选的方式訪问对象的属性.方法.下标脚本,可选链的返回值一定是可选类 ...
- Request介绍及演示样例 PART1
Request在ServletAPI的规范连接地址http://blog.csdn.net/zghwaicsdn/article/details/51035146 HTTP简介 URL是浏览器寻找信息 ...