Как сделать вывод с пользовательской предварительной обработкой и файлами данных в Google Cloud ML

Я хочу использовать модель, которую я обучил для логического вывода в Google Cloud ML. Это модель NLP, и я хочу, чтобы мой сервер node.js взаимодействовал с моделью, чтобы получать прогнозы во время обучения.

У меня есть процесс вывода модели вручную, который я хотел бы продублировать в облаке:

  1. Используйте Stanford Core NLP для токенизации моего текста и создания файлов данных, в которых хранится мой токенизированный текст.
  2. Заставьте модель использовать эти файлы данных, создайте из нее примеры Tensorflow и запустите модель.
  3. Попросите модель распечатать прогнозы.

Вот как я думаю, что могу воспроизвести это в облаке:

  1. Отправьте текст в облако, используя мой сервер node.js.
  2. Запустите мой скрипт Python, чтобы сгенерировать файл данных. Похоже, мне придется сделать это внутри пользовательской процедуры прогнозирования. Я не уверен, как я могу использовать Stanford Core NLP здесь.
  3. Сохраните файл данных в корзину в Google Cloud.
  4. В пользовательской процедуре прогнозирования загрузите сохраненный файл данных и выполните модель.

Может ли кто-нибудь сказать мне, если этот процесс правильный? Кроме того, как я могу запустить Stanford CoreNLP в пользовательской процедуре прогнозирования Google Cloud? Кроме того, есть ли способ просто запускать сценарии командной строки (например, для создания файлов данных у меня есть простая команда, которую я обычно просто запускаю для их создания)?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
173
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете реализовать пользовательский метод предварительной обработки на 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- обслуживание.

Как бы вы сохранили словарь с отображением токенизированных слов в числа, чтобы сделать вывод? Должен ли он храниться где-то в Google Cloud и получать его каждый раз? Если да, то как это сделать?

hockeybro 10.06.2019 17:58

Вы можете сделать это и читать его каждый раз, используя tf.gfile.GFile, или вы можете просто сохранить словарный словарь как поле класса.

Lak 10.06.2019 19:19

Можно поподробнее про второй вариант? Я не уверен, что вы подразумеваете под хранением словаря как поля класса?

hockeybro 10.06.2019 20:07

См. ссылку выше. Он ссылается на пример записной книжки github.com/GoogleCloudPlatform/cloudml-samples/blob/master/… с self.__tokenizer__, который является полем класса.

Lak 10.06.2019 20:57

Хорошо, я попытался сделать это и смог загрузить код и настроить модель с пользовательским онлайн-прогнозированием. Однако при попытке сделать запрос к модели от клиента я получаю 'data: { error: 'Prediction failed: unknown error.' }} в ответ. Тело моего запроса body: '{"instances":"asdfsafd"}',, и я просто использую параметр instances переменной прогнозирования в качестве ввода текста в моей пользовательской процедуре прогнозирования. У вас есть идеи, что может быть не так?

hockeybro 11.06.2019 00:44

ваш ввод неверен json. см.: cloud.google.com/ml-engine/docs/v1/predict-request ... для того, что требуется вашей модели, используйте save_model_cli.

Lak 11.06.2019 07:13

Я изменил свой ввод на это: body: '{"instances":["yup that’s great"]}',, что, кажется, соответствует этому из документа, на который вы ссылаетесь: {"instances": ["the quick brown fox", "la bruja le dio"]}. Однако он все еще не работает и имеет ту же ошибку. Я должен упустить что-то очевидное...

hockeybro 11.06.2019 08:40

опубликовать новый вопрос с ответом от save_model_cli

Lak 12.06.2019 04:40

Я использую пользовательскую процедуру прогнозирования. Итак, instances должен быть вход, который моя функция прогнозирования получает правильно? В моей пользовательской процедуре прогнозирования моя функция прогнозирования имеет следующую подпись: def predict(self, instances, **kwargs):, а затем я получаю предложение (которое в данном случае должно быть «да, это здорово») из таких экземпляров, как так: utterance = nltk.word_tokenize(instances), все еще в функции прогнозирования. Затем я обрабатываю это предложение и загружаю его в свою модель. Я уверен, что как только я получу предложение, остальная часть кода будет работать, поскольку я тестировал его локально. Вы видите проблему?

hockeybro 13.06.2019 20:43

Вот как они, кажется, делают это в следующей ссылке ближе к концу страницы. Они просто объединяют все свои текстовые данные в массив, передают этот массив как тело, как я сделал выше с экземплярами, а затем напрямую используют его в качестве ввода текста и предварительно обрабатывают его. cloud.google.com/blog/products/ai-machine-learning/…

hockeybro 13.06.2019 20:48

Я разместил вопрос здесь: stackoverflow.com/questions/56604407/…

hockeybro 14.06.2019 21:56

Другие вопросы по теме