1,CRF++的指南,以及下载

2,CRF++-0.58.zip

我下载的是CRF++0.58.zip的版本,解压。

doc文件夹为官网地址;example为给的4个例子。

实际需要的:crf_learn.exe;crf_test.exe;libcrfpp.dll三个文件

可以先拿example中的某个例子,做一下测试。例如:example中chunking文件夹,其中原有4个文件:exec.sh;template;test.data;train.data。

template为特征模版;test.data为测试数据;train.data为训练数据。关于它们具体格式和内容,待会详细介绍。

可以选择example里的某个例子做测试,比如选chunking。将crf_learn.exe;crf_test.exe;libcrfpp.dll三个文件复制到到,含有exec.sh;template;test.data;train.data的文件夹(chunking)里。

cmd

cd进入该文件夹

crf_learn template train.data

model 训练数据

crf_test -m model test.data >

output.txt 测试数据

conlleval.pl <

output.txt 评估效果

3,训练

命令行:

% crf_learn template train.data

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

% crf_learn template_file train_file model_file

>> train_info_file

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

-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_file train_file

model_file

4,测试

命令行:

% crf_test -m model

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

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

% crf_test -m model_file test_files >

result_file

5,评估

若训练过程:% crf_test -m model

test.data > output.txt

训练的结果在output.txt里。评估的就是这个文件,即待预测标签与预测标签的对比。

%conlleval.pl < output.txt

.pl后缀为Perl文件,所以需要安装Perl

特别注意:output.txt在CRF++输出中空格为TAB键,需要全部替换为真正空格键。conlleval.pl识别的是空格键。

6,train.data和test.data的格式

我做的实验关于中文。

每行的格式为:分词后的词 词性标注 标签

中间是空格隔开;空行表示句子的边界;分词后的词和词性标注是NLPIR(原ICTCLAS)生成的结果;标签O表示不是目标值,PLACE表示目标值,若一个词被分开了,则B-PALCE为第一个词,I-PLACE为接着的词

一定要严格按格式要求来,否则会报错。

另外,标签不能全部一样,否则会报这么错误:

The line search routine mcsrch failed: error code:0

routine stops with unexpected error

CRF_L2 execute error

下面是一个训练样本的例子:

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

7,template格式

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

conlleval_[转载]CRF++的使用总结相关推荐

  1. android 视频编码vfr cfr,[转载]VFR的源转换CRF输出 批处理

    [转载]VFR的源转换CRF输出 批处理 (2017-01-09 20:09:33) http://tieba.baidu.com/p/2469580915 字幕支持vfr(tc) 帧率属于一般情况下 ...

  2. [转载]Macropodus自然语言处理(NLP)工具包(Albert+BiLSTM+CRF)

    [转载]今天上午浏览了一篇文章,觉得很好,趁热膜拜一下. 一.简介 Macropodus自然语言处理工具(Albert+BiLSTM+CRF) 中文分词 命名实体识别 新词发现 关键词 文本摘要 计算 ...

  3. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

  4. pytorch lstm crf 代码理解 重点

    好久没有写博客了,这一次就将最近看的pytorch 教程中的lstm+crf的一些心得与困惑记录下来. 原文 PyTorch Tutorials 参考了很多其他大神的博客,https://blog.c ...

  5. Pytorch Bi-LSTM + CRF 代码详解

    久闻LSTM + CRF的效果强大,最近在看Pytorch官网文档的时候,看到了这段代码,前前后后查了很多资料,终于把代码弄懂了.我希望在后来人看这段代码的时候,直接就看我的博客就能完全弄懂这段代码. ...

  6. pytorch BiLSTM+CRF代码详解 重点

    一. BILSTM + CRF介绍 https://www.jianshu.com/p/97cb3b6db573 1.介绍 基于神经网络的方法,在命名实体识别任务中非常流行和普遍. 如果你不知道Bi- ...

  7. pytorch实现BiLSTM+CRF用于NER(命名实体识别)

    pytorch实现BiLSTM+CRF用于NER(命名实体识别) 在写这篇博客之前,我看了网上关于pytorch,BiLstm+CRF的实现,都是一个版本(对pytorch教程的翻译), 翻译得一点质 ...

  8. 【Learning Notes】线性链条件随机场(CRF)原理及实现

    1. 概述 条件随机场(Conditional Random Field, CRF)是概率图模型(Probabilistic Graphical Model)与区分性分类( Discriminativ ...

  9. 条件随机场(CRF) - 1 - 简介

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...

最新文章

  1. 这款工具,1分钟定位性能瓶颈,我老板都说好!
  2. 怎么自定义linux登录界面?
  3. MyBatis-学习笔记05【05.使用Mybatis完成CRUD】
  4. 从 ES 到 Kylin,斗鱼客户端性能分析平台进化之旅
  5. poj3254 Corn Fields
  6. 常见的CSS和HTML面试题
  7. 黄聪:php中utf-8模板获取GB2312编码页面传递URL中文编码转换方法
  8. JavaScript - 理解面向对象编程
  9. JAVA bugFree!
  10. Spring里用到了哪些设计模式
  11. es6箭头函数_如何优雅地使用 ES6 箭头函数
  12. UEFI——PCI/PCIe
  13. 什么是RS232电平?什么是TTL电平?
  14. 永中java的窗口_永中國際 Office
  15. Binder 机制详解—Binder Java框架(转自Cloud Chou's Tech Blog)
  16. 对啊英语音标---四、双元音常见的字母发音组合有哪些
  17. python游戏功能_python 游戏(龙的国度)
  18. 《迷途深渊》隐私声明
  19. jsp+servlet+mysql实现的学生签到考勤请假管理系统源码+教程
  20. Tmux Cheat Sheet

热门文章

  1. 以Dubbo为例,聊聊如何为开源项目做贡献
  2. 宠物龟 扫地机器人_有宠物家庭必选 岚豹扫地机器人太实用了
  3. of type std::bad_cast: std::bad_cast
  4. Windows 软件推荐2020
  5. Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False
  6. '_NamespacePath' object has no attribute 'sort'
  7. error LNK2019: 无法解析的外部符号 public: virtual void * __thiscall
  8. tensorflow 1.0 学习:参数和特征的提取
  9. sqldbx oracle mysql
  10. undefined reference to cv::_InputArray::_InputArray(cv::Mat const)