Как использовать vowpal wabbit для онлайн-прогнозирования (режим потоковой передачи)

Я пытаюсь использовать Vowpal Wabbit для одной задачи классификации нескольких классов со 154 различными метками классов следующим образом:

  1. Обученная модель VW с большим объемом данных.
  2. Протестировали модель с помощью одного специального тестового набора.

В этом сценарии я смог достичь результата >80%, что хорошо. Но проблема, над которой я сейчас работаю:

Я должен воспроизвести сценарий предсказания в реальном времени. В этом случае я должен передавать одну точку данных (то есть текстовую строку) за раз, чтобы модель могла предсказать значение и вывод.

Я испробовал все варианты, которые знал, но не смог. Может ли кто-нибудь из вас сообщить мне, как создать сценарий в реальном времени, передав одну точку данных вместе с командой VW, но не в виде файла.


person TOC_cmi    schedule 17.06.2015    source источник
comment
Название вводит в заблуждение. Вопрос не в передаче входных данных в качестве параметра командной строки (например, vw --example "| featureA featureB", что невозможно в VW). Речь идет об использовании VW для онлайн-прогнозирования (потокового режима).   -  person Martin Popel    schedule 18.06.2015
comment
Спасибо, Мартин, ты прав. Я предложил изменить заголовок. Надеюсь, его одобрят.   -  person arielf - Reinstate Monica    schedule 19.06.2015


Ответы (1)


Вы можете использовать vw в качестве демона:

vw --daemon --port 54321 --quiet -i model_file -t --num_children 1

Теперь vw загружает модель и прослушивает порт 54321 (на локальном хосте). Каждый раз, когда вы отправляете строку (заканчивающуюся символом новой строки, ASCII 10) в localhost:54321, вы получите предсказание обратно в тот же сокет, например:

echo " | your features here..." | netcat localhost 54321

Это просто пример, обычно вы пишете программу, которая будет записывать, а затем читать из сокета в цикле вместо вызова netcat.

Вы также можете вызвать vw в обычном режиме ввода/вывода и предсказания:

vw --quiet -i model_file -t -p /dev/stdout

И писать на него (через stdin) и читать с него (через stdout). Суть в том, что вы получите одну строку вывода для каждой строки ввода, которую вы отправляете, в том же порядке. Вы также можете отправить N строк за раз, а затем прочитать N ответов. Относительный порядок запросов и ответов гарантированно сохраняется.

person arielf - Reinstate Monica    schedule 17.06.2015