1

可能没关系,但我使用的是 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 正则化这样失败?

4

2 回答 2

1

我知道这很愚蠢...

要使用我正在使用的功能,您需要使用U前缀(如在 Unigram 中)。所以喜欢U00:%x[0,0]就好。你不能随便称呼你的特性为你想要的任何东西。

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

于 2013-04-26T16:34:12.017 回答
0

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

于 2014-11-27T10:22:42.447 回答