使用CRF++的windows版本
doc檔案:就是官方首頁的內容。
example檔案夾:有四個任務的訓練資料、測試資料和模板檔案。
sdk檔案夾:CRF++的標頭檔和靜態連結庫。
crf_learn.exe:CRF++的訓練程式
crf_test.exe: CRF++的預測程式
libcrfpp.dll: 訓練程式和預測程式需要使用的靜態連結庫。
實際上,需要使用的就是crf_learn.exe,crf_test.exe和libcrfpp.dll這三個檔案。
可以把crf_learn.exe,crf_test.exe,libcrfpp.dll三個檔案拷到要訓練的語料的檔案夾內,如example/trainRM 訓練程式
命令列:
% crf_learn template_file train_filemodel_file
這個訓練過程的時間、迭代次數等資訊會輸出到控制台上(感覺上是crf_learn程式的輸出資訊到標準輸出資料流上了),如果想儲存這些標準輸出資料流到檔案上,命令格式如下:
% crf_learn template_file train_filemodel_file >>train_info_file
訓練過程中的資訊如下:
有4個主要的參數可以調整:
-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
a) 語料的訓練可以使用命令(在終端或DOS命令列中):crf_learn <模板> <訓練語料> <模板檔案>
其中模板和訓練語料是需要事先準備好的,模板檔案在訓練完成後產生。
注意:
1) 如果提示料格式錯誤,則注意檢查語料的儲存編碼,有些編碼CRF++是會讀取錯誤的;
2) 檔案路徑要正確,如果檔案沒在目前的目錄,那麼要使用絕對路徑。
b) 訓練中一些參數的說明:
iter: 迭代次數
terr:標記錯誤率
serr:句字錯誤率
obj:當前對象的值。當這個值收斂到一個確定值的時候,訓練完成
diff:與上一個對象值之間的相對差 測試程式
命令列:
%crf_test –m model_file test_files
有兩個參數-v和-n都是顯示資訊的,-v可以顯示預測標籤的機率值,-n可以顯示不同可能序列的機率值,對於準確率,召回率,運行效率,沒有影響,這裡不說明了。
與crf_learn類似,輸出的結果放到了標準輸出資料流上,而這個輸出結果是最重要的預測結果資訊(測試檔案的內容+預測標註),同樣可以使用重新導向,將結果儲存下來,命令列如下。
%crf_test –m model_file test_files>>result_file
評測工具CoNLL 2000的用法
使用評測工具前要將評測檔案中的所有製表位轉換成空格,否則測評工具會出錯。
評測命令為:perl conlleval.pl < <評測檔案>
檔案格式 訓練檔案
訓練檔案由若干個句子組成(可以理解為若干個訓練範例),不同句子之間通過分行符號分隔,上圖中顯示出的有兩個句子。每個句子可以由若干組標籤,最後一組標籤是標註,上圖中有三列,即第一列和第二列都是已知的資料,第三列是要預測的標註,以上面例子為例是,根據第一列的詞語和第二列的詞性,預測第三列的標註。
訓練語料格式:
a) 訓練語料至少應具有兩列,列間由空格或製表位間隔,且所有行(空行除外)必須具有相同的列數。句子間使用空行間隔。
b)
類型主要包括:
人名:PER
地名:LOC
機構名:ORG
每類實體都以B-開始,如地名的開始字由B-LOC表示,如果一個地名包括多個字,則後面的字標為I-LOC
如果某個字不屬於三類實體名,則標為N
特徵的選取及模板的編寫
a) 特徵選取的行是相對的,列是絕對的,一般選取相對行前後m行,選取n-1列(假設語料總共有n列),特徵表示方法為:%x[行,列],行列的初始位置都為0 測試檔案
測試檔案與訓練檔案格式自然是一樣的,用過機器學習工具包的這個一般都很理解吧。
與SVM不同,CRF++沒有單獨的結果檔案,預測結果通過標準輸出資料流輸出了,因此前面的命令列中,將結果重新導向到檔案中了。結果檔案比測試檔案多了一列,即為預測的標籤,我們可以計算最後兩列,一列的標註的標籤,一列的預測的標籤,來得到標籤預測的準確率。
總結
命令列(命令列格式,參數,重新導向)
調參數(一般也就調訓練過程的c值)
標註集(這個很重要,研究相關) 模板檔案(這個也很重要,研究相關)