Как использовать Cloud ML Engine для контекстно-зависимой системы рекомендаций - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь построить Context Aware Recommender System с Cloud ML Engine, который использует метод context prefiltering (, как описано на слайде 55, решение a ), и я использую это Google Cloud обучающее руководство (часть 2) , чтобы построить демо. Для целей этой демонстрации я разделил набор данных на контексты «Будни» и «Выходные» и «Полдень» и «Полдень» по меткам времени.

На практике я изучу четыре модели, чтобы я мог фильтровать контекст по дням недели: неизвестно, по выходным - неизвестно, по неизвестному - полдень, неизвестно - после полудня, по будням - после полудня, по будням - в полдень ... и так далее. Идея состоит в том, чтобы использовать прогнозирование по всем соответствующим моделям пользователя, а затем взвесить итоговую рекомендацию на основе того, что известно о контексте (неизвестно, что используются все модели контекста и дан взвешенный результат).

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

Я знаю, что в AppEngine есть режим прогнозирования, в котором модели хранятся в оперативной памяти, что гарантирует быстрый отклик, поскольку вам не нужно загружать модели прогнозирования; тогда разрешение контекста будет быстрым.

Однако будет ли более простое решение, которое также гарантировало бы аналогичную производительность в Google Cloud?

Причина, по которой я использую Cloud ML Engine, заключается в том, что, когда я работаю с контекстно-зависимой системой рекомендаций, таким образом, количество настроек гиперпараметра сильно возрастает; Я не хочу делать это вручную, но вместо этого использую байесовский гипертюнер Cloud ML Engine для выполнения этой работы, так что мне нужно только настроить диапазон параметров от одного до трех раз для каждой контекстной модели (с помощью автоматического сценария); это экономит большую часть времени разработки Data Scientist при повторном наборе данных.

1 Ответ

0 голосов
/ 07 сентября 2018

Существует четыре возможных решения:

  • Изучите 4 модели и используйте SavedModel для их сохранения. Затем создайте 5-ю модель, которая восстанавливает 4 сохраненные модели. Эта модель не имеет тренировочных весов. Вместо этого он просто вычисляет контекст и применяет соответствующий вес для каждой из 4 сохраненных моделей и возвращает значение. Именно эту 5-ю модель вы развернете.

  • Изучите одну модель. Сделайте контекст категориальным входом для вашей модели, то есть следуйте подходу в https://arxiv.org/abs/1606.07792

  • Используйте отдельный сервис AppEngine, который вычисляет контекст и вызывает 4 базовых сервиса, взвешивает их и возвращает результат.

  • Используйте сервис AppEngine, написанный на Python, который загружает все четыре сохраненные модели, вызывает 4 модели, взвешивает их и возвращает результат.

вариант 1 включает в себя больше кодирования, и довольно сложно понять, как правильно.

вариант 2 будет моим выбором, хотя он меняет формулировку модели от того, что вы хотите. Если вы идете по этому пути, вот пример кода на MovieLens, который вы можете адаптировать: https://github.com/GoogleCloudPlatform/cloudml-samples/tree/master/movielens

опция 3 увеличивает задержку из-за дополнительных сетевых издержек

опция 4 уменьшает задержку сети с # 3, но вы теряете параллелизм. Вам придется поэкспериментировать между вариантами 3 и 4, которые обеспечивают лучшую производительность в целом

...