筛选条件表达式 - Amazon Personalize
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

筛选条件表达式

要配置筛选器,您必须使用格式正确的筛选条件表达式。筛选器表达式由数据集和属性标识符组成datasetproperty格式以及逻辑运算符、关键字和值。对于值,您可以指定固定值或添加占位符参数,这些参数允许您在获得建议时设置筛选条件。

有关筛选条件表达式元素的完整列表,请参阅筛选表达式元素。有关筛选条件表达式示例,请参阅筛选表达式示例

注意

Amazon Personalize 仅在匹配事件类型时忽略大小写。

创建筛选表达式

过滤器表达式的一般结构如下所示:

EXCLUDE/INCLUDE ItemID WHERE dataset type.property IN/NOT IN (value/parameter)

您可以手动创建过滤器表达式,也可以通过使用表达式生成器在控制台中。您可以使用筛选器表达式根据来自以下数据集的数据过滤项目:

  • 交互:使用筛选器表达式可以包括或排除用户与之交互的项目(例如,单击或流式传输等用户事件)。筛选时,Amazon Personalize 为用户考虑的交互次数取决于max_user_history_length_percentilemin_user_history_length_percentile训练之前定义的超参数。

    例如,如果您使用的是.99对于max_user_history_length_percentile,99% 的用户最多拥有4交互时,Amazon Personalize 将仅根据用户最近的4交互。如果用户在min_user_history_length_percentile,Amazon Personalize 在筛选时不会考虑用户的交互。

    要根据用户最多 200 个历史和流式交互进行筛选,请将max_user_history_length_percentile1.0并重新训练模型。有关超参数的更多信息,请参阅步骤 1: 选择配方,然后导航到属性和超参数部分,了解您的食谱。

  • 项目:使用筛选器表达式根据特定项目条件包括或排除项目。

  • 用户:使用筛选器表达式包含或排除基于您正在获取建议的用户的特定属性的项目(CurrentUser)。如果您创建了 Users (用户) 数据集,您可以将IF条件添加到您的表达式中,以检查CurrentUser而不考虑表达式中使用的数据集。

创建筛选器表达式时,请注意以下限制:

  • 不能将交互数据集和项目数据集链接到一个表达式中。要创建筛选器,然后按 “交互” 和 “项目” 数据集(或相反)进行筛选,必须将两个或多个表达式链接在一起。有关更多信息,请参阅 结合多个表达式

  • 您无法创建过滤器表达式,使用模式中具有布尔类型的值进行筛选。要根据布尔值进行筛选,请使用类型为字符串并使用值"True""False"在您的数据中。或者你可以使用int或者long和值01

筛选表达式元素

使用以下元素创建筛选器表达式:

包括或排除

使用INCLUDE将建议仅限于满足筛选条件的项目或者useEXCLUDE删除符合筛选条件的所有项目。

商品编号

使用ItemIDINCLUDE或者EXCLUDE元素。

WHERE

使用WHERE检查项目的条件。您必须使用WHERE元素之后ItemID

和/或

要在同一过滤器表达式中链接多个条件,请使用AND或者OR。使用链接在一起的条件AND或者OR只能影响第一个条件中使用的数据集的属性。

数据集。属性

提供要筛选建议的数据集和元数据属性,datasetproperty格式的日期和时间。例如,要根据 “项目” 数据集中的类型属性进行筛选,您可以在筛选器表达式中使用 Items.Genres。

IF 条件

使用IFcondition仅限来检查CurrentUser且仅限Once在表达式末尾。不过,您可以扩展IF条件使用AND

当前用户。属性

要根据您正在获取建议的用户筛选建议,请在仅限IF 条件,请使用CurrentUser并提供用户属性。例如,CurrentUser.AGE

IN/NOT IN

使用IN或者NOT IN作为比较运算符,以根据匹配(或不匹配)一个或多个字符串值进行过滤。亚马逊仅对确切的字符串进行个性化筛选。

比较运算符

使用 =、<、<=、>、>= 运算符测试数值数据是否相等。

星号 (*) 字符

使用*以包括或排除所有类型的交互。使用* 仅限的过滤器表达式,使用EVENT_TYPE属性Interactions数据集。

管道分离器

