数据集和架构 - Amazon Personalize
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

数据集和架构

Amazon Personalize数据集是数据容器。数据集有三种类型:

  • 用户— 此数据集存储有关用户的元数据。这可能包括年龄、性别或会员资格等信息,这些信息可能是个性化系统中的重要信号。

  • 项目— 此数据集存储有关项目的元数据。这可能包括如价格、SKU 类型或可用性等信息。

  • 交互— 此数据集存储来自用户和项目之间交互的历史数据和实时数据。此数据可能包含用户浏览背景中的展示数据和上下文元数据,例如用户所在的位置或所用的设备(移动设备、平板电脑、台式机等)。您必须至少创建 “交互” 数据集。

用户和项目数据集类型称为元数据类型,仅供某些配方使用。有关更多信息,请参阅 步骤 1: 选择配方

数据集在 Amazon Personalize 数据集组中进行组织。数据集组只能有每种数据集类型中的一种。每个数据集都必须有一个关联架构。Aschema告诉 Amazon Personalize 您的数据结构,并允许 Amazon Personalize 解析数据。架构具有名称键,其值必须与数据集类型匹配。

将您的培训数据导入 Amazon Personalize 时,您可以创建数据集和架构。有关更多信息,请参阅 准备和导入数据

数据集和方案要求

每个数据集都具有一组必填字段、保留关键字及其所需的数据类型,如下表所示。

数据集类型 必填字段 保留关键字
用户

USER_ID (string)

1 个元数据字段(分类string或数字)

项目

ITEM_ID (string)

1 个元数据字段(分类string或数字)

创建时间戳 (long)

交互

USER_ID (string)

ITEM_ID (string)

TIMESTAMP (long)

EVENT_TYPE (string)

事件值 (floatnull)

印象 (string)

建议编号 (stringnull)

在将数据集添加到 Amazon Personalize 之前,您必须定义该数据集的架构。定义方案并创建数据集后,无法对方案进行更改。

当您创建架构时,您必须遵循以下这些准则:

  • 您必须在Avro Schema。有关我们支持的 Avro 数据类型的信息,请参阅架构数据类型

  • 架构字段可以以任何顺序出现,但它们必须与数据文件中的对应列标题的顺序匹配。

  • 每种数据集类型都需要其方案中的特定非元数据字段(请参阅上表)。您必须将必填字段定义为其所需的数据类型。

  • 架构必须是没有嵌套结构的平面 JSON 文件。例如,一个字段不能是多个子字段的父字段。

架构数据类型

您必须在Avro Schema。Amazon Personalize 不支持复杂类型,例如阵列和地图。对于具有多个值的字段(包括分类元数据和展示量数据),请使用数据类型字符串。在设置数据格式时,请使用竖线 “|” 字符分隔每个值。

我们仅支持以下字段的 Avro 类型(保留关键字有额外的类型要求。 ):

  • float

  • double

  • int

  • long

  • 字符串

  • 布尔值

  • null

您可以使用null对于 来说为EVENT_VALUERECOMMENDATION_ID保留关键字以及交互、用户和项目元数据字段。添加null类型添加到字段中,您可以使用不完美的数据(例如,带有空值的元数据)来生成个性化建议。以下示例介绍如何为 GENRES 字段添加空类型。

{ "name": "GENRES", "type": [ "null", "string" ], "categorical": true }

元数据字段

元数据包含不需要的字符串字段或非字符串字段,或不使用保留关键字。元数据架构具有以下限制:

  • 用户和项目架构至少需要一个元数据字段。

  • 您最多可以为 “用户” 架构添加 5 个元数据字段,为 “项目” 架构添加 50 个元数据字段。

  • 如果您添加您自己的类型为 string 的元数据字段,它必须包含 categorical 属性。否则,在训练模型时,Amazon Personalize 将不会使用该字段。

保留关键字

保留的关键字是可选的非元数据字段。这些字段被视为保留字段,因为在使用这些字段时,您必须将字段定义为其必需的数据类型。以下是保留关键字:

  • 事件类型:对于具有一个或多个事件类型的 “交互” 数据集,例如单击下载,请使用EVENT_TYPE字段。您必须将 EVENT_TYPE 字段定义为string

  • 事件值:对于包含事件值数据(例如用户观看的视频百分比)的交互数据集,请使用EVENT_VALUE字段具有类型float并可选null

  • 创建时间戳:对于每个项目的创建日期具有时间戳的 Item 数据集,请使用CREATION_TIMESTAMP字段。Amazon Personalize 使用CREATION_TIMESTAMP数据来计算商品的使用期限并相应地调整建议。请参阅创建时间戳

  • 印象:对于具有显式展示数据的交互数据集,请使用IMPRESSION字段具有类型String。展示次数是用户在与特定项目进行交互(例如,单击或观看)时可见的项目列表。有关更多信息,请参阅 展示数据

  • 建议编号:对于使用先前建议作为隐式展示数据的交互式数据集,可选择使用RECOMMENDATION_ID字段具有类型String并可选键入null

    您不需要添加RECOMMENDATION_ID字段,Amazon Personalize 在生成建议时使用隐式展示。你可以传递一个recommendationIdPutEvents没有它的操作。有关更多信息,请参阅 展示数据

架构示例

有关每种数据集类型的架构示例,请参阅以下各节:

使用 AWS Python 开发工具包创建架构

  1. 定义要使用的 Avro 格式架构。

  2. 将架构保存在默认 Python 文件夹的 JSON 文件中。

  3. 使用以下代码创建架构。

    import boto3 personalize = boto3.client('personalize') with open('schema.json') as f: createSchemaResponse = personalize.create_schema( name = 'YourSchema', schema = f.read() ) schema_arn = createSchemaResponse['schemaArn'] print('Schema ARN:' + schema_arn )
  4. Amazon Personalize 将返回新架构的 ARN。请将其存储以便将来使用。

Amazon Personalize 提供用于管理架构的操作。例如,您可以使用 ListSchemas API 来获取可用架构的列表。

在创建架构后,将它用于与架构匹配的数据集。有关更多信息,请参阅 格式化输入数据