训练SyntaxNet模型

时间:2016-05-20 15:36:53

标签: nlp tensorflow bazel syntaxnet

我正在尝试使用http://universaldependencies.org/中可用的数据集以及tutorial之后的其他语言训练Google Syntaxnet模型。我编辑了syntaxnet/context.pbtxt文件但当我尝试运行指南中提供的bazel's script时出现以下错误:

syntaxnet/term_frequency_map.cc:62] Check failed: ::tensorflow::Status::OK() == (tensorflow::Env::Default()->NewRandomAccessFile(filename, &file)) (OK vs. Not found: brain_pos/greedy/0/label-map)

我的疑问是:我必须提供此文件以及其他文件,例如fine-to-universal.maptag-mapword-map等,否则列车步骤必须使用训练数据集?如果我必须提供它们,我该如何构建它们?

提前致谢

3 个答案:

答案 0 :(得分:0)

我试图和你做同样的事情并遇到完全相同的错误。事实证明,我不小心删除了标志--compute_lexicon。我想这个标志负责创建tag-mapword-map等。所以请确保--compute_lexicon已启用。

答案 1 :(得分:0)

我得到了类似的错误,说实话我没有发现问题是什么,但是我使用这个link来学习培训和测试过程,它为培训提供了有用的文档。

您可能无法将培训,调整和测试数据集的格式从.conllu更改为.conl,或者培训shell可能会被--arg_prefix,{{1}中提到的目录混淆}, - task_context甚至--output_path

答案 2 :(得分:0)

我记得一开始有类似的错误。您是否使用了“训练解析器”步骤1下的确切代码:本地预训练&#39 ;?因为你会注意到那里有一个未初始化的$ PARAMS变量,它应该代表训练有素的POS标记器的参数。当您训练一个标记器(参见同一教程的前面)时,它将在models / brain_pos / greedy / $ PARAMS中创建文件。我相信在你的情况下,这个$ PARAMS变量被解释为0并且脚本在brain_pos / greedy / 0中寻找训练有素的标记器,它显然没有找到。如果你只是在脚本的开头添加一行来指定训练标记器的参数(教程中的128-0.08-3600-0.9-0)它应该可以工作。

因此:

$PARAMS=128-0.08-3600-0.9-0
bazel-bin/syntaxnet/parser_trainer \
  --arg_prefix=brain_parser \
  --batch_size=32 \
  --projectivize_training_set \
  --decay_steps=4400 \
  --graph_builder=greedy \
  --hidden_layer_sizes=200,200 \
  --learning_rate=0.08 \
  --momentum=0.85 \
  --output_path=models \
  --task_context=models/brain_pos/greedy/$PARAMS/context \
  --seed=4 \
  --training_corpus=tagged-training-corpus \
  --tuning_corpus=tagged-tuning-corpus \
  --params=200x200-0.08-4400-0.85-4