Как предварительно загрузить синтаксическую сеть, чтобы на вывод синтаксического анализа зависимостей уходило меньше времени

Я использую demo.sh из репозитория syntaxnet. Если я ввожу ввод с разделением '\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

В приведенном выше примере модель сохраняется в переменной, поэтому для запуска каждой строки при вызове функции требуется меньше времени.

Как это сделать?


person Manjush    schedule 27.06.2016    source источник


Ответы (1)


Текущая версия синтаксической сети Parsey McParseface имеет два ограничения, с которыми вы столкнулись:

  1. Предложения читаются из стандартного ввода или файла, а не из переменной
  2. Модель состоит из двух частей и не является единым исполняемым файлом.

У меня есть ветка тензорного потока/моделей:

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

над слиянием которого я работаю с сопровождающими. С помощью этой ветки кода вы можете построить всю модель на одном графике (используя новый скрипт python с именем parsey_mcparseface.py) и передать предложения с помощью тензора (то есть переменной python).

Боюсь, это не лучший ответ в мире, потому что он очень сильно меняется. На данный момент нет простого рецепта, как заставить это работать.

person dmansfield    schedule 28.06.2016
comment
Не могли бы вы привести пример использования вашей программы parsey_mcparseface.py? - person Arash Saidi; 28.07.2016