CRF++的簡單使用


CRF++是著名的條件隨機場開源工具,也是目前綜合性能最佳的CRF工具。本文簡要介紹其使用方法。

一、工具包的下載:

a)         http://crfpp.sourceforge.net

其中有兩種,一種是Linux下(帶源碼)的,一種是win32的,當然是在什么平台下用就下載什么版本了。

b)         http://download.csdn.net/source/1425683

兩種版本打成一個包了。

二、安裝:

a)         Windows版的無須安裝,直接解壓即可使用;

b)         Linux版本的安裝方法是:

                         i.              解壓到某目錄下

                       ii.              打開控制台,將當前目錄切換到解壓目錄

                      iii.              依次輸入命令:    

./configure

make

su

make install

                            注:需要root權限才能成功安裝。

三、訓練語料格式:

a)         訓練語料至少應具有兩列,列間由空格或制表位間隔,且所有行(空行除外)必須具有相同的列數。句子間使用空行間隔。

b)         一些合法的語料示例:

                         i.              有兩列特征的

Sd N

Sa N

Bu N

Eu N

Sw N

 

Sp N

Bn N

En N

Su N

                       ii.              只有一列特征的

N

N

N

N

N

 

N

N

N

N

四、特征的選取及模板的編寫:

a)         特征選取的行是相對的,列是絕對的,一般選取相對行前后m行,選取n-1列(假設語料總共有n列),特征表示方法為:%x[,],行列的初始位置都為0。例如:

                         i.              以前面語料為例

Sw N

Bns B-LOC

Mns I-LOC

Ens I-LOC

Bn N

假設當前行為“京”字這一行,那么特征可以這樣選取:

特征模板

意義

代表特征

%x[-2,0]

-2行,0

%x[-1,0]

-1行,0

%x[0,0]

0行,0

%x[1,0]

1行,0

%x[2,0]

2行,0

%x[-2,1]

-2行,1

Sw

%x[-1,1]

-1行,1

Bns

%x[0,1]

0行,1

Mns

%x[1,1]

1行,1

Ens

%x[2,1]

2行,1

Sw

%x[-1,0]/%x[0,0]

-10列與00列的組合

/

%x[0,0]/%x[1,0]

00列與10列的組合

/

%x[-2,1]/%x[-1,1]

-21列與-11列的組合

Sw/ Bns

%x[-1,1]/%x[0,1]

-11列與01列的組合

Bns/Mns

%x[0,1]/%x[1,1]

01列與11列的組合

Mns/Ens

%x[1,1]/%x[2,1]

11列與21列的組合

Ens/Sw

%x[-2,1]/%x[-1,1]/%x[0,1]

-21列、-11列、01列的組合

Sw/Bns/Mns

%x[-1,1]/%x[0,1]/%x[1,1]

-11列、01列、11列的組合

Bns/Mns/Ens

%x[0,1]/%x[1,1]/%x[2,1]

01列、11列、21列的組合

Mns/Ens/Sw

b)         模板制作:模板分為兩類:UnigramBigram

其中Unigram/Bigram是指輸出tokenUnigram/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。后面的數字用於區分特征,當然這些數字不是一定要連續。

五、訓練方法

a)         語料的訓練可以使用命令(在終端或DOS命令行中):crf_learn <模板> <訓練語料> <模板文件>

其中模板和訓練語料是需要事先准備好的,模板文件在訓練完成后生成

注意:

1)         如果提示語料格式錯誤,則注意檢查語料的存儲編碼,有些編碼CRF++是會讀取錯誤的;

2)         文件路徑要正確,如果文件沒在當前目錄,那么要使用絕對路徑。

b)         訓練中一些參數的說明:

ter:迭代次數

terr:標記錯誤率

serr:句字錯誤率

obj:當前對象的值。當這個值收斂到一個確定值的時候,訓練完成

diff:與上一個對象值之間的相對差

六、解碼方法

a)         可以使用crf_test -m <模板文件> <測試文件1> <測試文件2> ……。

b)         結果會直接輸出到屏幕上面,如果想讓結果保存到文件中,那么使用重定向,在上面命令后面加上一個開關“>”即可:crf_test -m <模板文件> <測試文件1> > <保存位置>。例如:crf_test -m model test.txt > result.txt

七、評測工具CoNLL 2000的用法

a)         下載:

                         i.             http://download.csdn.net/source/1425687

                       ii.              http://www.cnts.ua.ac.be/conll2000/chunking/output.html

b)         使用它是用來評分,所以要求crf_test一步使用的測試文件中本身帶有答案,這樣解碼后生成的結果會在答案的后一列。比如原來為:

使 En N

Sw N

Bni B-ORG

Mni I-ORG

Eni I-ORG

Bn N

那么解碼后變成:

使 En N   N

Sw N  N

Bni B-ORG B-ORG

Mni I-ORG I-ORG

Eni I-ORG   I-ORG

Bn N   N

CoNLL 2000將把最后一列與倒數第二列進行對比,統計出最后各類的正確率,召回率、F值等。

c)         使用評測工具前要將評測文件中的所有制表位轉換成空格,否則評測工具會出錯。

d)         評測命令為:perl conlleval.pl < <評測文件>


免責聲明!

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



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