我正在尝试使用陈和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%。这使我相信,我的训练模型是欠佳的,而且我可能错过了一些需要的步骤或选项。但由于培训期间的评估结果相当不错,我有点困惑。根据我的理解,这两个评估之间不应该有太大的区别。
那么,培训期间评估与测试期间评估之间存在较大差异的原因是什么?