柏拉图数据智能。
垂直搜索和人工智能。

使用 Amazon Personalize 和 Amazon OpenSearch Service 解锁由 AI 提供支持的个性化体验 |亚马逊网络服务

日期:

OpenSearch的 是一个可扩展、灵活且可扩展的开源软件套件,用于搜索、分析、安全监控和可观察性应用程序,并根据 Apache 2.0 许可证获得许可。 亚马逊开放搜索服务 是一项完全托管的服务,可以在 AWS 云中轻松部署、扩展和操作 OpenSearch。

OpenSearch 使用称为 BM-25 的概率排名框架来计算相关性分数。如果一个独特的关键词在文档中出现的频率更高,BM-25 就会为该文档分配更高的相关性分数。然而,该框架没有考虑点击或购买数据等用户行为,这可以进一步提高个人用户的相关性。

改进搜索功能是增强网站或应用程序的整体用户体验和参与度的一个不可或缺的方面。搜索流量被认为是高意图,因为用户正在积极寻找特定的项目,并且发现他们的转化率平均是非网站搜索访问者的两倍。通过使用点击、点赞和购买等用户交互数据,企业可以提高搜索相关性,以利用此流量,并减少用户因难以找到所需商品而放弃会话的情况。通过改进搜索结果的质量,企业可以显着提高客户参与度、满意度和忠诚度,并提高转化率,最终获得更大的盈利能力和成功。

亚马逊个性化 允许您使用与 Amazon.com 20多年来。不需要机器学习专业知识。

Amazon Personalize 支持根据用户的上下文信息(例如设备类型、位置、时间或您提供的其他信息)自动调整推荐。您向 Amazon Personalize 提供有关您的用户及其在应用程序中的交互的历史数据,例如购买历史记录、评级和喜欢。您可以通过从某个数据库一次性导入大型历史数据集来将数据批量添加到 Amazon Personalize。 亚马逊简单存储服务 (Amazon S3) CSV 文件,使用 Amazon Personalize 所需的格式。您还可以通过使用 Amazon Personalize 控制台或 API 导入记录来增量添加数据。导入历史数据后,您可以通过发送用户交互事件继续实时提供新数据。根据您想要解决的用例(例如产品推荐),您可以选择针对该目标优化的预构建方案。 Amazon Personalize 分析您的数据并根据配方中的参数训练自定义 ML 模型,以生成针对您的用户和应用程序优化的个性化建议。模型训练完成后,您可以为用户生成实时个性化推荐。

随着新推出的 适用于 Amazon OpenSearch Service 的 Amazon 个性化搜索插件,您可以使用用户交互历史记录和兴趣来增强他们的搜索结果。通过利用 亚马逊个性化食谱个性化排名,您可以在从 OpenSearch Service 获取搜索结果时,根据用户兴趣帮助提升相关项目的搜索结果。

本文介绍了如何将 Amazon Personalize 搜索排名插件与 OpenSearch Service 集成以实现个性化搜索体验。为了在本文中构建 Amazon Personalize 工件,我们使用来自 IMDb 的数据集,IMDb 是世界上最权威的电影、电视和名人内容来源, 在 AWS Marketplace 上提供, 以及 MovieLens 数据集 由明尼苏达大学 GroupLens 研究机构编写,包含各种电影的用户排名。

解决方案概述

下图说明了解决方案体系结构。

工作流程包括以下步骤:

  1. 用户通过其网站或门户发出搜索请求。该搜索请求被发送到 OpenSearch 服务。
  2. 前 N 个搜索结果从 OpenSearch Service 索引返回并发送到插件以预处理和准备输入 亚马逊个性化活动.
  3. 该请求将发送到 Amazon Personalize 以获取重新排名的搜索结果。
  4. Amazon Personalize 返回搜索结果的个性化排名以及每个结果的相关分数。
  5. 重新排名的点击由插件返回到 OpenSearch Service,并在 OpenSearch Service 相关性分数和 Amazon Personalize 个性化排名分数之间应用权重。您指定一个权重参数(介于 0.0–1.0 之间),用于控制对结果重新排名时 OpenSearch Service 和 Amazon Personalize 之间的平衡。权重越高意味着 Amazon Personalize 排名分数与 OpenSearch Service 分数的影响力越大。这允许您自定义个性化推荐对返回给用户的最终搜索结果排名的影响程度。
  6. 用户根据自己的偏好和交互获得个性化的搜索结果。

先决条件

