天天看點

【CRF++模型格式】

接着上次的【windows下CRF++的安裝與使用】。

【CRF++模型格式】

得到了一個CRF模型檔案:4_model.txt

檔案中的大緻内容:

version: 100
cost-factor: 1
maxid: 1000212
xsize: 1

B
E
M
S

U00:%x[-1,0]  
U01:%x[0,0]  
U02:%x[1,0]  
U03:%x[-1,0]/%x[0,0]  
U04:%x[0,0]/%x[1,0]  
U05:%x[-1,0]/%x[1,0] 
B

0 B
16 U00:_B-1  
20 U00:±  
24 U00:·  
28 U00:—  
32 U00:…  
36 U00:℃  
40 U00:Ⅱ  
44 U00:○  
48 U00:一  
52 U00:丁  
56 U00:七  
60 U00:萬  
64 U00:丈  
68 U00:三  
72 U00:上  
76 U00:下  
80 U00:不  
84 U00:與  
88 U00:醜  
92 U00:專  
96 U00:且  
100 U00:世  
104 U00:丘  
108 U00:丙  
112 U00:業  
116 U00:叢  
120 U00:東  
124 U00:絲  
……
879904 U05:點/持 
879908 U05:點/新 
879912 U05:點/方 
879916 U05:點/時 
879920 U05:點/是 
879924 U05:點/有 
879928 U05:點/查 
879932 U05:點/标 
879936 U05:點/校 
879940 U05:點/滴 
879944 U05:點/點 
879948 U05:點/物 
879952 U05:點/生 
879956 U05:點/用 
879960 U05:點/的 
……
999360 U05:8/和 
999364 U05:8/國 
999368 U05:8/在 
999372 U05:8/實 
999376 U05:8/宣 
999380 U05:8/對 
999384 U05:8/将 
999388 U05:8/年 
999392 U05:8/廣 
999396 U05:8/底 
999400 U05:8/開 
……
1000188 U05:r/o 
1000192 U05:s/o 
1000196 U05:s/t 
1000200 U05:t/_B+1 
1000204 U05:t/r 
1000208 U05:v/r 

-
6.9686606396030255
5.9844827873959154
-
4.4185688865372637
-
-
4.7936848979753899
-
5.3435599245402976
4.9866536107248614
-
3.6863946819974251
-
-
5.0938604828406104
……
-.0854856428715045
0.2216443338134583
-.87407772868
-.8125836646
-.92046486542575
0.1337969064644119
-.886
-.9742785
-.8799763
-.828136905
0.0017908016679605
-.
-.0977943428724233
0.2306923414979798
-.923392592181
-.896745179
-.9497355857
0.1053652143241086
-.9139654
           

依次說明

檔案頭:

version: 100
cost-factor: 1
maxid: 1000212
xsize: 1
           

說明了模型的版本,通過-c參數指定的cost-factor,特征函數的最大id,xsize是特征維數,也就是訓練語料列數-1。

值得注意的是maxid比我們從文本中觀察到的最大id(maxid)大了4,這是為什麼呢?且聽下文分解。

标簽

B
E
M
S
           

也就是最終的輸出。

模闆

U00:%x[-,]  
U01:%x[,]  
U02:%x[,]  
U03:%x[-,]/%x[,]  
U04:%x[,]/%x[,]  
U05:%x[-,]/%x[,] 
B
           

特征函數

B
 U00:_B-  
 U00:±  
 U00:·  
 U00:—  
 U00:…  
 U00:℃  
 U00:Ⅱ  
 U00:○  
 U00:一  
 U00:丁  
 U00:七  
 U00:萬  
 U00:丈  
 U00:三  
 U00:上  
 U00:下  
 U00:不  
 U00:與  
 U00:醜  
 U00:專  
 U00:且  
 U00:世  
 U00:丘  
 U00:丙  
 U00:業  
 U00:叢  
 U00:東  
 U00:絲  
……
 U05:點/持 
 U05:點/新 
 U05:點/方 
 U05:點/時 
 U05:點/是 
 U05:點/有 
 U05:點/查 
 U05:點/标 
 U05:點/校 
 U05:點/滴 
 U05:點/點 
 U05:點/物 
 U05:點/生 
 U05:點/用 
 U05:點/的 
……
 U05:8/和 
 U05:8/國 
 U05:8/在 
 U05:8/實 
 U05:8/宣 
 U05:8/對 
 U05:8/将 
 U05:8/年 
 U05:8/廣 
 U05:8/底 
 U05:8/開 
……
 U05:r/o 
 U05:s/o 
 U05:s/t 
 U05:t/_B+ 
 U05:t/r 
 U05:v/r 
           

按照[id] [參數o]的格式排列,你可能會奇怪,f(s, o)應該接受兩個參數才對。其實s隐藏起來了,注意到id不是連續的,而是隔了四個,這表示這四個标簽(s=b|m|e|s)和公共的參數o組合成了四個特征函數。特别的,0-15為BEMS轉移到BEMS的轉移函數,也就是f(s’, s, o=null)。

值得注意的是,_B-1表示句子第一個單詞前面的一個單詞,_B+1表示末尾後面的一個單詞,你可以在最大熵的模型中找到類似的邏輯處理,依次類推。

特征函數權值

後面的小數依id順序對應每個特征函數的權值。

-
6.9686606396030255
5.9844827873959154
-
4.4185688865372637
-
-
4.7936848979753899
-
5.3435599245402976
4.9866536107248614
-
3.6863946819974251
-
-
5.0938604828406104
……
-.0854856428715045
0.2216443338134583
-.87407772868
-.8125836646
-.92046486542575
0.1337969064644119
-.886
-.9742785
-.8799763
-.828136905
0.0017908016679605
-.
-.0977943428724233
0.2306923414979798
-.923392592181
-.896745179
-.9497355857
0.1053652143241086
-.9139654
           

關于解碼

嚴格來講,解碼并不屬于本文的範圍,但是不說說解碼的話,對特征函數權值的了解就僅僅限于“浮點數”這一表面。是以簡要地說說解碼,比如說我們有一個句子“商品和服務”,對于每個字都按照上述模闆生成一系列U特征函數的參數代入,得到一些類似010101的函數傳回值,乘上這些函數的權值求和,就得到了各個标簽的分數,由大到小代表輸出這些标簽的可能性。

至于B特征函數(這裡特指簡單的f(s’, s)),在Viterbi後向解碼的時候,前一個标簽确定了後就可以代入目前的B特征函數,計算出每個輸出标簽的分數,再次求和排序即可。

參考:

http://www.hankcs.com/nlp/the-crf-model-format-description.html

繼續閱讀