conlleval CRF 的使用總結

2021-10-25 17:39:45 字數 4395 閱讀 7132

2,crf++-0.58.zip

doc資料夾為官網位址;example為給的4個例子。

實際需要的: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)裡。

cmdcd進入該資料夾

crf_learn template train.data

model 訓練資料

crf_test -m model test.data >

output.txt 測試資料

conlleval.pl <

output.txt 評估效果

3,訓練

命令列:

% crf_learn template train.data

model這個訓練過程的時間、迭代次數等資訊會輸出到控制台上(感覺上是crf_learn程式的輸出資訊到標準輸出流上了),如果想儲存這些資訊,我們可以將這些標準輸出流到檔案上,命令格式如下:

% crf_learn template_file train_file model_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_file train_file

model_file

4,測試

命令列:

% crf_test -m model

test.data有兩個引數-v和-n都是顯示一些資訊的,-v可以顯示**標籤的概率值,-n可以顯示不同可能序列的概率值,對於準確率,召回率,執行效率,沒有影響,這裡不說明了。

與crf_learn類似,輸出的結果放到了標準輸出流上,而這個輸出結果是最重要的**結果資訊(測試檔案的內容+**標註),同樣可以使用重定向,將結果儲存下來,命令列如下。

% crf_test -m model_file test_files >

result_file

5,評估

若訓練過程:% crf_test -m model

test.data > output.txt

訓練的結果在output.txt裡。評估的就是這個檔案,即待**標籤與**標籤的對比。

%conlleval.pl < output.txt

.pl字尾為perl檔案,所以需要安裝perl

特別注意:output.txt在crf++輸出中空格為tab鍵,需要全部替換為真正空格鍵。conlleval.pl識別的是空格鍵。

6,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

下面是乙個訓練樣本的例子:

訓練檔案由若干個句子組成(可以理解為若干個訓練樣例),不同句子之間通過換行符分隔,上圖中顯示出的有兩個句子。每個句子可以有若干組標籤,最後一組標籤是標註,上圖中有三列,即第一列和第二列都是已知的資料,第三列是要**的標註,以上面例子為例是,根據第一列的詞語和和第二列的詞性,**第三列的標註。

7,template格式

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。後面的數字用於區分特徵,當然這些數字不是一定要連續。

conlleval CRF 的測試結果統計

crf 是乙個開源工具,是自然語言處理的一把利器。它可以編譯為 crf learn 和crf test兩個bin檔案。測試的效果是進行比對。可惜這東西比對完也不給個統計,真教人不爽。幸虧有人做了個perl工具 conlleval 說明文件見 這兒 txt文件,改名為 conlleval.pl 或者任...

類的使用,物件的使用

一 類的使用 class student school luffycity def eat self print yes defdrink self print drink 檢視print student.dict 增student.teacher gaohui print student.dict...

messagebox的使用(使用整理)

定義 messagebox顯示乙個模態對話方塊,其中包含乙個系統圖示 一組按鈕和乙個簡短的特定於應用程式訊息,如狀態或錯誤的資訊。訊息框中返回乙個整數值,該值指示使用者單擊了哪個按鈕。messagebox hwnd hwnd text,caption pchar type word hwnd 訊息框...