在之前使用CRF++的过程中一直是再Windows下运行的,由于训练文本不大,所以很顺利,但为提高结果准确率而增加训练语料内容,随之也出现问题,因为用自己的机子做会使cpu占用率在训练迭代时瞬间达到100%而导致crf_learn.exe停止工作,如下图所以就转到服务器端训练了,然而也出现了一个问题,可能由于Windows下文件在Linux中是略有不同,所以运行时报错,如下:
encoder.cpp(340) [feature_index.open(templfile, trainfile)]feature_index.cpp(174) [max_size == size] inconsistent column size:3 1 train404pos11.txt
也尝试将Windows文件中的换行符“\r\n”全部替换为“\r”但仍报错,尝试了几种其他的方法后,仍无结果。突然想起来在CRF++包中有自带一个example文件夹,就把里面的示例train.data拷到Windows下与我自己的文件对比一下到底哪里出了问题,用Notepad++打开这两个文件,“视图”-“显示符号”-“显示行尾符”,果然问题显现,如下图:
我的训练语料
CRF++示例文件
如何能将我文档中的”CRLF“替换为只有”LF“呢?在网上找到了答案:”编辑“-”档案格式转换“-”转为unix格式“,总算跟示例文件格式一致了,又到服务器上测试一下效果如何,果然问题解决了,训练成功。
小贴士:如果选mac格式就是只有CR,如果是Windows就是都有。新建的文档默认应该是Windows格式。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-02/113833.htm