1.java写的mallet的那个就别试了,太慢了
2.crfsuit试了下,编译容易出各种问题,很麻烦
3.最终还是sgd版的CRF最好使: http://leon.bottou.org/projects/sgd
4.sgd和crf++、crfsuit的训练文件格式一致,都是遵从IOB 格式(具体IOB格式的解释,请参考wiki:https://en.wikipedia.org/wiki/Inside_Outside_Beginning)
因此务必记得每行的训练数据的标注必须要加上开头的B_、I_等等。
否则sgd在训练过程中,虽然accuracy一直会增长,但是precision和recall将一直是0
另外,sgd、crf++、crfsuit的对比请参考:https://jianqiangma.wordpress.com/2011/11/14/%E4%B8%89%E7%A7%8Dcrf%E5%AE%9E%E7%8E%B0%E7%9A%84%E7%AE%80%E5%8D%95%E6%AF%94%E8%BE%83/
这篇文章对crf++产生的模型格式进行了详细分析:
http://www.hankcs.com/nlp/the-crf-model-format-description.html
分词CRF训练对语料的标注方法:
对句子中的每个字进行标记,如四符号标记{B,I, E, S},分别表示当前字是一个字的开始、中间、结尾,以及独立成词。这种方法首次由 Nianwen Xueet al.(2002)提出,之后研究者们尝试使用不同的序列标注模型,如最大熵、SVM、结构化感知器、CRF 等,不断提高分词效果。目前基于序列标注的方法在学术界仍然是分词主流方法。