【CRF++模型格式】

接着上次的【windows下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 

-5.3039491549446858
6.9686606396030255
5.9844827873959154
-4.3162416304971041
4.4185688865372637
-5.2990564300105900
-4.9373089506693910
4.7936848979753899
-6.1425956046958499
5.3435599245402976
4.9866536107248614
-4.8910676238540454
3.6863946819974251
-5.2381988840381810
-5.1474476454664444
5.0938604828406104
……
-0.0854856428715045
0.2216443338134583
-0.0234487407772868
-0.0573568125836646
-0.0592046486542575
0.1337969064644119
-0.0172354452264886
-0.0000620669742785
-0.0012273518799763
-0.0005013828136905
0.0017908016679605
-0.1075056593663938
-0.0977943428724233
0.2306923414979798
-0.0253923392592181
-0.0473414896745179
-0.0446209497355857
0.1053652143241086
-0.0134027749139654

依次说明

文件头:

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[-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 

按照[id] [参数o]的格式排列,你可能会奇怪,f(s, o)应该接受两个参数才对。其实s隐藏起来了,注意到id不是连续的,而是隔了四个,这表示这四个标签(s=b|m|e|s)和公共的参数o组合成了四个特征函数。特别的,0-15为BEMS转移到BEMS的转移函数,也就是f(s’, s, o=null)。

扫描二维码关注公众号,回复: 1807334 查看本文章

值得注意的是,_B-1表示句子第一个单词前面的一个单词,_B+1表示末尾后面的一个单词,你可以在最大熵的模型中找到类似的逻辑处理,依次类推。

特征函数权值
后面的小数依id顺序对应每个特征函数的权值。

-5.3039491549446858
6.9686606396030255
5.9844827873959154
-4.3162416304971041
4.4185688865372637
-5.2990564300105900
-4.9373089506693910
4.7936848979753899
-6.1425956046958499
5.3435599245402976
4.9866536107248614
-4.8910676238540454
3.6863946819974251
-5.2381988840381810
-5.1474476454664444
5.0938604828406104
……
-0.0854856428715045
0.2216443338134583
-0.0234487407772868
-0.0573568125836646
-0.0592046486542575
0.1337969064644119
-0.0172354452264886
-0.0000620669742785
-0.0012273518799763
-0.0005013828136905
0.0017908016679605
-0.1075056593663938
-0.0977943428724233
0.2306923414979798
-0.0253923392592181
-0.0473414896745179
-0.0446209497355857
0.1053652143241086
-0.0134027749139654

关于解码
严格来讲,解码并不属于本文的范围,但是不说说解码的话,对特征函数权值的理解就仅仅限于“浮点数”这一表面。所以简要地说说解码,比如说我们有一个句子“商品和服务”,对于每个字都按照上述模板生成一系列U特征函数的参数代入,得到一些类似010101的函数返回值,乘上这些函数的权值求和,就得到了各个标签的分数,由大到小代表输出这些标签的可能性。

至于B特征函数(这里特指简单的f(s’, s)),在Viterbi后向解码的时候,前一个标签确定了后就可以代入当前的B特征函数,计算出每个输出标签的分数,再次求和排序即可。

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

猜你喜欢

转载自blog.csdn.net/feng_zhiyu/article/details/80840459