【问题标题】:CoreNLP Neural Network Dependency Parser - Difference between evaluation during training versus testingCoreNLP 神经网络依赖解析器 - 训练期间评估与测试期间的差异
【发布时间】:2016-05-02 15:22:25
【问题描述】:

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

用于训练的命令行选项:

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。这让我相信我训练的模型低于标准,我可能错过了一些必要的步骤或选项。但是由于训练期间的评估给出了很好的结果,我有点困惑。根据我的理解,这两个评估之间应该没有那么大的差异。

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

【问题讨论】:

    标签: nlp stanford-nlp


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案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
      

      我认为应该是:

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

      【讨论】:

        猜你喜欢
        • 2016-09-30
        • 1970-01-01
        • 2019-12-17
        • 2011-12-24
        • 2018-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-14
        相关资源
        最近更新 更多