您应该具备以下先决条件:

  • An AWS账户.
  • An AWS身份和访问管理 具有适当访问权限的 (IAM) 角色。我们提供 AWS CloudFormation 模板和 Jupyter 笔记本可帮助设置所需的 IAM 角色和访问权限。
  • 要在 OpenSearch Service 中启用个性化,您需要设置所需的 Amazon Personalize 资源,包括数据集组、解决方案版本和活动。我们提供了一个 Jupyter笔记本 创建所有 Amazon Personalize 资源,利用完全托管的 Jupyter 笔记本实例功能 亚马逊SageMaker.

部署 CloudFormation 堆栈

CloudFormation 堆栈自动部署 OpenSearch Service 域和 SageMaker Notebook 实例。完成以下步骤来部署堆栈:

  1. 登录 AWS管理控制台 使用您想要部署 CloudFormation 堆栈的帐户中的凭据。
  2. 启动CloudFormation堆栈 直。
  3. 点击 指定详细信息 页面,提供模板所需的任何参数,例如 OpenSearch Service 和 SageMaker 实例大小。
  4. 点击 配置堆栈选项 页面,指定堆栈名称和您要设置的任何其他选项。
  5. 完成堆栈创建并在堆栈详情页面监控状态。
  6. 创建堆栈后,从控制台打开 SageMaker 笔记本实例。

笔记本实例已预加载所需的笔记本。

设置并完成 Amazon Personalize 工作流程

打开 1.Configure_Amazon_Personalize.ipynb 用于设置 Amazon Personalize 工件的笔记本。本笔记本将引导您完成以下步骤:

  1. 下载数据集并预处理数据以创建创建数据集所需的输入文件。
  2. 创建一个数据集组。
  3. 创建数据集和模式。
  4. 准备并导入数据。
  5. 创建解决方案和解决方案版本。
  6. 为解决方案版本创建活动。

使用 Jupyter 笔记本安装 Amazon Personalize 搜索排名插件

打开 2.Configure_Amazon_OpenSearch.ipynb 笔记本并运行说明。本笔记本将引导您完成以下步骤:

  1. 将示例索引数据提取到 OpenSearch 服务实例中。用代表性数据填充索引有助于插件的彻底测试和验证。
  2. 在 OpenSearch 服务域中安装插件包。这将个性化功能集成到 OpenSearch 环境中。
  3. 设置搜索管道以激活插件的功能。搜索管道包含转换查询和结果的请求预处理器和响应后处理器。构建管道时,指定之前在管道中创建的 Amazon Personalize 活动 ARN personalized_search_ranking 后处理器以实现个性化重新排名。这会将插件配置为在结果处理期间从 Amazon Personalize 检索实时个性化结果以供应用程序使用。定义管道允许插件根据用户偏好增强搜索相关性。

使用控制台安装 Amazon Personalize 搜索排名插件

您还可以从控制台设置 Amazon Personalize 搜索插件。仅当您尚未使用之前的 Jupyter 笔记本安装该插件时,才需要执行此操作。

要在 OpenSearch Service 上安装 Amazon Personalize Search Ranking 插件,请完成以下步骤:

  1. 在 OpenSearch Service 控制台上,导航到您的域。
  2. 点击 标签,选择 联营套餐 将 Amazon Personalize Search Ranking 插件与您的 OpenSearch Service 域关联。插件版本必须与 OpenSearch 服务域版本匹配。

Amazon Personalize 搜索排名插件可以安装在 OpenSearch Service 版本 2.9 及更高版本上。

  1. 在可用插件列表中找到 Amazon Personalize 搜索排名插件。
  2. 律师 旁边的插件以安装它并将其与您现有的 OpenSearch Service 域关联。

连接插件后,它将作为插件类型出现在包列表中。安装插件后,安装过程现已完成。

启用 Amazon Personalize 搜索排名插件

Amazon Personalize 搜索排名插件使用 search-pipeline OpenSearch Service 的功能,从 2.9 版本开始发布。该插件取决于 search-pipeline 对 OpenSearch Service 提供的搜索结果应用亚马逊个性化排名的功能,还需要设置为 search-pipeline 响应处理器。此管道定义将包含 Amazon Personalize 插件的配置,其中包括调用以获取 Amazon Personalize 排名的 Amazon Personalize 活动、访问 Amazon Personalize 资源的 IAM 角色以及下表中定义的参数。

