amazon-web-services - 删除或更新 Item 的正确方法
问题描述
我正在为分类广告网站建立推荐系统,每天添加和删除广告。
我想到的是使用PutItems添加新广告并制作字段调用status = 0
,如果用户删除了广告,我将使用相同的PutItem
APIITEM_ID
更新存储的项目,并使用过滤器仅选择status = 0
生成推荐时的广告。
那是对的吗 ?PutItems API 会更新现有广告吗?无论如何要删除该项目吗?
解决方案
目前无法删除已添加到数据集中的项目。
您的解决方法看起来不错,但是根据我使用 Personalize 的经验,过滤器可能会降低您的推荐质量。
为了理解原因,这是 Personalize 用于过滤推荐的或多或少的算法:
- 获取用户推荐的物品
- 使用过滤器表达式过滤推荐
- 返回过滤后剩下的前 N 个推荐项目
因为过滤是在获得推荐之后完成的,这意味着 Personalize 将简单地将推荐列表中的项目填充到推荐列表中的某个位置。
这种方法存在一个问题 - 列表中较低的项目具有较低的“分数”值,这表明推荐的准确性。这就是为什么你最终会得到更糟糕的推荐,但这取决于status = 0
在过滤掉它们之前推荐了多少广告。
要检查您的推荐分数,只需在 Personalize Web UI 中获取推荐。它将返回带有分数的记录列表。
更好的方法
如果您的广告每天更新,那么您绝对可以按照以下步骤解决它:
- 创建一个 Lambda 函数,每 24 小时触发一次
- Lambda 将获取所有广告并将它们作为 CSV 文件放入 S3 存储桶中。它应该排除不再可用的广告 (
status = 0
) - 使用您选择的任何 AWS 开发工具包调用CreateDatasetImportJob API 并提供存储在 S3 存储桶上的数据
- Personalize 将开始导入工作。完成后,所有项目都将替换为最新的转储
但是,它有一些缺点。
如果您未使用用户个性化 (aws-user-personalization) 配方,则在每次导入项目后,您需要通过创建新的解决方案版本来更新您的解决方案。否则,它将不包括项目数据集导入作业所做的更改。
创建一个新的解决方案版本非常缓慢和昂贵,这就是为什么我建议使用用户个性化配方,如果你想使用这种方法,并且由于 HRNN 配方被标记为旧版,无论如何迁移都是一个好主意。
如果您使用的是用户个性化配方,那么根据AWS 文档:
Amazon Personalize 每两小时自动更新您的最新解决方案版本以包含新数据。您的活动会自动使用更新的解决方案版本。有关详细信息,请参阅自动更新。
因此,几乎所有工作都在 Personalize 方面完成,您不必担心在每个 Items 导入作业后重新培训解决方案。
最后一个问题...
由于用户个性化配方文档声称您的解决方案将在两小时内更新,因此您可能会在短时间内推荐不可用的项目。如果您每天都在更新项目,这可能是一个严重的问题。
要解决这种情况,我建议您简单地使用您提到的过滤器方法。多亏了这一点,您可以从这两种方法中受益,并且您的建议始终有效。
推荐阅读
- javascript - JavaScript - window.open 不能在 Firefox 移动 iOS 上运行?
- javascript - 如何在 Javascript 中通过 FormData 发布带有图像的多个对象?
- amazon-web-services - AWS 许可证管理器 - 如何禁用已授予的许可证
- ruby-on-rails - 安装 Rails 时遇到问题
- reactjs - 如何在使用 reactQuill 组件时自定义 'image' 标签的宽高和样式?
- html - Angular - 自动完成效果不佳
- swift - 如何将文本字段值从一个 ViewController 传递到第二个 ViewController (MacOS Swift)?
- sql - 基本 SQL 问题:显示多行的单个结果
- django - Django UNIQUE 约束失败:accounts_users.email
- rounding - GMP 将最后一位设置为零