crf++是著名的條件隨機場開源工具,也是目前綜合性能最佳的crf工具。本文簡要介紹其使用方法。
a)b)
兩種版本打成乙個包了。
二、安裝:
a)windows版的無須安裝,直接解壓即可使用;
b)linux版本的安裝方法是:
i.解壓到某目錄下
ii.開啟控制台,將當前目錄切換到解壓目錄
iii.
依次輸入命令:
./configure
make
sumake 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]
-1行0列與0行0列的組合
北/京%x[0,0]/%x[1,0]
0行0列與1行0列的組合
京/市%x[-2,1]/%x[-1,1]
-2行1列與-1行1列的組合
sw/ bns
%x[-1,1]/%x[0,1]
-1行1列與0行1列的組合
bns/mns
%x[0,1]/%x[1,1]
0行1列與1行1列的組合
mns/ens
%x[1,1]/%x[2,1]
1行1列與2行1列的組合
ens/sw
%x[-2,1]/%x[-1,1]/%x[0,1]
-2行1列、-1行1列、0行1列的組合
sw/bns/mns
%x[-1,1]/%x[0,1]/%x[1,1]
-1行1列、0行1列、1行1列的組合
bns/mns/ens
%x[0,1]/%x[1,1]/%x[2,1]
0行1列、1行1列、2行1列的組合
mns/ens/sw
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。後面的數字用於區分特徵,當然這些數字不是一定要連續。
五、訓練方法
a)語料的訓練可以使用命令(在終端或dos命令列中):crf_learn 《模板》 《訓練語料》 《模板檔案》
其中模板和訓練語料是需要事先準備好的,模板檔案在訓練完成後生成
注意:1)
如果提示語料格式錯誤,則注意檢查語料的儲存編碼,有些編碼crf++是會讀取錯誤的;
2)檔案路徑要正確,如果檔案沒在當前目錄,那麼要使用絕對路徑。
b)訓練中一些引數的說明:
ter:迭代次數
terr:標記錯誤率
serr:句字錯誤率
obj:當前物件的值。當這個值收斂到乙個確定值的時候,訓練完成
六、解碼方法
a)可以使用crf_test -m 《模板檔案》 《測試檔案1> 《測試檔案2> ……。
b)結果會直接輸出到螢幕上面,如果想讓結果儲存到檔案中,那麼使用重定向,在上面命令後面加上乙個開關「>」即可:crf_test -m 《模板檔案》 《測試檔案1> > 《儲存位置》。例如:crf_test -m model test.txt > result.txt
七、評測工具conll 2000的用法
a)i.
ii.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 < 《評測檔案》
CRF 的使用總結
英文版官網,使用手冊的感覺。2,crf 0.58.zip doc資料夾為官網位址 example為給的4個例子。實際需要的 crf learn.exe crf test.exe libcrfpp.dll三個檔案 可以先拿example中的某個例子,做一下測試。例如 example中chunking資...
CRF簡單理解總結
條件隨機場 conditional random fields,以下簡稱crf 是給定一組輸入隨機變數條件下另一組輸出隨機變數的條件概率分布模型,其特點是假設輸出隨機變數構成馬爾科夫隨機場。條件隨機場是一種判別式模型 crf的作用 簡單理解就是從可選的標註序列中,選擇最靠譜的乙個序列。比如一句話中有...
CRF原理和CRF 安裝與使用
普通的分類問題是把 x,y 看做乙個樣本,序列分類問題是把 x1,xt,y1,yt 整體看做乙個樣本。比如以前用 svm,輸入x輸出y是標量,表示類別 現在用crf,輸入x輸出y是個序列,表示不同位置 時刻的類別。通過訓練迭代出各個特徵函式的類別。crf通過迭代各特徵函式的權重使得對狀態序列的所有位...