个人设置 其他要求 默认 课程描述
campaign 不包含 指定用于个性化结果的 Amazon Personalize 活动的 ARN。
recipe 不包含 指定要使用的 Amazon Personalize 配方的名称。截至撰写本文时, aws-personalized-ranking 是唯一受支持的值。
item_id_field 没有 “_ID” 如果 _id OpenSearch 中索引文档的字段与您的 Amazon Personalize 不对应 itemId,指定执行此操作的字段的名称。
weight 不包含 指定响应处理器在对结果重新排名时对个性化的重视程度。指定 0.0–1.0 范围内的值。越接近 1.0,Amazon Personalize 的结果排名越高的可能性越大。如果指定 0.0,则不会发生个性化,并且 OpenSearch 服务优先。
tag 没有 不包含 指定处理器的标识符。
iam_role_arn 不包含 指定 IAM 角色以访问 Amazon Personalize 资源。这对于 OpenSearch 服务是必需的,对于开源 OpenSearch 是可选的。
aws_region 不包含 指定您在其中创建 Amazon Personalize 活动的 AWS 区域。
ignore_failure 没有 不包含 指定插件是否忽略任何处理器故障。对于值,请指定 true or false。对于您的生产环境,我们建议您指定 true 以避免查询响应的任何中断。对于测试环境,您可以指定 false 查看插件生成的任何错误。
external_account_iam_role_arn 没有 不包含 如果您使用 OpenSearch Service 并且您的 Amazon Personalize 和 OpenSearch Service 资源存在于不同的账户中,请指定有权访问 Amazon Personalize 的角色的 ARN。

以下 Python 代码片段创建一个搜索管道 personalized_search_ranking OpenSearch 服务域上的响应处理器。您可以在本文随附的笔记本中运行此步骤一次:

定义个性化排名的搜索管道

您可以使用以下 Python 代码创建一个搜索管道 personalized_search_ranking OpenSearch 服务域上的响应处理器。将域端点替换为您的域端点 URL。例如: https://<domain name>.<AWS region>.es.amazonaws.com.

import requests
from requests_auth_aws_sigv4 import AWSSigV4

domain_endpoint = 'domain endpoint'
pipeline_name = 'pipeline name'
url = f'{domain_endpoint}/_search/pipeline/{pipeline_name}'
auth = AWSSigV4('es')

headers = {'Content-Type': 'application/json'}

