【问题标题】:AWS Personalize: Dumping User-item interaction Dataset Created By PutEventAWS Personalize:转储由 PutEvent 创建的用户-项目交互数据集
【发布时间】:2021-06-14 20:56:13
【问题描述】:

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

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

【问题讨论】:

    标签: amazon-web-services amazon-personalize


    【解决方案1】:

    更新:现在有可能

    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 将确保:

    指定 PUT 以仅导出您使用控制台或 PutEvents、PutUsers 或 PutItems 操作增量导入的数据。

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

    不,不可能

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

    在 Personalize 中没有用于检索交互数据集转储的 API。

    我相信 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. 使用在 4 中返回的任何推荐项目和来自 4 的用户 ID 调用 PutEvents API。
    6. 再次获得与 4 中相同的用户的推荐。

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


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

    那么您只是在 API 调用中提供了不正确的值。 Personalize 可能会返回 200 响应,即使提供的事件无效。

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

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

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

    嗯,也许有,但在我们的项目中,我们使用这种方法,它还会测试过滤功能是否正常工作。将来您可能会使用 Filtering,所以我相信它已经足够好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 2018-02-06
      • 2021-02-05
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多