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
..

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM