CRF有几个开源实现:pocketcrf, flexcrf 和crf++,目前感觉crf++在易用性,稳定性和准确性等综合方面的表现最好。
CRF++到主页是“CRF++: Yet Another CRF toolkit”。
我下载了 CRF++-0.54 source code, 根据主页到指示, 在Ubuntu下build 和 install.
关于如何训练和测试CRF++,主页里有详细到介绍。
“使用CRF++进行分词的原理和实现过程”到过程参见一下博文:
http://blog.csdn.net/lihaitao000/article/details/51736956
CRF++到特征模板和特征函数到关系,有些让人迷惑。以下引用自另一篇博客。
在CRF++中,存在特征模板的概念,通过定义模板文件中的特征模板来提取特征,进行CRF模型计算。
其特征分以下三个阶段:
1 特征模板:定义从训练集中提取特征的方法
2 特征F:使用特征模板从训练集中提取到的特征字符串,在CRF++中,这些特征都是二值函数
3 活动特征AF: 具体某个特征在某个Tag下出现的情况,af(f,tag)。
在CRF的解码过程,实际上是通过已知的F,展开成AF,并求出最可能的Tag的序列;
因为CRF++只需要写一个特征模板,使用简单。因此在NLP领域得到了广泛的应用。但是,简单的使用界面是有副作用的。
1、通过特征模板,产生了大量的无效特征,上述特征在提高计算精度上贡献有限,但是仍然占用了大量的计算时间
2、通过特征模板,难于表达复杂的特征提取逻辑
找到一篇博文,“CRF++代码分析”(有空时应该深入下代码的):
http://chuansong.me/n/629999552417