CRF++使用简介(windows下非接口)
CRF簡介
CRF++是著名的條件隨機場的開源工具,也是目前綜合性能最佳的CRF工具。
CRF 的工具有兩種,一種是支持Linux環境的,一種是支持Windows環境的,大家可以自行根據自己的系統進行下載。(在此我下載的是CRF++ -0.58)
linu的安裝應該簡單些,幾行命令就能搞定,而windows下其實嚴格來講不能說是安裝。我們解壓我們下載的壓縮包文件到某一個目錄下面即可。CRF同時也提供了python接口,可以通過接口直接加載模型,自定義函數,我這里目前是windows的環境,暫且先用命令行。
CRF解壓后的包:
這里很有必要對幾個目錄介紹下:
- doc文件夾:官方主頁的內容
- example文件夾:有四個數據包,每個數據包有四個文件:
訓練數據(test.data)、測試數據(train.data)、模板文件(template)、執行腳本文件exec.sh。 - sdk文件夾:CRF++的頭文件和靜態鏈接庫。
- clr_learn.exe:CRF++的訓練程序
- crl_test.exe:CRF++的測試程序
- libcrffpp.dll:訓練程序和測試程序需要使用的靜態鏈接庫。
實際上,需要使用的就是crf_learn.exe,crf_test.exe和libcrfpp.dll,這三個文件。
這里直接使用CRF自帶的例子進行試驗一下:
在example中的某個例子做一下測試。例如:example中chunking文件夾,其中原有4個文件:exec.sh;template;test.data;train.data。將crf_learn.exe;crf_test.exe;libcrfpp.dll三個文件復制到這個文件夾(chunking)底下。
然后使用命令行cd到chunking目錄下,這里我用的是 Anaconda prompt 的命令行:
(base) C:\Users\LiLong>cd C:\CRF++-0.58\example\chunking模型訓練:
在命令窗口中,cd到該文件夾后,然后輸入以下命令進行訓練模型。
模板:crf_learn template_file train_file model_file
輸入如下:
(base) C:\CRF++-0.58\example\chunking>crf_learn template train.data model你可以看到控制臺上打印處的信息,并會產生一個新的文件:model。
CRF++: Yet Another CRF Tool Kit Copyright (C) 2005-2013 Taku Kudo, All rights reserved.reading training data: Done!0.03 sNumber of sentences: 77 Number of features: 153482 Number of thread(s): 4 Freq: 1 eta: 0.00010 C: 1.00000 shrinking size: 20 iter=0 terr=0.98629 serr=1.00000 act=153482 obj=5003.65270 diff=1.00000 iter=1 terr=0.38449 serr=1.00000 act=153482 obj=4082.64911 diff=0.18407 iter=2 terr=0.38449 serr=1.00000 act=153482 obj=1974.35839 diff=0.51640 iter=3 terr=0.19937 serr=0.93506 act=153482 obj=1323.56081 diff=0.32962 iter=4 terr=0.14030 serr=0.92208 act=153482 obj=826.22783 diff=0.37575 iter=5 terr=0.08333 serr=0.71429 act=153482 obj=573.51229 diff=0.30587 iter=6 terr=0.03692 serr=0.44156 act=153482 obj=388.80427 diff=0.32206 iter=7 terr=0.01266 serr=0.20779 act=153482 obj=310.94172 diff=0.20026 iter=8 terr=0.00158 serr=0.03896 act=153482 obj=285.42807 diff=0.08205 iter=9 terr=0.00105 serr=0.02597 act=153482 obj=273.98088 diff=0.04011 iter=10 terr=0.00000 serr=0.00000 act=153482 obj=266.16068 diff=0.02854 iter=11 terr=0.00000 serr=0.00000 act=153482 obj=260.00330 diff=0.02313 ... ... iter=26 terr=0.00000 serr=0.00000 act=153482 obj=253.78214 diff=0.00004 iter=27 terr=0.00000 serr=0.00000 act=153482 obj=253.77759 diff=0.00002Done!1.02 s首先說下輸出參數的意思:
- iter:迭代次數。當前迭代次數達到maxiter時,迭代終止。
- terr:標記錯誤率
- serr:句子錯誤率
- obj:當前對象的值。當這個值收斂到一個確定的值的時候,訓練完成。
- diff:與上一個對象之間的相對差。當此值低于eta時,訓練完成。
這個訓練過程的時間、迭代次數等信息就會輸出到控制臺上,如果想要保存這些信息到一個文件里,命令格式模板:
crf_learn template_file train_file model_file >> train_info_file
例如:crf_learn template train.data model >> model_out.txt
這時chunking文件夾下就會多一個model_out.txt文件,而文件里存儲的就是上面控制平臺輸出的內容。
在模型訓練和測試中的命令參數是以下的形式:
crf_learn -f 3 -p 8 -c 3 template train.data model
其中主要的參數有以下幾個:
- -a -algorithm=CRF-L2 or CRF-L1
規范化算法的選擇。默認是CRF-L2。一般來說L2算法效果要比L1算法稍微好一點,雖然L1算法中非零特征的數值要比L2中大幅度的小。 - -f -freq=NUM
這個參數設置特征的cut-off threshold。CRF++使用訓練數據中至少出現NUM次的特征。默認值為1。當使用CRF++到大規模數據的時候,只出現一次的特征可能會有百萬個,這個選項就會在這樣的情況下起作用了。 - -p -thread=NUM
如果電腦有多個CPU ,那么可以通過多線程提升訓練速度。NUM是線程數量。 - -c -cost=float
這個參數設置CRF的hyper-parameter。c的數值越大,CRF擬合訓練數據的程度越高。這個參數可以調整過擬合和不擬合之間的平衡度。這個參數可以通過交叉驗證等方法尋找較優的參數。 - -m -maxiter=int
設置最大的迭代次數(默認為10k) - -e -eta=float
設置終止標準(默認為0.0001)
模型測試:
輸入命令進行測試數據,測試程序的命令為:
模板:crf_test -m model_file test_file
eg: crf_test -m model test.data
同上,也可以把輸出結果導入到一個文件里保存起來。
預測參數有兩個-v 和-n,都是用來顯示一些信息的。
-v :可以用來預測標簽概率值
-n:可以顯示不同可能序列的概率值
訓練語料庫格式:
訓練語料至少應該具有兩列,列間由空格或者制表位間隔,且所有行(空行除外)必須具有相同的列,句子間使用空行間隔。
特征選取及模板的編寫:
特征選取的行是相對的,列數絕對的,一般選取相對行前后m行,選取n-1列(假設語料總共有n列),特征表示方法為:%x[行,列],行列的初始位置都為0。
這里可采用的模板是:
# Unigram U00:%x[-1,0] U01:%x[0,0] U02:%x[1,0] U03:%x[2,0] U04:%x[-2,0] U05:%x[1,0]/%x[2,0] U06:%x[0,0]/%x[-1,0]/%x[-2,0] U07:%x[0,0]/%x[1,0]/%x[2,0] U08:%x[-1,0]/%x[0,0] U09:%x[0,0]/%x[1,0]U10:%x[-1,0]/%x[1,0]總結
以上是生活随笔為你收集整理的CRF++使用简介(windows下非接口)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 循环神经网络应用案例
- 下一篇: 租房子的不交物业费和暖气费怎么办?