body = {
  "description": "A pipeline to apply custom re-ranking from Amazon Personalize",
  "response_processors": [
    {
      "personalized_search_ranking" : {
        "campaign_arn" : "<Replace with Amazon Personalize Campaign ARN>",
        "item_id_field" : "itemId",
        "recipe" : "aws-personalized-ranking",
        "weight" : "0.3",
        "tag" : "personalize-processor",
        "iam_role_arn": "<Replace with Role ARN>",
        "aws_region": "<Replace with AWS region>",
        "ignore_failure": true
    }
  ]
}
try:
    response = requests.put(url, auth=auth, json=body, headers=headers)
    print(response.text)
except Exception as e:
    print(f"Error: {e}")

将搜索管道应用于单个查询

使用以下命令配置搜索管道后 personalized_search_ranking 响应处理器,您可以将 Amazon Personalize Search Ranking 插件应用到您的 OpenSearch 查询并查看重新排名的结果。更新代码以指定您的域端点、OpenSearch 服务索引、管道名称(您在上面配置)和查询(我们使用“Tom Cruise”进行查询)。为了 user_id,指定您要获取其搜索结果的用户的 ID。该用户必须位于您用于创建 Amazon Personalize 解决方案版本的数据中。

import requests
from requests_auth_aws_sigv4 import AWSSigV4

domain_endpoint = 'domain endpoint'
index = 'index name'
url = f'{domain_endpoint}/{index}/_search/'

auth = AWSSigV4('es')
headers = {'Content-Type': 'application/json'}
params = {"search_pipeline": "<Replace with pipeline-name>"}
body = {
    "query": {
        "multi_match": {
            "query": "Tom Cruise",
            "fields": ["title", "plot", "genres", "directedBy", "starring"]
        }
    },
    "ext": {
        "personalize_request_parameters": {
            "user_id": "<Replace with USER ID>"
        }
    }
}
try:
    response = requests.post(url, auth=auth, params=params, json=body, headers=headers)
    print(response)
except Exception as e:
    print(f"Error: {e}")

评估结果

打开 3.测试.ipynb 笔记本并逐步完成测试和比较使用个性化和未使用个性化的查询的结果的步骤。 Amazon Personalize 搜索排名插件对 OpenSearch Service 查询响应中的搜索结果重新排名。它同时考虑 Amazon Personalize 的排名和 OpenSearch Service 的排名。本笔记本将引导您完成以下步骤:

  1. 定义必要的连接参数以与您的 OpenSearch 服务域建立连接。这涉及指定域端点、身份验证凭据以及特定 OpenSearch Service 设置所需的任何其他配置设置。
  2. 创建一组示例查询,包括带个性化参数的查询和不带个性化参数的查询。这些查询将用于评估个性化对搜索结果的影响。
  3. 运行并比较使用个性化和未使用个性化的查询的结果。

在我们的示例中,我们使用了对“Tom Cruise”的查询,对于个性化参数,我们使用了最近观看戏剧和浪漫电影类型的用户。随后的搜索结果展示了插件如何根据用户观察到的观看行为来定制推荐并确定推荐的优先级。这证明了该插件能够通过考虑个人用户偏好和参与模式来提供定制的、策划的体验。基于用户偏好的推论来细化和调整搜索结果的能力能够提供增强的相关性和实用性。

个性化结果与非个性化结果

让我们考虑为 ID 为 12 的用户提供个性化结果。首先,我们通过运行以下代码来检查该用户最近的交互: 3.测试.ipynb 笔记本来检索他们的交互历史记录。这使我们能够看到该用户最近评论过哪些类型的电影,这可以帮助我们为他们提供个性化推荐。

在此示例中,我们看到用户表达了对戏剧、浪漫和惊悚电影类型的兴趣。为了提供个性化推荐,我们首先利用用户的类型偏好,在启用个性化参数的情况下运行查询。然后,我们在未启用个性化的情况下运行相同的查询,以进行比较。以下结果显示了非个性化和个性化推荐输出之间的差异。

前两列显示电影索引上查询“Tom Cruise”的默认 OpenSearch Service 结果,显示各种不同类型的 Tom Cruise 电影。接下来的两列展示了同一“Tom Cruise”查询的个性化 OpenSearch Service 结果,但针对戏剧、浪漫和惊悚片类型感兴趣的用户进行了定制。与一般结果相比,个性化结果突出显示了用户喜欢的戏剧、浪漫和惊悚类型的汤姆·克鲁斯电影。该增量突出显示了个性化结果相对于非个性化结果如何重新排名,优先考虑符合用户类型偏好的电影。这展示了个性化如何根据个人用户的品味和兴趣定制 OpenSearch Service 结果。

此比较演示了 Amazon Personalize 如何自定义 OpenSearch Service 电影结果以匹配单个用户的兴趣。尽管标准 OpenSearch 服务旨在普遍提供汤姆·克鲁斯 (Tom Cruise) 的相关电影结果,但 Amazon Personalize 会根据用户独特的观看历史记录和偏好来定制结果,重点关注汤姆·克鲁斯 (Tom Cruise) 电影,并预测该用户会喜欢这些电影。

并排结果说明了 Amazon Personalize 如何通过针对个人个性化电影结果来提供更有针对性、以用户为中心的搜索体验。

清理

完成以下步骤以清理您的资源:

  1. 请按照 4.清理.ipynb 笔记本来清理通过笔记本创建的资源。
  2. 在 AWS CloudFormation 控制台上,删除您创建的堆栈。

结论

Amazon Personalize 搜索排名插件与 OpenSearch Service 无缝集成,以实现个性化搜索体验。通过使用用户行为数据和 Amazon Personalize 的 ML 功能,该插件可以重新排序 OpenSearch Service 结果排名,以提高每个唯一用户的相关性。这将创建一种定制的搜索体验,将最相关的内容显示在结果中更高的位置。该插件可配置为平衡个性化与 OpenSearch Service 本机评分,以适应不同的用例。总体而言,Amazon Personalize 搜索排名插件是一种通过考虑用户的个人兴趣和偏好来增强 OpenSearch Service 搜索相关性和参与度的强大方法。只需几个配置步骤,您就可以开始提供与用户产生强烈共鸣的超相关结果。

额外的资源


作者简介

詹姆斯·乔里 是 AWS 应用 AI 领域的首席解决方案架构师。 他对个性化和推荐系统特别感兴趣,并且拥有电子商务、营销技术和客户数据分析方面的背景。 在业余时间,他喜欢露营和赛车模拟。

里根罗萨里奥 是 AWS 的解决方案架构师,专门为教育技术公司构建可扩展、高度可用且安全的云解决方案。 Reagan 在软件工程和架构方面拥有超过 10 年的经验,喜欢利用自己的技术知识帮助 AWS 客户构建强大的云解决方案,充分利用 AWS 的广度和深度。

现货图片

最新情报

现货图片

在线答疑

你好呀! 我怎么帮你?