CoreNLP神经网络依赖性解析器 - 训练期间评估与测试之间的差异

时间:2016-03-21 09:30:28

标签: nlp stanford-nlp

我正在尝试使用Chen和Manning(2014)的神经网络解析器的Stanford CoreNLP实现来训练一个新模型。在培训期间,我使用-devFile选项每100次迭代对开发集进行UAS评估。经过几千次迭代后,我获得了相当不错的UAS(大约86%)。然而,在培训完成后我尝试在同一个开发集上进行测试时,我获得了大约15%的UAS。我正在使用英语Universal Dependencies树库。

培训的命令行选项:

java edu.stanford.nlp.parser.nndep.DependencyParser -trainFile ~/Datasets/universal-dependencies-1.2/UD_English/en-ud-train.conllu -devFile ~/Datasets/universal-dependencies-1.2/UD_English/en-ud-dev.conllu -embedFile path/to/wordvecs -embeddingSize 100 -model nndep.model.txt.gz  -trainingThreads 2

用于测试的命令行选项:

java edu.stanford.nlp.parser.nndep.DependencyParser -model nndep.model.txt.gz -testFile ~/Datasets/universal-dependencies-1.2/UD_English/en-ud-dev.conllu

当我使用提供的UD模型进行英语时,一切正常,我在开发集上获得了大约80%的UAS。这让我相信我训练有素的模型是低于标准的,而且我可能错过了一些必要的步骤或选项。但由于在训练期间的评估给出了相当不错的结果,我有点困惑。根据我的理解,这两个评估之间不应该存在很大差异。

那么,在培训期间评估与测试时评估之间存在巨大差异的原因可能是什么?

2 个答案:

答案 0 :(得分:0)

回答我自己的问题。 我在another thread找到了这个问题的答案,尽管他们的问题有点不同。

当您使用与默认值50不同的嵌入大小时,您还需要在解析时传递-embeddingSize标志。如上面链接的线程所述,这也适用于隐藏的大小参数。

这样做解决了这个问题,我得到的UAS等同于训练期间的UAS。

因此,如果您使用与默认值不同的单词嵌入或隐藏图层大小,则需要在使用模型进行分析时传递这些参数。

答案 1 :(得分:0)

我认为你有错误,我不知道是否是复制粘贴,而是在:

“用于测试的命令行选项:”

java edu.stanford.nlp.parser.nndep.DependencyParser -model nndep.model.txt.gz -testFile ~/Datasets/universal-dependencies-1.2/UD_English/en-ud-**dev**.conllu

我认为应该是:

java edu.stanford.nlp.parser.nndep.DependencyParser -model nndep.model.txt.gz -testFile ~/Datasets/universal-dependencies-1.2/UD_English/en-ud-**test**.conllu