CRF++ 特征模版理解

CRF++特征模版的作用是自动生成特征函数:
模板文件中每一行代表一个 template,每一个template中, 利用专门的宏 %x 来确定输入数据中的一个token,CRF++通过宏产生相应的特征函数集合。 其中,row 表示当前token的前后行; col 表示其在样本中的列(特征) 。

用你的这个例子简单地给“北京是首都”(窗口为5)做BIO的标注,最后模型的输出是B,I,O,假设当前词条为“是”:
| token | POS | NER | ?? | ?? | 5th | output |
| 北 | ... | x | B |
| 京 | ... | x | I |
| 是 | ... | m | O | \u0026lt;-- 当前的词条
| 首 | ... | n | B |
| 都 | ... | n | I |

首先,你加了一行第五列,直接在最后加一行U1: %x表示特征函数集合:
CRF++ 特征模版理解


第二个问题,表示这一列的前后关系(上下文),选B,详细说明一下:
A选项:
U2:%xU3:%xU4:%xU5:%x这个就和U1一样,比如U2就是:如果output=B/I/O,并且-2位置的第五列5th=x就返回1,否则0。第五列的特征之间相互并不影响。
B选项:
U2:%x/%xU3:%x/%xU4:%x/%xU5:%x/%x这个表示5th特征共现的一些情况,U2就是:如果output=B/I/O,并且-2位置5th=x的同时-1位置5th=x,则返回1。这里,第五列特征之间有影响,共同满足要求才会返回1,也就是你所说的“第5列的前后关系”。写三个、四个串起来也行,但是得真的需要。增加一个模版就增加很多特征函数,每个token对应3个。

【CRF++ 特征模版理解】 你最后一个问题,“/” 就可以理解为“并且”。这个U5的作用就是,构建第三列和第四列需要同时满足XX条件的特征函数集合。

■网友
U4:%x #如果前面有这一个了,不需要加上(不过你之前只有四列,为毛会有这个)A中的条件是单个的,B中的条件是联合的模板的话,我个人经验是不要搞的太多太复杂,要不然运算起来慢,还容易overfit,


    推荐阅读