这可能无关紧要,但我使用的是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正则化像这样失败?
发布于 2013-04-27 00:34:12
我就知道这是件很愚蠢的事。
要使用我正在使用的功能,您需要使用U前缀(就像在Unigram中一样)。所以,就像U00:%x[0,0]是很好的。你不能随心所欲地叫你的特性。
我还发现,如果我将测试数据简化为一句话,我会得到相同的错误消息。当我将测试数据恢复到大约2600个句子的原始大小时,正则化算法现在运行。在各种nlp和ml应用程序中,过度拟合是导致此错误消息的常见原因,但在我的情况下,这并不是真正的问题。
发布于 2014-11-27 18:22:42
在只有一个类的数据集的极端情况下(由于训练集生成过程中的错误),也可能发生这种情况。
https://stackoverflow.com/questions/16240504
复制相似问题