Я хочу использовать модель, которую я обучил для логического вывода в Google Cloud ML. Это модель NLP, и я хочу, чтобы мой сервер node.js взаимодействовал с моделью, чтобы получать прогнозы во время обучения.
У меня есть процесс вывода модели вручную, который я хотел бы продублировать в облаке:
Вот как я думаю, что могу воспроизвести это в облаке:
Может ли кто-нибудь сказать мне, если этот процесс правильный? Кроме того, как я могу запустить Stanford CoreNLP в пользовательской процедуре прогнозирования Google Cloud? Кроме того, есть ли способ просто запускать сценарии командной строки (например, для создания файлов данных у меня есть простая команда, которую я обычно просто запускаю для их создания)?
Вы можете реализовать пользовательский метод предварительной обработки на Python и оттуда вызвать набор инструментов Stanford. Подробнее см. в этом блоге и связанном с ним образце кода: https://cloud.google.com/blog/products/ai-machine-learning/ai-in-depth-creating-preprocessing-model-serving-affinity-with-custom-online-prediction-on-ai-platform- обслуживание.
Вы можете сделать это и читать его каждый раз, используя tf.gfile.GFile, или вы можете просто сохранить словарный словарь как поле класса.
Можно поподробнее про второй вариант? Я не уверен, что вы подразумеваете под хранением словаря как поля класса?
См. ссылку выше. Он ссылается на пример записной книжки github.com/GoogleCloudPlatform/cloudml-samples/blob/master/… с self.__tokenizer__, который является полем класса.
Хорошо, я попытался сделать это и смог загрузить код и настроить модель с пользовательским онлайн-прогнозированием. Однако при попытке сделать запрос к модели от клиента я получаю 'data: { error: 'Prediction failed: unknown error.' }}
в ответ. Тело моего запроса body: '{"instances":"asdfsafd"}',
, и я просто использую параметр instances переменной прогнозирования в качестве ввода текста в моей пользовательской процедуре прогнозирования. У вас есть идеи, что может быть не так?
ваш ввод неверен json. см.: cloud.google.com/ml-engine/docs/v1/predict-request ... для того, что требуется вашей модели, используйте save_model_cli.
Я изменил свой ввод на это: body: '{"instances":["yup that’s great"]}',
, что, кажется, соответствует этому из документа, на который вы ссылаетесь: {"instances": ["the quick brown fox", "la bruja le dio"]}
. Однако он все еще не работает и имеет ту же ошибку. Я должен упустить что-то очевидное...
опубликовать новый вопрос с ответом от save_model_cli
Я использую пользовательскую процедуру прогнозирования. Итак, instances
должен быть вход, который моя функция прогнозирования получает правильно? В моей пользовательской процедуре прогнозирования моя функция прогнозирования имеет следующую подпись: def predict(self, instances, **kwargs):
, а затем я получаю предложение (которое в данном случае должно быть «да, это здорово») из таких экземпляров, как так: utterance = nltk.word_tokenize(instances)
, все еще в функции прогнозирования. Затем я обрабатываю это предложение и загружаю его в свою модель. Я уверен, что как только я получу предложение, остальная часть кода будет работать, поскольку я тестировал его локально. Вы видите проблему?
Вот как они, кажется, делают это в следующей ссылке ближе к концу страницы. Они просто объединяют все свои текстовые данные в массив, передают этот массив как тело, как я сделал выше с экземплярами, а затем напрямую используют его в качестве ввода текста и предварительно обрабатывают его. cloud.google.com/blog/products/ai-machine-learning/…
Я разместил вопрос здесь: stackoverflow.com/questions/56604407/…
Как бы вы сохранили словарь с отображением токенизированных слов в числа, чтобы сделать вывод? Должен ли он храниться где-то в Google Cloud и получать его каждый раз? Если да, то как это сделать?