CRF工具包的使用

这里简要介绍一下CRF++使用的命令格式、参数调整、模板制作的基本过程。

百度经验:jingyan.baidu.com

工具/原料

  • CRF++

百度经验:jingyan.baidu.com

方法/步骤

  1. 1

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

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

    example文件夹:有四个任务的训练数据、测试数据和模板文件。    sdk文件夹:CRF++的头文件和静态链接库。    crf_learn.exe:CRF++的训练程序。    crf_test.exe:CRF++的预测程序    libcrfpp.dll:训练程序和预测程序需要使用的静态链接库。

    实际上,需要使用的就是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   评估效果

  2. 2

    训练

    命令行:

    % crf_learn template train.data model

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

    % crf_learn template_file train_filemodel_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_filetrain_file model_file

  3. 3

    测试

    命令行:

    % crf_test -m model test.data

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

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

    % crf_test -m model_file test_files >result_file

  4. 4

    评估

    若训练过程:% crf_test -m model test.data > output.txt

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

    %conlleval.pl < output.txt

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

    conlleval.pl为http://www.cnts.ua.ac.be/conll2000/chunking/conlleval.txt将这个贴到txt,然后重命名为conlleval。我当时这么做的。

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

  5. 5

    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

    下面是一个训练样本的例子:(参考下图)

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

  6. 6

    template格式

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

    i. 以前面语料为例

    “ Sw N

    北 Bns B-LOC

    京 Mns I-LOC

    市 Ens I-LOC

    首 Bn N

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

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

  7. 7

    总结

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

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

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

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

    模板文件的Unigram feature 和 Bigram feature,前面也说了,这里指的是output的一元/二元,这个应用的情况暂时还不是特别了解,还需要看一些paper可能才能知道。

时间: 2024-11-06 03:18:37

CRF工具包的使用的相关文章

CRF++使用小结

1. 简述 最近要应用CRF模型,进行序列识别.选用了CRF++工具包,具体来说是在VS2008的C#环境下,使用CRF++的windows版本.本文总结一下了解到的和CRF++工具包相关的信息. 参考资料是CRF++的官方网站:CRF++: Yet Another CRF toolkit,网上的很多关于CRF++的博文就是这篇文章的全部或者部分的翻译,本文也翻译了一些. 2. 工具包下载 第一,版本选择,当前最新版本是2010-05-16日更新的CRF++ 0.54版本,不过这个版本以前我用过

转:CRF++

CRF++使用小结 http://www.cnblogs.com/pangxiaodong/archive/2011/11/21/2256264.html 1. 简述 最近要应用CRF模型,进行序列识别.选用了CRF++工具包,具体来说是在VS2008的C#环境下,使用CRF++的windows版本.本文总结一下了解到的和CRF++工具包相关的信息. 参考资料是CRF++的官方网站:CRF++: Yet Another CRF toolkit,网上的很多关于CRF++的博文就是这篇文章的全部或者

基于CRF的中文分词

http://biancheng.dnbcw.info/java/341268.html CRF简介 Conditional Random Field:条件随机场,一种机器学习技术(模型) CRF由John Lafferty最早用于NLP技术领域,其在NLP技术领域中主要用于文本标注,并有多种应用场景,例如: 分词(标注字的词位信息,由字构词) 词性标注(标注分词的词性,例如:名词,动词,助词) 命名实体识别(识别人名,地名,机构名,商品名等具有一定内在规律的实体名词) 本文主要描述如何使用CR

CRF++使用小结(转)

http://blog.csdn.net/heavendai/article/details/7228524 1. 简述 最近要应用CRF模型,进行序列识别.选用了CRF++工具包,具体来说是在VS2008的C#环境下,使用CRF++的windows版本.本文总结一下了解到的和CRF++工具包相关的信息. 参考资料是CRF++的官方网站:CRF++: Yet Another CRF toolkit,网上的很多关于CRF++的博文就是这篇文章的全部或者部分的翻译,本文也翻译了一些. 2. 工具包下

用CRF做命名实体识别

摘要 本文主要讲述了关于人民日报标注语料的预处理,利用CRF++工具包对模型进行训练以及测试 目录 明确我们的标注任务 语料和工具 数据预处理 1.数据说明 2.数据预处理 模型训练及测试 1.流程 2.标注集 3.特征模板 4.CRF++包的使用说明 总结与展望 正文 1.明确我们的标注任务 这篇文章主要是介绍用CRF模型去提取人民日报语料的时间.人物.地点及组织机构名,也就是提取TIME.PERSON.LOCATION.ORGANIZATION四种实体.训练我们直接使用CRF++工具包. 2

CRF++安装教程

CRF++安装教程 CRF工具包下载地址及使用说明:https://taku910.github.io/crfpp/ 1.在官网下载好CRF++-0.58.tar.gz 2.将压缩包放到自定义目录,执行以下命令: 1.tar zxvf CRF++-0.58.tar.gz 2.cd CRF++-0.58 3./configure 4.make 5.su 6.make install 3.进入子目录Python中,执行下面的命令安装python的CRFPP python setup.py build

条件随机场-应用

今天介绍CRFs在中文分词中的应用 工具:CRF++,可以去 https://taku910.github.io/crfpp/ 下载,训练数据和测试数据可以考虑使用bakeoff2005,这是链接 http://sighan.cs.uchicago.edu/bakeoff2005/ 首先需要了解一些概念 字标记法--统计分词模型常用的方法,可以将分词问题转化为分类问题.这里我们介绍一下4-tag字标记法,4-tag指的是文档中的每个字都对应一个标记,一共有4类标记,分别是:B.M.E.S,分别代

中文分词入门之字标注法4

http://www.52nlp.cn/%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D%E5%85%A5%E9%97%A8%E4%B9%8B%E5%AD%97%E6%A0%87%E6%B3%A8%E6%B3%954 上一节主要介绍的是利用最大熵工具包来做字标注中文分词,这一节我们直奔主题,借用条件随机场工具“CRF++: Yet Another CRF toolkit”来完成字标注中文分词的全过程. 关于条件随机场(CRF)的背景知识,推荐参考阅读一些经典的文献:<条件

机器学习实战——条件随机场(CRF)

声明:本文是在<最优化方法>课程中阅读的Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data这篇文章后的总结. CRF由来 条件随机场(CRF)这种用来解决序列标注问题的机器学习方法是由John Lafferty于2001年发表在国际机器学习大会ICML上的一篇经典文章所引入,对后人的研究起到了非常大的引领作用.特别是标注问题在很多自然科学领域有广泛应用,在自然语言处理