3

我正在使用 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

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

这个怎么做 ?

4

1 回答 1

3

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

  1. 句子是从标准输入或文件中读取的,而不是从变量中读取的
  2. 该模型分为两部分,而不是一个可执行文件

我有一个张量流/模型的分支:

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

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

恐怕不是世界上最好的答案,因为它在不断变化。目前没有简单的方法可以让这个工作。

于 2016-06-28T13:02:15.480 回答