

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

# 为训练准备物品元数据
<a name="items-datasets"></a>

 物品元数据包括您的用户与之进行交互的物品的相关数字数据和分类数据。物品元数据的例子包括创建时间戳、价格、类型、描述和供应情况。您可以将有关物品的元数据导入到 Amazon Personalize *物品数据集*。

根据您的域应用场景或自定义配方，物品元数据有助于 Amazon Personalize 向用户推荐更多相关的物品、更准确地预测类似物品，或者推荐更有意义的用户细分。物品元数据还有助于 Amazon Personalize 在推荐中展示新物品。物品元数据对某些域应用场景来说是必需的，而对于所有自定义配方，物品元数据是可选的。有关更多信息，请参阅[将自己的应用场景与 Amazon Personalize 资源进行匹配](use-cases-and-recipes.md)中的域应用场景或配方的数据要求。

 在训练时，Amazon Personalize 不使用非分类字符串物品数据，例如物品标题或作者数据。但是，导入这些数据仍然可以增强推荐效果。有关更多信息，请参阅 [非分类字符串数据](#item-string-data)。

Amazon Personalize 在训练期间考虑的最大物品数量取决于您的应用场景或配方。只有在训练期间考虑的物品才会出现在推荐中。
+ 对于 User-Personalization-v2 或 Personalized-Ranking-v2，模型在训练期间考虑的最大物品数量为 500 万。这些物品来自物品数据集和物品交互数据集。
+ 对于除 User-Personalization-v2 和 Personalized-Ranking-v2 之外的所有域应用场景和自定义配方，模型在训练和生成推荐期间考虑的最大物品数量为 75 万。

对于所有域应用场景和自定义配方，批量物品数据必须在 CSV 文件中。文件中的每一行都应代表一个唯一物品。完成数据准备后，就可以创建架构 JSON 文件。此文件向 Amazon Personalize 提供关于数据结构的信息。有关更多信息，请参阅 [为 Amazon Personalize 架构创建架构 JSON 文件](how-it-works-dataset-schema.md)。

以下各部分提供了有关如何为 Amazon Personalize 准备物品元数据的更多信息。有关所有数据类型的批量数据格式准则，请参阅[批量数据格式准则](preparing-training-data.md#general-formatting-guidelines)

**Topics**
+ [物品数据要求](#item-data-requirements)
+ [创建时间戳数据](#creation-timestamp-data)
+ [分类元数据](#item-categorical-data)
+ [非结构化文本元数据](#text-data)
+ [数值数据](#item-numerical-data)
+ [非分类字符串数据](#item-string-data)
+ [物品元数据示例](#items-data-example)

## 物品数据要求
<a name="item-data-requirements"></a>

 以下是 Amazon Personalize 的物品元数据要求。

如果您不确定自己是否有足够的数据或对数据质量存有疑问，则可以将您的数据导入 Amazon Personalize 数据集，然后使用 Amazon Personalize 对其进行分析。有关更多信息，请参阅 [分析 Amazon Personalize 数据集中的数据质量和数量](analyzing-data.md)。
+ 对于所有域应用场景和自定义配方，必须有一个 ITEM\$1ID 列来存储每个物品的唯一标识符。每个物品都必须有一个物品 ID。它必须是 `string`，最大长度为 256 个字符。
+ 对于自定义配方，您的数据必须至少包含一个分类字符串或数字元数据列。物品元数据列可以包括空值。我们建议这些列的完成度至少为 70%。
+ 对于域应用场景，所需的列取决于您的域。有关更多信息，请参阅[VIDEO\$1ON\$1DEMAND 域要求](#vod-item-data-req)或[ECOMMERCE 域要求](#retail-item-data-req)。
+ 最大元数据列数为 100。

### VIDEO\$1ON\$1DEMAND 域要求
<a name="vod-item-data-req"></a>

某些应用场景需要物品元数据（请参阅 [VIDEO\$1ON\$1DEMAND 使用案例](VIDEO_ON_DEMAND-use-cases.md)）。如果元数据是可选的，我们仍建议导入物品元数据，以便获取最相关的推荐。如果导入了物品元数据，则您的数据必须包括以下列：
+ ITEM\$1ID
+ GENRES（分类 `string`）
+ CREATION\$1TIMESTAMP（采用 Unix 纪元时间格式）

 下面列出了其他推荐列及其所需类型。`null` 类型表示该列可能有缺失值。我们建议这些列的完成度至少为 70%。包括这些列可以改善推荐。
+ PRICE（浮点）
+ DURATION（浮点）
+ GENRE\$1L2（分类 `string`、`null`）
+ GENRE\$1L3（分类 `string`、`null`）
+ AVERAGE\$1RATING（`float`、`null`）
+ PRODUCT\$1DESCRIPTION（文本 `string`、`null`）
+ CONTENT\$1OWNER（分类 `string`、`null`）：拥有视频的公司。例如，值可能是 HBO、Paramount 和 NBC。
+ CONTENT\$1CLASSIFICATION（分类 `string`、`null`）：内容的评级。例如，值可能是 G、PG、PG-13、R、NC-17 和未分级。

### ECOMMERCE 域要求
<a name="retail-item-data-req"></a>

 对于所有 ECOMMERCE 应用场景，物品元数据都是可选的。如果您有物品数据，我们建议导入这些数据，以获得最相关的推荐。如果导入了物品元数据，则您的数据必须有以下列：
+ ITEM\$1ID
+ PRICE (`float`)
+ CATEGORY\$1L1（分类 `string`）：有关格式化分类数据的信息，请参阅[分类元数据](#item-categorical-data)。

 下面列出了其他推荐列及其所需类型。`null` 类型表示该列可能有缺失值。我们建议这些列的完成度至少为 70%。包括这些列可以改善推荐。
+ CATEGORY\$1L2（分类 `string`、`null`）
+ CATEGORY\$1L3（分类 `string`、`null`）
+ PRODUCT\$1DESCRIPTION（文本 `string`、`null`）
+ CREATION\$1TIMESTAMP (`float`)
+ AGE\$1GROUP（分类 `string`、`null`）：物品所针对的年龄组。值可能是新生儿、婴儿、儿童和成人。
+ ADULT（分类 `string`、`null`）：物品是否仅限成人，例如酒精饮料。值可能为是或否。
+ GENDER（分类 `string`、`null`）：物品所针对的性别。值可以是男性、女性和男女皆宜。

## 创建时间戳数据
<a name="creation-timestamp-data"></a>

创建时间戳数据必须采用 Unix 纪元时间格式，以秒为单位。例如，日期为 2020 年 7 月 31 日的纪元时间戳（以秒为单位）为 1596238243。要将日期转换为 Unix 纪元时间戳，请使用[纪元转换器 - Unix 时间戳转换器](https://www.epochconverter.com)。

Amazon Personalize 使用创建时间戳数据（采用 Unix 纪元时间格式，以秒为单位），计算物品的使用年限并相应地调整建议。

如果缺少一件或多件物品的创建时间戳数据，则 Amazon Personalize 会从交互数据（如果有）中推断出此信息，并使用物品最早交互数据的时间戳作为物品的创建时间戳。如果某个物品没有交互数据，则其创建时间戳将设置为训练集中最新交互的时间戳，且 Amazon Personalize 会将其视为新物品。

## 分类元数据
<a name="item-categorical-data"></a>

 对于某些配方和所有域应用场景，Amazon Personalize 在识别底层模式时使用分类元数据（例如物品的类型或颜色），向用户显示最相关的物品。您可以基于自己的使用案例来定义自己的值范围。分类元数据可以是任何语言。

 对于具有多个类别的物品，使用竖线“\$1”分隔每个值。例如，对于 GENRES 字段，您的物品数据可能是 `Action|Crime|Biopic`。如果您有多个级别的分类数据，并且某些物品在层次结构中的每个级别都有多个类别，请为每个级别使用单独列，并在每个字段名称后面附加一个级别指示符：GENRES、GENRE\$1L2、GENRE\$1L3。这样，您可以根据子类别筛选推荐，即使一个物品属于多个多级类别，也是如此（有关创建和使用筛选器的信息，请参阅[筛选建议和用户细分](filter.md)）。例如，某个视频可能包含每个类别级别的以下数据：
+ GENRES：动作\$1冒险
+ GENRE\$1L2：犯罪\$1西方
+ GENRE\$1L3：传记片

在此示例中，该视频位于动作 > 犯罪 > 传记片层次结构*和* 冒险 > 西方 > 传记片层次结构中。我们建议使用的级别最高仅到 L3，但如有必要，可以使用更多级别。

分类值最多可以有 1000 个字符。如果您的物品的分类值超过 1000 个字符，则您的数据集导入作业将失败。我们建议分类列最多包含 1000 个可能的值。导入具有更多值的分类数据会对推荐产生负面影响。以下方法有助于减少分类列的可能值数量：
+ 确保值遵循一致的命名惯例并检查是否有打字错误。例如，使用“男鞋”，而不是混用“男装鞋”、“男式鞋”和“男人的鞋”。
+ 合并使用略有不同的术语来指代相同基础类别的相似类别，例如“鞋子”和“运动鞋”。
+ 如果您的数据采用分层结构，其中更广泛的类别（例如“鞋类”）包含更具体的子类别（例如“男鞋”、“女鞋”、“童鞋”），请为每个级别使用单独的列，并在每个字段名称后面附加一个级别指示符。例如，CATEGORY\$11、CATEGORY\$12 和 CATEGORY\$13。这样可以减少模棱两可或重叠的类别。

对于所有食谱和域，您可以导入分类数据，并使用此类数据，根据物品的属性筛选建议。有关筛选建议的信息，请参阅[筛选建议和用户细分](filter.md)。

## 非结构化文本元数据
<a name="text-data"></a>

对于某些食谱和域，Amazon Personalize 可以从非结构化文本元数据（例如产品描述、产品评论或电影提要）中提取有意义的信息。Amazon Personalize 使用非结构化文本为您的用户识别相关物品，尤其是在物品是新物品或交互数据较少的情况下。您最多可添加 1 个文本字段。在物品数据集中包含非结构化文本数据，可以提高目录中新物品的点击率和对话率。

在准备非结构化文本元数据时，请将文本用双引号括起来，并删除所有换行字符。使用 `\` 字符，对数据中的任何双引号或 \$1 字符进行转义处理。Amazon Personalize 会按字符限制截断文本字段。确保文本中最相关的信息位于字段的开头。

除中文和日语外，所有语言的非结构化文本值最多可以包含 2 万个字符。对于中文和日语，最多可以包含 7 千个字符。Amazon Personalize 会将超过字符限制的值截断，使其符合字符限制。

您可以采用多种语言提交非结构化文本物品，但每个物品的文本只能使用一种语言。文本可使用以下语言：
+ 中文（简体）
+ 中文（繁体）
+ English
+ 法语
+ 德语
+ 日语
+ 葡萄牙语
+ 西班牙语

## 数值数据
<a name="item-numerical-data"></a>

 Amazon Personalize 可以使用数值物品元数据（例如价格或视频时长），为用户生成更相关的推荐。这个数值数据可以表示为整数或小数。

如果您使用 [User-Personalization](native-recipe-new-item-USER_PERSONALIZATION.md) 或 [Personalized-Ranking](native-recipe-search.md) 自定义配方，则除了最大相关性（例如更大限度地提高收入）之外，您还可以针对物品元数据相关目标优化 Amazon Personalize 解决方案。配置解决方案时，您可以在物品数据集中选择与您的目标相关的数值元数据列。例如，您可以选择 VIDEO\$1LENGTH 列来最大限度地提高流时长，或者选择 PRICE 列来最大限度地提高收入。

有关更多信息，请参阅 [针对其他目标优化解决方案](optimizing-solution-for-objective.md)。

## 非分类字符串数据
<a name="item-string-data"></a>

 除了物品 ID 外，Amazon Personalize 在训练时不使用非分类非文本字符串数据，例如物品标题或作者数据。但是，Amazon Personalize 可以将其与以下特征结合使用。非分类值最多可以有 1000 个字符。
+ Amazon Personalize 可以在建议中包含物品元数据，包括非分类字符串值。您可以使用元数据来丰富用户界面中的建议，例如将导演的姓名添加到电影建议轮播中。有关更多信息，请参阅 [推荐中的物品元数据](campaigns.md#create-campaign-return-metadata)。
+  如果您使用[Similar-Items](native-recipe-similar-items.md)，则可以生成带有主题的批量建议。生成带有主题的批量建议时，必须在批量推理作业中指定物品名称列。有关更多信息，请参阅 [内容生成器中带有主题的批量建议](themed-batch-recommendations.md)。
+  您可以创建筛选条件，以根据非分类字符串数据在建议中包含或删除物品。有关筛选条件的更多信息，请参阅[筛选建议和用户细分](filter.md)。

## 物品元数据示例
<a name="items-data-example"></a>

CSV 文件中的前几行影片元数据看起来可能像下面这样。

```
ITEM_ID,GENRES,CREATION_TIMESTAMP,DESCRIPTION
1,Adventure|Animation|Children|Comedy|Fantasy,1570003267,"This is an animated movie that features action, comedy, and fantasy. Audience is children. This movie was released in 2004."
2,Adventure|Children|Fantasy,1571730101,"This is an adventure movie with elements of fantasy. Audience is children. This movie was release in 2010."
3,Comedy|Romance,1560515629,"This is a romantic comedy. The movie was released in 1999. Audience is young women."
4,Comedy|Drama|Romance,1581670067,"This movie includes elements of both comedy and drama as well as romance. This movie was released in 2020."
...
...
```

`ITEM_ID` 列为必填列，用于存储每个物品的唯一标识符。`GENRE` 列存储每部电影的分类元数据，`DESCRIPTION` 列是非结构化文本元数据。`CREATION_TIMESTAMP` 列按 Unix 纪元时间格式存储每个物品的创建时间（以秒为单位）。

完成数据准备后，就可以创建架构 JSON 文件。此文件向 Amazon Personalize 提供关于数据结构的信息。有关更多信息，请参阅 [为 Amazon Personalize 架构创建架构 JSON 文件](how-it-works-dataset-schema.md)。上述示例数据的架构 JSON 文件看起来就是这个样子。

```
{
  "type": "record",
  "name": "Items",
  "namespace": "com.amazonaws.personalize.schema",
  "fields": [
    {
      "name": "ITEM_ID",
      "type": "string"
    },
    {
      "name": "GENRES",
      "type": [
        "null",
        "string"
      ],
      "categorical": true
    },
    {
      "name": "CREATION_TIMESTAMP",
      "type": "long"
    },
    {
      "name": "DESCRIPTION",
      "type": [
        "null",
        "string"
      ],
      "textual": true
    }
  ],
  "version": "1.0"
}
```