2016-03-21 28 views
0

我正在尝试使用陈和Manning(2014)的神经网络解析器的斯坦福CoreNLP实现来训练新模型。在培训期间,我使用-devFile选项对开发集每100次迭代进行一次UAS评估。经过几千次迭代后,我得到了一个相当不错的UAS(大约86%)。但是,培训完成后,我尝试在同一套开发套件上进行测试,结果我的UAS达到了15%左右。我正在使用英文Universal Dependencies树库。CoreNLP神经网络依赖性解析器 - 训练期间与测试期间评估之间的差异

培训的命令行选项:

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模型英文一切正常,我也得到大约一个UAS发展集合的80%。这使我相信,我的训练模型是欠佳的,而且我可能错过了一些需要的步骤或选项。但由于培训期间的评估结果相当不错,我有点困惑。根据我的理解,这两个评估之间不应该有太大的区别。

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

回答

0

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

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

这样做解决了这个问题,我得到的UAS与培训期间的UAS相同。

因此,如果您使用与默认值不同的字嵌入或隐藏层大小,则需要在与模型一起解析时传递这些参数。

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