CRF工具包的使用


這里簡要介紹一下CRF++使用的命令格式、參數調整、模板制作的基本過程。

百度經驗:jingyan.baidu.com

工具/原料

  • CRF++

百度經驗:jingyan.baidu.com

方法/步驟

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

    命令行:

    % 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. 測試

    命令行:

    % crf_test -m model test.data

    有兩個參數-v和-n都是顯示一些信息的,-v可以顯示預測標簽的概率值,-n可以顯示不同可能序列的概率值,對於准確率,召回率,運行效率,沒有影響,這里不說明了。

    與crf_learn類似,輸出的結果放到了標准輸出流上,而這個輸出結果是最重要的預測結果信息(測試文件的內容+預測標注),同樣可以使用重定向,將結果保存下來,命令行如下。

    % crf_test -m model_file test_files >result_file

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

     

     

    下面是一個訓練樣本的例子:(參考下圖)

     

    訓練文件由若干個句子組成(可以理解為若干個訓練樣例),不同句子之間通過換行符分隔,上圖中顯示出的有兩個句子。每個句子可以有若干組標簽,最后一組標簽是標注,上圖中有三列,即第一列和第二列都是已知的數據,第三列是要預測的標注,以上面例子為例是,根據第一列的詞語和和第二列的詞性,預測第三列的標注。

    CRF++工具使用指南
  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。后面的數字用於區分特征,當然這些數字不是一定要連續。

    CRF++工具使用指南
  7. 總結

        命令行(命令行格式,參數,重定向)

        調參數(一般也就調訓練過程的c值)

        標注集(這個很重要,研究相關)

        模板文件(這個也很重要,研究相關)

        模板文件的Unigram feature 和 Bigram feature,前面也說了,這里指的是output的一元/二元,這個應用的情況暫時還不是特別了解,還需要看一些paper可能才能知道。


免責聲明!

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



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