可能无关紧要,但我使用的是CRF ++ 0.58的Windows发行版。
所以我已成功使用mallet训练带有CRF的模型,然后进行测试。当我尝试使用相同的列车并使用CRF ++测试文件时(以及创建模板文件后),我得到了
The line search routine mcsrch failed: error code:0
使用时出现错误
-a CRF-L1
或默认
-a CRF-L2
当我使用
时-a MIRA
但是,培训工作没有错误,与测试相同。
对于mallet和crf ++,测试和训练数据的格式可以相同,因此这不是问题。我的模板文件就像
一样简单#Mixed
M00:%x[0,0]
M01:%x[0,1]
M02:%x[0,2]
......
M12:%x[0,12]
我的训练数据中的最后一列是0或1,这是要分类的值。我的任何功能都没有空白,我在必要时使用下划线。我在这里遗漏了一些简单的东西,会导致L1和L2正则化失败吗?
答案 0 :(得分:1)
我知道这是愚蠢的......
要使用我正在使用的功能,您需要使用U
前缀(如在Unigram中)。就像U00:%x[0,0]
一样好。你不能随便给你打电话。
我还发现,如果我将测试数据删除到一个句子,我会收到相同的错误消息。当我将测试数据恢复到大约2600个句子的原始大小时,正则化算法现在运行。过度拟合是各种nlp和ml应用程序中此错误消息的常见原因,但在我的情况下这不是真正的问题。
答案 1 :(得分:0)
在只有一个CLASS的数据集的极端情况下也会发生这种情况(由于训练集生成过程中的错误)。