如何预加载syntaxnet,以便花费较少的时间来提供依赖解析输出

时间:2016-06-27 07:28:34

标签: syntaxnet

我正在使用syntaxnet存储库中提供的demo.sh。如果我使用'\ n'分隔输入,则运行3000行文本需要27.05秒,但是当我单独运行每行时,它需要超过一小时。

这意味着加载模型需要2.5秒。如果这个步骤是分开的并且已经兑现,它将使整个管道更快。

这是demo.sh的修改版本: -

PARSER_EVAL=bazel-bin/syntaxnet/parser_eval
MODEL_DIR=syntaxnet/models/parsey_mcparseface
[[ "$1" == "--conll" ]] && INPUT_FORMAT=stdin-conll || INPUT_FORMAT=stdin

$PARSER_EVAL \
  --input=$INPUT_FORMAT \
  --output=stdout-conll \
  --hidden_layer_sizes=64 \
  --arg_prefix=brain_tagger \
  --graph_builder=structured \
  --task_context=$MODEL_DIR/context.pbtxt \
  --model_path=$MODEL_DIR/tagger-params \
  --slim_model \
  --batch_size=1024 \
  --alsologtostderr \
   | \
  $PARSER_EVAL \
  --input=stdin-conll \
  --output=stdout-conll \
  --hidden_layer_sizes=512,512 \
  --arg_prefix=brain_parser \
  --graph_builder=structured \
  --task_context=$MODEL_DIR/context.pbtxt \
  --model_path=$MODEL_DIR/parser-params \
  --slim_model \
  --batch_size=1024 \
  --alsologtostderr \

我想构建一个函数调用,它将使用输入句子并将输出的依赖解析器存储在局部变量中,如下所示(下面的代码只是为了使问题清楚)

dependency_parsing_model = ...

def give_dependency_parser(sentence,model=dependency_parsing_model):    
    ...
    #logic here
    ...
    return dependency_parsing_output

在上面,模型存储在变量中,因此在函数调用上运行每一行所需的时间较短。

怎么做?

1 个答案:

答案 0 :(得分:3)

当前版本的syntaxnet的Parsey McParseface有两个限制你遇到过:

  1. 从stdin或文件中读取句子,而不是从变量
  2. 读取
  3. 该模型分为两部分,而不是一个可执行文件
  4. 我有张量流/模型的分支:

    https://github.com/dmansfield/models/tree/documents-from-tensor

    我正在与维护者合并以获得合并。使用代码的这个分支,您可以在一个图形中构建整个模型(使用名为parsey_mcparseface.py的新python脚本)并使用张量(即python变量)输入句子。

    不是世界上最好的答案我害怕因为它非常不稳定。目前没有简单的方法让这项工作正常工作。