#amazon-web-services #amazon-personalize
#amazon-web-services #amazon-персонализация
Вопрос:
Я создаю систему рекомендаций для сайта объявлений, объявления добавляются и удаляются ежедневно.
Я подумал о том, чтобы использовать PutItems для добавления новых объявлений и создания вызываемого поля status = 0
, если пользователь удалил объявление, я буду использовать тот же PutItem
API с тем же ITEM_ID
для обновления сохраненного элемента и использовать фильтр для выбора только объявлений с status = 0
рекомендацией при генерации.
Это правильно? будет ли API PutItems обновлять существующую ad? и есть ли способ удалить элемент?
Ответ №1:
В настоящее время нет способа удалить элементы, которые уже были добавлены в наборы данных.
Ваш обходной путь выглядит хорошо, однако, исходя из моего опыта работы с персонализацией, фильтр может снизить качество ваших рекомендаций.
Чтобы понять почему, это более или менее алгоритм, который Personalize использует для фильтрации рекомендаций:
- Получение рекомендуемых элементов для пользователя
- Рекомендации по фильтрации с использованием выражения фильтра
- Верните первые N рекомендуемых элементов, оставшихся после фильтрации
Поскольку фильтрация выполняется после получения рекомендаций, это означает, что Personalize просто заполнит список рекомендаций элементами, которые были где-то внизу в списке рекомендуемых.
И с этим подходом есть проблема — элементы, расположенные ниже по списку, имеют меньшее значение «Оценка», что указывает на точность рекомендаций. Вот почему в итоге вы получите, как правило, худшие рекомендации, но это будет зависеть от того, сколько объявлений status = 0
было рекомендовано, прежде чем их отфильтровывать.
Чтобы проверить свои оценки рекомендаций, просто получите рекомендации в персонализированном веб-интерфейсе. Он вернет список ссылок с оценками.
Лучший подход
Если ваши объявления обновляются ежедневно, вы определенно можете обойти эту проблему, выполнив следующие действия:
- Создайте лямбда-функцию, которая запускается каждые 24 часа
- Lambda извлечет все объявления и поместит их в корзину S3 в виде CSV-файла. Он должен исключать рекламу, которая больше не доступна (
status = 0
) - Вызовите API CreateDatasetImportJob с помощью любого выбранного вами AWS SDK и предоставьте данные, которые хранятся в корзине S3
- Персонализация запустит задание импорта. По завершении работы все элементы заменяются новейшим дампом
Однако у него есть некоторые недостатки.
Если вы не используете рецепт персонализации пользователей (aws-user-personalization), то после каждого импорта элементов вам необходимо обновлять свое решение, создавая новую версию решения. В противном случае он не будет включать изменения, внесенные заданием импорта набора данных элементов.
Создание новой версии решения является довольно медленным и дорогостоящим, поэтому я бы рекомендовал использовать рецепт персонализации пользователя, если вы хотите использовать этот подход, и поскольку рецепты HRNN помечены как устаревшие, в любом случае рекомендуется выполнить миграцию.
Если вы используете рецепт персонализации пользователя, то в соответствии с документацией AWS:
Amazon Personalize автоматически обновляет последнюю версию вашего решения каждые два часа, добавляя новые данные. Ваша кампания автоматически использует обновленную версию решения. Дополнительные сведения см. в разделе Автоматические обновления.
Таким образом, практически вся работа выполняется на стороне персонализации, и вам не нужно беспокоиться о переподготовке решения после каждого задания импорта элементов.
И последняя проблема…
Поскольку в документации по рецепту для персонализации пользователя утверждается, что ваше решение будет обновлено в течение двух часов, то в конечном итоге вы можете рекомендовать элементы, которые недоступны, в течение некоторого короткого периода времени. Если вы обновляете элементы ежедневно, это может стать серьезной проблемой.
Чтобы исправить этот случай, я бы рекомендовал просто использовать метод фильтрации, о котором вы упомянули. Благодаря этому вы получаете преимущества обоих подходов, а ваши рекомендации всегда актуальны.
Комментарии:
1. У меня есть приложение типа Uber Eats, в котором владельцы ресторанов могут просто удалять товары в любое время, и алгоритм рекомендаций должен реагировать на это мгновенно. Что тогда лучше всего делать? Будет ли метод фильтрации, описанный в вопросе, работать наилучшим образом?
2. Я считаю, что в этом случае использование
PutItem
API сstatus = 0
подходом и фильтрацией будет единственным работающим решением. Вы получите несколько худшие рекомендации, но они не будут включать удаленные элементы.3. docs.aws.amazon.com/personalize/latest/dg/… «Amazon Personalize автоматически обновляет последнюю версию вашего решения … каждые два часа для включения новых элементов в рекомендации с исследованием. Ваша кампания автоматически использует обновленную версию решения. Вам все равно следует регулярно еженедельно обновлять новую версию решения, чтобы модель могла учиться на поведении вашего пользователя «. Это означает, что добавочный
PutItem
используется для добавления элемента для исследования. Для использования шаблонов во взаимодействии пользователя и элемента по-прежнему требуется периодическая переподготовка модели.