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

这可能无关紧要,但是我使用的是CRF ++ 0.58的窗口分布。

所以我已经成功地用木槌来训练一个CRF模型,然后testing它。 当我尝试使用相同的火车和testing文件与CRF ++(和创build模板文件后),我得到一个

The line search routine mcsrch failed: error code:0 

当我使用任何错误

 -a CRF-L1 

或默认

 -a CRF-L2 

当我使用

 -a MIRA 

尽pipe如此,培训工作没有错误和相同的testing。

对于mallet和crf ++,testing和训练数据的格式可以相同,所以这不是问题。 我的模板文件就像

 #Mixed M00:%x[0,0] M01:%x[0,1] M02:%x[0,2] ...... M12:%x[0,12] 

我的最后一列在我的训练数据中是0或1,这是用于分类的值。 我的任何function都没有空格,必要时使用下划线。 我在这里错过了一些简单的东西,是什么会导致L1和L2正规化失败呢?

    我知道这是愚蠢的

    要使用我正在使用的功能,您需要使用U前缀(如在Unigram中)。 所以就像U00:%x[0,0]很好。 你不能只是叫你任何你想要的功能。

    我还发现,如果我将测试数据分解成单个句子,我会得到相同的错误信息。 当我将测试数据恢复到原来的大约2600个句子时,正则化算法现在运行。 过度拟合是跨越各种nlp和ml应用程序的错误消息的常见原因,但这不是我的情况的真正的问题。

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