使用管道分隔符(|)将多个表达式链接在一起。有关更多信息,请参阅 结合多个表达式

参数

对于使用=IN运算符,请使用美元符号 ($) 和参数名称将占位符参数添加为值。例如,$GENRES。在此示例中,当您获得建议时,您可以提供要筛选依据的一个或多个类型。有关可以使用的参数数量的信息,请参阅服务配额

注意

将参数名添加到表达式时,可以定义参数名称。参数名称不必与属性名称匹配。我们建议您使用与属性名称类似且易于记住的参数名称。当您将筛选器应用于建议请求时,您可以使用参数名称(区分大小写)。

筛选表达式示例

使用以下示例了解如何构建自己的过滤器表达式。它们按数据集类型进行组织。

交互

以下表达式排除基于事件类型(如单击)或事件类型的项目,这些项目在您使用$EVENT_TYPE参数。

EXCLUDE ItemID WHERE Interactions.EVENT_TYPE IN ($EVENT_TYPE)

以下表达式排除用户单击或流式传输的项目。

EXCLUDE ItemID WHERE Interactions.EVENT_TYPE IN ("click", "stream")

以下表达式包括用户以任何方式与之交互的项目。

INCLUDE ItemID WHERE Interactions.EVENT_TYPE IN ("*")

项目

以下表达式排除基于一个或多个类别的项目,当您使用$CATEGORY参数。

EXCLUDE ItemID WHERE Items.CATEGORY IN ($CATEGORY)

以下表达式排除shoe类别请勿使用具有描述boot

EXCLUDE ItemID WHERE Items.CATEGORY IN ("shoe") AND Items.DESCRIPTION NOT IN ("boot")

以下表达式仅包括具有类型或类型的项目,这些项目在您使用$GENRE参数。

INCLUDE ItemID WHERE Items.GENRE IN ($GENRE)

用户

以下表达式排除具有类型或类型的项目,当您使用$GENRE参数,但仅当当前用户的年龄等于您使用$AGE参数。

EXCLUDE ItemID WHERE Items.GENRE IN ($GENRE) IF CurrentUser.AGE = $AGE

以下表达式仅包含watch类别,其中包含luxury,如果当前用户的年龄已超过18

INCLUDE ItemID WHERE Items.CATEGORY IN ("watch") AND Items.DESCRIPTION IN ("luxury") IF CurrentUser.AGE > 18

结合多个表达式

要使用一个筛选器按 “项目” 和 “交互” 数据集进行筛选,请使用管道分隔符 (|)。首先对每个表达式进行独立评估,结果是两个结果的并集或交集。

匹配表达式示例

如果两个表达式都使用EXCLUDE或两个表达式都使用INCLUDE,结果是两个结果的并集,如下所示(A 和 B 是不同的表达式):

  • Exclude A | Exclude B等于Exclude result from A or result from B

  • Include A | Include B等于Include result from A or result from B

以下示例说明了如何结合使用INCLUDE。第一个表达式仅包含一个或多个类别的项目,当您使用$CATEGORY参数。第二个表达式包括用户标记为favorite。建议将仅包括具有您指定类别的项目以及用户已标记为收藏夹的项目。

INCLUDE ItemID WHERE Items.CATEGORY IN ($CATEGORY) | INCLUDE ItemID WHERE Interactions.EVENT_TYPE IN ("favorite")

包含和排除示例

如果一个或多个表达式使用INCLUDE并且还有一个表达式使用EXCLUDE,结果是EXCLUDE表达式结果,从INCLUDE表达式结果如下(A、B、C 和 D 是不同的表达式)。

  • Include A | Exclude B等于Include result from A - result from B

  • Include A | Include B | Exclude C | Exclude D等于Include (A or B) - (C or D)

以下示例演示如何将INCLUDE表达式和EXCLUDE表达式。第一个表达式仅包括具有类型或类型的项目,这些项目在您使用$GENRE参数。第二个表达式排除用户单击或流式传输的项目。建议将仅包括具有您指定但尚未单击或流式传输的类型的项目。

INCLUDE ItemID WHERE Items.GENRE IN ($GENRE) | EXCLUDE ItemID WHERE Interactions.EVENT_TYPE IN ("click", "stream")