zoukankan      html  css  js  c++  java
  • 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]模板(这个模板的意思就是利用当前词的第一列(词性)去预测最后一列(输出)),会产生如下函数:

    func1 = if (output = B-NP and feature="U01:DT") return 1 else return 0
    func2 = if (output = I-NP and feature="U01:DT") return 1 else return 0
    func3 = if (output = O and feature="U01:DT") return 1  else return 0
    ....
    funcXX = if (output = B-NP and feature="U01:NN") return 1  else return 0
    funcXY = if (output = O and feature="U01:NN") return 1  else return 0
    ...

    当前词的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
    ..

  • 相关阅读:
    D. The Fair Nut and the Best Path 树形dp (终于会了)
    (二)网络流之最大流
    网络流(知识点) 一 终究还是躲不掉
    dp 优化 F2. Pictures with Kittens (hard version)
    da shu mo ban
    AtCoder Regular Contest 090 F
    Codeforces 918D MADMAX 图上dp 组合游戏
    Codeforces 918C The Monster
    AtCoder Regular Contest 090 C D E F
    poj 3623 Best Cow Line, Gold 后缀数组 + 贪心
  • 原文地址:https://www.cnblogs.com/celia01/p/5352396.html
Copyright © 2011-2022 走看看