天天看点

【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

继续阅读