AWS Personalize:转储由 PutEvent 创建的用户-项目交互数据集

AWS Personalize: Dumping User-item interaction Dataset Created By PutEvent

根据 AWS Personalize 文档,我成功地从 S3 导入了我的数据集(用户、项目、交互),创建了一个 EventTrcker,训练了模型,并部署了活动。该解决方案没有任何问题,我得到了建议。

我依靠 Putevent 添加新的用户-项目交互事件。我还在我的 s3 中使用 Lambda+firehose 转储了这些交互事件。但我想知道 AWS Personalize 是否在内部 creates/augments 原始用户-项目交互数据集?我如何访问和下载数据集的修订版本?我在“数据集组 > 数据集”中看不到任何新数据集,而不是我原来的 3 个数据集...

我更喜欢定期将其从 AWS Personalize 转储到我的 S3 存储,而不是使用我自己的 Lambda+Firehose 解决方案。

这是我的 Putevent 调用的输出。我看到 200...但不确定它是否正常工作...我应该在 putevents 创建的“数据集组 > 数据集”中看到任何新数据集吗?

{
        "ResponseMetadata": {
            "RequestId": "a6c96496-cbd6-4ad8-9183-371d1794cbd8",
            "HTTPStatusCode": 200,
            "HTTPHeaders": {
                "content-type": "application/json",
                "date": "Mon, 04 Jan 2021 18:04:28 GMT",
                "x-amzn-requestid": "a6c96496-cbd6-4ad8-9183-371d1794cbd8",
                "content-length": "0",
                "connection": "keep-alive"
            },
            "RetryAttempts": 0
        }
    }

更新:现在可以了

AWS 文档: https://docs.aws.amazon.com/personalize/latest/dg/export-data.html

您可以使用此 AWS CLI 命令仅导出已添加但 PutEvents/PutUsers/PutItems API 调用的交互:

aws personalize create-dataset-export-job \
  --job-name job name \
  --dataset-arn dataset ARN \
  --job-output "{\"s3DataDestination\":{\"kmsKeyArn\":\"kms key ARN\",\"path\":\"s3://bucket-name/folder-name/\"}}" \
  --role-arn role ARN \
  --ingestion-mode PUT

在那种情况下 --ingestion-mode PUT 将确保:

Specify PUT to export only data that you imported incrementally using the console or the PutEvents, PutUsers, or PutItems operations.

所以我相信它涵盖了您的用例。

不,不可能

现在根本不可能导出这些数据。

没有 API 可以在 Personalize 中检索您的交互数据集的转储。

我相信 Lambda + Firehose 解决方法是正确的方法。

但是如何测试 PutEvents 是否有效?

为确保通过 PutEvents 添加的交互,您可以使用过滤器功能: https://docs.aws.amazon.com/personalize/latest/dg/filter-expressions.html

几乎创建了一个新的过滤器,具有类似的表达式:

EXCLUDE ItemID WHERE Interactions.EVENT_TYPE IN ("your_event_type_name")

这将从推荐中排除用户之前与之交互过的任何项目。

然后你可以测试一下,通过PutEvents API 添加的事件是否被正确识别:

  1. 如上所述创建过滤器表达式。
  2. 为简单的推荐创建任何活动(用户个性化配方)。
  3. 将过滤器连接到广告系列。
  4. 获取任何用户的推荐并将它们保存在某个地方。
  5. 使用任何推荐的项目调用 PutEvents API,returned in 4 and user id from 4.
  6. 再次获取与 4 中相同用户的推荐。

如果您使用 PutEvents 调用添加的项目不再被推荐,那么您有证据表明通过 PutEvents 调用添加的事件已正确添加到交互数据集。


如果在这种情况下 PutEvents 调用不影响推荐怎么办?

那么您只是在 API 调用中提供了不正确的值。个性化可能 return 200 响应,即使提供的事件无效。

要解决这个问题,请尝试:

  1. 确保日期格式正确。如果有更多更新的事件(可以在解决方案配置中配置它),Personalize 可能会忽略具有非常旧时间戳的事件。
  2. 检查您是否没有在 PutEvents 参数中为 sessionId、userId、trackingId 传递任何奇怪的值,例如“null”或“undefined”。这可能会导致 Personalize (https://github.com/aws/aws-sdk-js/issues/3371)
  3. 忽略该事件
  4. 确保您传递的 eventType 值正确(应与解决方案和过滤器中的 eventType 匹配)。
  5. 如果它仍然不起作用,请使用示例 PutEvents API 调用参数向 AWS 提出支持请求。

有没有更简单的解决方案?

嗯,也许有,但在我们的项目中,我们使用这种方法,它还会测试过滤功能是否正常工作。以后你可能会用到 Filtering,所以我相信这是一个很好的方法。