【问题标题】:Train SyntaxNet model训练 SyntaxNet 模型
【发布时间】:2016-05-20 15:36:52
【问题描述】:
我正在尝试使用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.map、tag-map、word-map 等等,或者训练步骤必须使用训练数据集创建它们?如果我必须提供它们,我该如何构建它们?
提前致谢
【问题讨论】:
标签:
nlp
tensorflow
bazel
syntaxnet
【解决方案1】:
我正在尝试和你做同样的事情,但遇到了完全相同的错误。原来我不小心把--compute_lexicon这个标志去掉了。我想这个标志负责创建tag-map、word-map 等。所以只需确保启用了--compute_lexicon。
【解决方案2】:
好吧,我遇到了类似的错误,老实说,我没有找出问题所在,但我使用此 link 来学习培训和测试过程,它为培训提供了有用的文档。
您可能不会将训练、调整和测试数据集的格式从 .conllu 更改为 .conl 或训练 shell 可能会被 --arg_prefix、--output_path、--task_context 甚至 @ 中提到的目录混淆987654326@
【解决方案3】:
我记得一开始也有类似的错误。您是否使用了“训练解析器步骤 1:本地预训练”下的确切代码?因为您会注意到那里有一个未初始化的 $PARAMS 变量,它应该代表您训练的 POS 标记器的参数。当您训练一个标注器时(参见同一教程的前面部分),它会在模型/brain_pos/greedy/$PARAMS 中创建文件。我相信在你的情况下,这个 $PARAMS 变量被解释为 0 并且脚本正在寻找一个训练有素的 tagger 在 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