使用CRF ++,MIRA适合我,但CRF-L1和CRF-L2不适用

时间:2013-04-26 15:52:37

标签: windows crf++

可能无关紧要,但我使用的是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正则化失败吗?

2 个答案:

答案 0 :(得分:1)

我知道这是愚蠢的......

要使用我正在使用的功能,您需要使用U前缀(如在Unigram中)。就像U00:%x[0,0]一样好。你不能随便给你打电话。

我还发现,如果我将测试数据删除到一个句子,我会收到相同的错误消息。当我将测试数据恢复到大约2600个句子的原始大小时,正则化算法现在运行。过度拟合是各种nlp和ml应用程序中此错误消息的常见原因,但在我的情况下这不是真正的问题。

答案 1 :(得分:0)

在只有一个CLASS的数据集的极端情况下也会发生这种情况(由于训练集生成过程中的错误)。