分享
分享赚钱 收藏 举报 版权申诉 / 11

类型CRF工具包使用简介.doc

  • 上传人:精品资料
  • 文档编号:10506794
  • 上传时间:2019-11-24
  • 格式:DOC
  • 页数:11
  • 大小:42.50KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    CRF工具包使用简介.doc
    资源描述:

    1、CRF 工具包使用简介最近我刚开始使用 CRF 工具包,里边的具体细节也没有研究明白,但论坛上有人询问工具包的使用,我就将它贴出来一下。希望和大家一起讨论讨论。另外需要说明的一点是,下面的内容是从 crf 工具包网页内容翻译的,可能理解上有偏差,翻译也有问题。所以还请大家指正。英文原文请大家参考网页。CRFs 工具包工具包地址:http:/chasen.org/taku/software/CRF+/#features ,工具包包括 Linux 环境下的源代码和 Windows 下的可执行程序。用 C+编写。使用方法:(1)安装编译器要求:C+编译器(gcc 3.0 或更高)命令:% ./con

    2、figure% make% su# make install注:只有拥有 root 帐号的用户才能成功安装。(2)使用(2.1)训练和测试文件的格式训练和测试文件必须包含多个 tokens,每个 token 包含多个列。token 的定义可根据具体的任务,如词、词性等。每个 token 必须写在一行,且各列之间用空格或制表格间隔。一个token 的序列可构成一个 sentence,sentence 之间用一个空行间隔。最后一列是 CRF 用于训练的正确的标注形式。例如:He PRP B-NPreckons VBZ B-VPthe DT B-NPcurrent JJ I-NPaccount NN

    3、 I-NPdeficit NN I-NPwill MD B-VPnarrow VB I-VPto TO B-PPonly RB B-NP# # I-NP1.8 CD I-NPbillion CD I-NPin IN B-PPSeptember NNP B-NP. . OHe PRP B-NPreckons VBZ B-VP上面的例子每个 token 包含 3 列,分别为词本身、词性和 Chunk 标记。注意:如果每一个 token 的列数不一致,系统将不能正确运行。(2.2)准备特征模板使用该 CRFs 工具的用户必须自己确定特征模板。基本模板和宏模板文件中的每一行代表一个 template。

    4、每一个 template 中,专门的宏%xrow,col用于确定输入数据中的一个 token。row 用于确定与当前的 token 的相对行数。col 用于确定绝对行数。如已知下面的输入数据:Input: DataHe PRP B-NPreckons VBZ B-VPthe DT B-NP 当前的 tokencurrent JJ I-NP account NN I-NP特征模板形式为:templateexpanded feature%x0,0the%x0,1DT%x-1,0rokens%x-2,1PRP%x0,0/%x0,1the/DTABC%x0,1123ABCthe123模板类型有两种模板

    5、类型,它们可由 template 的第一个字符确定。第一种是 Unigram template:第一个字符是 U这是用于描述 unigram feature 的模板。当你给出一个模板“U01:%x0,1“,CRF 会自动的生成一个特征函数集合(func1 . funcN),如:func1 = if (output = B-NP and feature=“U01:DT“) return 1 else return 0func2 = if (output = I-NP and feature=“U01:DT“) return 1 else return 0func3 = if (output =

    6、O and feature=“U01:DT“) return 1 else return 0funcXX = if (output = B-NP and feature=“U01:NN“) return 1 else return 0funcXY = if (output = O and feature=“U01:NN“) return 1 else return 0.一个模型生成的特征函数的个数总数为 L*N,其中 L 是输出的类别数,N 是根据给定的template 扩展出的 unique string 的数目。第二种类型 Bigram template:第一个字符是 B这个模板用于描述

    7、bigram features。使用这个模板,系统将自动产生当前输出 token 与前一个输出 token(bigram)的组合。产生的可区分的特征的总数是 L*L*N,其中 L 是输出类别数,N 是这个模板产生的 unique features 数。当类别数很大的时候,这种类型会产生许多可区分的特征,这将会导致训练和测试的效率都很低下。使用标识符区分相对位置如果用户需要区分 token 的相对位置时,可以使用标识符。比如在下面的例子中,宏“%x-2,1“ 和“%x1,1“都代表“DT”,但是它们又是不同的“DT“ 。The DT B-NPpen NN I-NPis VB B-VP CURRE

    8、NT TOKENa DT B-NP为了区分它们,可以在模型中加入一个唯一的标识符(U01: 或 U02:),即:U01:%x-2,1U02:%x1,1在这样的条件下,两种模型将被认为是不同的,因为他们将被扩展为”U01:DT“ 和”U02:DT” 。只要你喜欢,你可以使用任何标识符,但是使用数字序号区分更很有用,因为它们只需简单的与特征数相对应。例子:下面是用于 CoNLL2000 中 shared task 和 Base-NP chunking task 的模板实例。只使用了 bigram template B。这意味着前一个 output token 和 current token 将组合

    9、成 bigram features。每个以#起始的一行或者是空行都会被当作注释去掉。# UnigramU00:%x-2,0U01:%x-1,0U02:%x0,0U03:%x1,0U04:%x2,0U05:%x-1,0/%x0,0U06:%x0,0/%x1,0U10:%x-2,1U11:%x-1,1U12:%x0,1qU13:%x1,1U14:%x2,1U15:%x-2,1/%x-1,1U16:%x-1,1/%x0,1U17:%x0,1/%x1,1U18:%x1,1/%x2,1U20:%x-2,1/%x-1,1/%x0,1U21:%x-1,1/%x0,1/%x1,1U22:%x0,1/%x1,1

    10、/%x2,1# BigramB(3)训练(编码)使用 crf_learn 命令:% crf_learn template_file train_file model_file其中,template_file 和 train_file 需由使用者事先准备好。crf_learn 将生成训练后的模型并存放在 model_file 中。一般的,crf_learn 将在 STDOUT 上输出下面的信息。还会输出其他的和 LBFGS 迭代相关的信息。% crf_learn template_file train_file model_fileCRF+: Yet Another CRF Tool KitCo

    11、pyright (C) 2005 Taku Kudo, All rights reserved.reading training data: Done! 0.32 sNumber of sentences: 77Number of features: 32856Freq: 1eta: 0.0001C(sigma2): 10iter=0 terr=0.7494725738 serr=1 obj=2082.968899 diff=1iter=1 terr=0.1671940928 serr=0.8831168831 obj=1406.329356 diff=0.3248438053iter=2 t

    12、err=0.1503164557 serr=0.8831168831 obj=626.9159973 diff=0.5542182244其中:iter:迭代次数terr:和 tags 相关的错误率(错误的 tag 数/所有的 tag 数)serr:与 sentence 相关的错误率(错误的 sentence 数/所有的 sentence 数)obj:当前对象的值。当这个值收敛到一个确定的值是, CRF 模型将停止迭代diff:与上一个对象值之间的相对差有两个主要的参数用于控制训练条件:-c float:使用这个选项,你可以改变 CRF 的 hyper-parameter。当取一个极大的 C 值

    13、,CRF将可能对训练数据产生过拟合(overfitting)现象。这个参数将会调节 overfitting 和underfitting 之间的平衡。结果将会对参数带来有意义的影响。使用者可以通过使用 held-out data 或者更多的通用模型的选择方法如十字交叉验证法(cross validation) 获得最有的值。-f NUM:这个参数用于设置特征的 cut-off 阈值。CRF+训练时只使用出现次数不少于NUM 次数的特征进行训练。默认值为 1。当使用 CRF+训练大规模数据时,单一特征的数量将达到数百万,此时选择这个参数很有用。这里有一个使用这两个参数的例子:% crf_learn

    14、 -f 3 -c 1.5 template_file train_file model_file(4)测试(解码)使用 crf_test 命令:% crf_test -m model_file test_files .其中,model_file 是 crf_learn 创建的。在测试过程中,使用者不需要指定 template file,因为,mode file 已经有了 template 的信息。test_file 是你想要标注序列标记的测试语料。这个文件的书写格式应该与训练文件一致。下面是一个 crf_test 输出的例子:% crf_test -m model test.dataRockw

    15、ell NNP B BInternational NNP I ICorp. NNP I Is POS B BTulsa NNP I Iunit NN I I其中,最后一列是模型估计的 tag。如果第三列是标准的 tag,则可以通过简单的比较第三列和第四列之间的差别计算出准确率。详细的层次(verbose level)-v 选项:将设置 verbose level。默认值为 0。通过增加层次,你可以从 CRF+获得额外的信息。层次 1:你可以对每个 tag 使用边缘概率(marginal probabilities)(这是一种对输出 tag 的 confidence measure) ,对输出使

    16、用条件概率(conditional probably)(针对整个输出的 confidence measure) 。例如:% crf_test -v1 -m model test.data| head# 0.478113Rockwell NNP B B/0.992465International NNP I I/0.979089Corp. NNP I I/0.954883s POS B B/0.986396Tulsa NNP I I/0.991966.其中,第一行的“# 0.478113“即是输出的条件概率,而且每一个输出 tag 各自含有一个概率,表示形式如“B/0.992465”。层次 2:

    17、你可以对所有的其他候选求边缘概率。例如:% crf_test -v2 -m model test.data# 0.478113Rockwell NNP B B/0.992465 B/0.992465 I/0.00144946 O/0.00608594International NNP I I/0.979089 B/0.0105273 I/0.979089 O/0.0103833Corp. NNP I I/0.954883 B/0.00477976 I/0.954883 O/0.040337s POS B B/0.986396 B/0.986396 I/0.00655976 O/0.007044

    18、26Tulsa NNP I I/0.991966 B/0.00787494 I/0.991966 O/0.00015949unit NN I I/0.996169 B/0.00283111 I/0.996169 O/0.000999975N-best outputs-n 选项:使用这个选项将获得 N-best 结果,它根据 CRF 计算出的条件概率排序得到。当选择了 N-best 结果,CRF+会自动添加一行,形式为“# N prob”,其中 N 是排序后的输出结果,从 0 开始。prob 表示 output 的条件概率。需要注意的是,如果 CRF+不能找到足够的 N 条路径是,它将放弃列举

    19、N-best 结果。这种情况在所给的句子很短的情况下常出现。CRF+使用前向 Viterbi 和后向 A*搜索相结合的方法。这种结合适应了 n-best 结果的需求。下面是一个 N-best 结果的例子:% crf_test -n 20 -m model test.data# 0 0.478113Rockwell NNP B BInternational NNP I ICorp. NNP I Is POS B B.# 1 0.194335Rockwell NNP B BInternational NNP I I按照 manual 的解释,Bigram B 生成一个当前 tag 和前一个 tag

    20、 的组合特征,但是,问题在于当前 tag 还没有得到,如何解释这个组合?如果想采用前一个的输出为特征,该怎么表示?以上面的 template 为例,俺曾经试过 U22:%x-1,2,结果报错。 。 。想请问一下,如果要采用前一个或前面若干个的预测结果作为当前对象的特征,该怎么写模板? 我没有使用过 CRF 工具,但我同样遇到过 Helen 提出的问题,即如何使用前一个 token 的输出结果作为当前 token 的特征的问题。我记的当时我的解决方法是:一:之前我使用过最大熵,最大熵工具包有这样一个接口可以获得前一个token 的输出结果。二:穷举发。比较笨,但还挺好用的。仍以上文的例子为例:/

    21、Input: DataRockwell NNP BInternational NNP ICorp. NNP Is POS B 当前的 tokenTulsa NNP Iunit NN I词 词性 前一个输出 当前输出/训练语料:你只需最后再加入一列和前一个 token 的第三列一样的。这样第三列就可以认为是前一个 token 的输出结果作为了当前 token 的一个特征。我想你说的 U22:%x-1,2报错,是因为 CRF 默认为最后一列是标准输出,不允许作为输入特征使用,只要加入一列就不会有这样的问题了。输入变为:/Input: DataInput: DataRockwell NNP Null

    22、 BInternational NNP B ICorp. NNP I Is POS I B 当前的 tokenTulsa NNP B Iunit NN I I词 词性 前一个输出 当前输出/测试语料:因为测试时 CRF 应该是对整个句子的 token 输出序列有个全局最优算法,所以要使用前一个 token 的输出比较难。我们可以使用穷举法,假设前一个 token 的可能输出,算出当前输出概率。这样可能需要等同于输出类别个数的模板/Input: DataRockwell NNP Null Null Null BInternational NNP B I O ICorp. NNP B I O Is

    23、 POS B I O B 当前的 tokenTulsa NNP B I O Iunit NN B I O I词 词性 前一个可能输出(穷举) 当前输出/三个模板分别 U22:%x-1,3;U22:%x-1,4;U22:%x-1,5三个测试后的输出分别代表前一个是 B 是 I 是 O 时当前的输出。需要注意的是句首词的前一个输出为 NULL,它是无需进行选择的。如此一来,我们依据句首条件概率最大的输出来决定第二个词选择哪个模板(若句首输出为 B 选择模板一的结果,若为 I 选择模板二的输出结果,若为 O 悬在模板三的输出结果)来获得的当前输出作为当前的输出值,依次下推。就可以获得输出序列。此方法

    24、较笨,需要自己做一个后处理程序,在没有前一个特征输出接口时,使用此法比较实用,我用过效果还不错 :) 多谢佳佳回复。 。在构造训练数据时采用此方法添加前一个输出结果,的确是个好办法。但仍有一些问题,讨论如下:1. “三个模板分别 U22:%x-1,3;U22:%x-1,4 ;U22:%x-1,5” 是否应该是:“U22:%x-1,2;U22:%x-1,3;U22:%x-1,4” ?这样是否在训练语料中也列写这三个特征(即增加 3 列)?2.“依据句首条件概率最大的输出来决定第二个词选择哪个模板” 这句话不理解。比如,上一句概率最大的输出结果为 I,若下一句要想使用上一句的输出结果作为特征,则下

    25、一句应该使用模板 U22:%x-1,3(对应上一句的特征 I) ,但由于列举了三个模板(分别对应 BIO) ,模型应该全部使用它们而不具备选择功能吧;如果具备选择功能(比如此例中选择 I 对应的模板 U22:%x-1,3) ,是如何实现的呢?3.如果在测试语料中列举上一句所有可能的输出(BIO 三列) ,而训练语料中只包含上一句正确的输出(一列) ,这样训练数据和测试数据的格式是不是不一致?模型是否接受?1.我没有注意列数是从 0 开始的,三个模板应该是“U22:%x-1,2;U22:%x-1,3;U22:%x-1,4” 。我觉得你说得很对,CRF 提供的工具包在测试的时候无需再提供模板文件,

    26、这和我使用的最大熵工具有所不同。为了保证训练与测试模板的一致性,不能采用不同模板文件的方式,因此训练与测试文件格式也应该是一致的。我想是否可以让训练语料和测试语料格式一样,训练语料也加入三列,三列都是前一个输出特征?这样我们可以使用三个不同的 temp1(U22:%x-1,2)、temp2(U22:%x-1,3)、temp3(U22:%x-1,4)模板文件训练三个其实一样的模型,仅仅是模板文件不同,但特征内容在训练语料中提取出来是一样的,而训练的模型应该相同。但在测试阶段,使用三个模型获得的测试特征有所不同,分别是假设前一个输出是 BIO 时当前 token 的输出。例如:train.txt/

    27、Input: DataRockwell NNP Null Null Null BInternational NNP B B B ICorp. NNP I I I Is POS I I I B 当前的 tokenTulsa NNP B B B Iunit NN I I I词 词性 前一个输出 当前输出/测试语料:test.txt/Input: DataRockwell NNP Null Null Null BInternational NNP B I O ICorp. NNP B I O Is POS B I O B 当前的 tokenTulsa NNP B I O Iunit NN B I O

    28、 I词 词性 前一个可能输出(穷举) 当前输出/训练% crf_learn temp1 train.txt model1% crf_learn temp2 train.txt model2% crf_learn temp3 train.txt model3测试% crf_test -v2 -m model1 test1.txt% crf_test -v2 -m model2 test2.txt% crf_test -v2 -m model3 test3.txt此时,model1model2model3 相同,获得的 test1,test2,test3 分别对应假设前一个特征为 BIO 获得的输

    29、出结果2.“依据句首条件概率最大的输出来决定第二个词选择哪个模板” 的意思是指句首的前一个输出都是 null,三个模板的句首 token 输出结果应该都一样,假设句首输出都为 B,那么我们第二个 token 就应该使用 test1(对应 B)中第二个 token 的输出结果,假设是 I,那么第三个 token 就应该使用 test2(对应 I)的输出结果,依次类推。3.格式应该是一致的,因为默认测试与训练模板相同,这个我开始没有注意到.另外,这个方法比较麻烦,不知道有没有比较了解 CRF 的人,如果有相关接口就容易得多了。最大熵就提供前一个输出结果的接口,很好使用。决策树的计算原理决策树对比神

    30、经元网络的优点在于可以生成一些规则。 当我们进行一些决策,同时需要相应的理由的时候,使用神经元网络就不行了。这里介绍三个算法 CART,CHAID,C4.5。 决策树是如何工作的 决策树一般都是自上而下的来生成的。 选择分割的方法有好几种,但是目的都是一致的:对目标类尝试进行最佳的分割。 从根到叶子节点都有一条路径,这条路径就是一条“规则” 。 决策树可以是二叉的,也可以是多叉的。 对每个节点的衡量: 1) 通过该节点的记录数 2) 如果是叶子节点的话,分类的路径 3) 对叶子节点正确分类的比例。 有些规则的效果可以比其他的一些规则要好。 决策树对于常规统计方法的优点。 CART Divers

    31、ity(整体)-diversity(左节点)-diversity(右节点),值越大,分割就越好。 三种 diversity 的指标: 1. min(P(c1),P(c2) 2. 2P(c1)P(c2) 3. P(c1)logP(c1)+P(c2)logP(c2) 这几个参数有相同的性质:当其中的类是均匀分布的时候,值最大;当有一个类的个数为 0 的时候,值为 0。 选择分割的时候,对每个字段都考虑;对每个字段中的值先排序,然后再一一计算。最后选出最佳的分割。 树的生成: 错误率的衡量:最初生成的树中也是有错误率的!因为有些叶子节点并不是“Pure”的。 树的修剪:是不是当所以的叶子都很纯是,这

    32、棵树就能工作的很好呢? 修剪的要点是:应该回溯多少、如何从众多的子树总寻找最佳的。 1) 鉴别生成候选子树 :使用一个调整的错误率。AE(T)=E(T)+aleaf_count(T)。一步步的生成一些候选子树。 2) 对子树的评估:通过 test set 找到最佳子树 3) 对最佳子树进行评估:使用 evaluation set。 4) 考虑代价(cost)的问题。 C4.5 C4.5 是从 ID3 演变而来的。 C4.5 和 CART 的区别: 1) 树的生成方面。 C4.5 不一定使用两分法。C4.5 处理种类变量的时候,缺省的情况是每个值作为一个分支。 Gain 和 gain ratio

    33、。 2) 树的修剪 C4.5 使用原来的数据进行测试。(学院派) 规则的生成 CHAID 1975 年 和 CART 和 C4.5 的区别: 1. 在 overfitting 之前就停止树的生长。 2. 必须都是种类变量。数值变量必须分成范围。 树的生长 1. 选择分割。X2 检验 实际中使用决策树的一些问题 主要是一些数据准备和数据表示方面的问题。 案例:银行信用卡部门 1. 对数据细节的不熟悉。 2. 数据翻译问题。COBOL 3. 对时间元素的处理:OCCURS 语句的处理。可以根据需要来增加一些字段:delta_balance,delta_interest_rate 等等。 4. CA

    34、RT 算法不考虑字段之间的关系。 5. 定义类别。使用的工具在类别字段只可以有两个值。我们对原始数据进行一些映射处理。 “silent attrition”。 6. 数据表示的问题。需要额外的数据。 7. 消除杂音。 8. 欺骗性的字段。有些字段其实和要预测的字段并不是独立的。可以通过决策树来进行这些字段的判断。 9. 过于总结性的数据。 10. 经验和教训。 将决策树运用于事件序列: PV Future View,一个工具。 Case,某一时刻的快照。 Attribute,组成 Case 的字段 Feature,布尔变量,用于形成决策树的内部节点。 Interpretations,由 Att

    35、ribute 组成用于体现领域知识和关系的衍生字段。Interpretations 字段常常是由用户提供的。 从历史推出未来: 案例学习:咖啡烘烤的流程控制 其他的决策树的变种 1) 一次使用超过一个字段用于分类 2) 使用倾斜的超平面切分 3) 神经元树 决策树的优缺点: 优点: 1) 可以生成可以理解的规则。 2) 计算量相对来说不是很大。 3) 可以处理连续和种类字段。 4) 决策树可以清晰的显示哪些字段比较重要 缺点: 1) 对连续性的字段比较难预测。 2) 对有时间顺序的数据,需要很多预处理的工作。 3) 当类别太多时,错误可能就会增加的比较快。 4) 一般的算法分类的时候,只是根据一个字段来分类参数估计问题是统计学中的经典问题。最常用的和有效的方法就是:最大似然和贝叶斯估计。最大似然把待估的参数看做是确定性的量,只是其取值未知。最佳估计就是使得产生以观测到的样本的概率最大的那个值。贝叶斯估计则把待估计的参数看成是符合某种先验概率分布的随机变量。对样本进行观测的过程,就是把先验概率密度转化为后验概率密度,这样就利用样本的信息修正了对参数的初始估计值。在贝叶斯古籍中的,一个典型的效果就是,每得到新的观测样本,都使得后验概率密度函数变得更加尖锐,使其在待估参数的真实值附近形成最大的尖峰。

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:CRF工具包使用简介.doc
    链接地址:https://www.docduoduo.com/p-10506794.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开