我在学习条件随机场的时候经常有这样的疑问,crf预测当前节点label如何利用其他节点的信息、crf的训练样本与其他的分类器有什么不同、crf的公式中特征函数是什么以及这些特征函数是如何表示的。在这一章中,我将在CRF++源码中寻找答案。
输入过程CRF++训练的入口在crf_learn.cpp文件的main函数中,在该函数中调用了encoder.cpp的crfpp_learn(int argc, char **argv)函数。在CRF++中,训练被称为encoder,显然预测就称为decoder。crfpp_learn的源码如下:
1 int crfpp_learn(int argc, char **argv) { 2 CRFPP::Param param; //存放输入的参数 3 param.open(argc, argv, CRFPP::long_options); //处理命令行输入的参数,存在param对象中 4 return CRFPP::crfpp_learn(param); 5 }