非结构化数据内容库与多语言语义搜索:第二部分 架构博客

项目展示

14

多语言语义搜索的非结构化数据内容库:第二部分

主要要点

本文延伸了内容库的多语言语义搜索功能,保留了基于访问控制逻辑的架构。我们将介绍如何利用 Amazon Textract 进行光学字符识别OCR,生成文本的嵌入向量,并使用 Amazon OpenSearch Service 提供 kNN 搜索功能,最终实现用户的查询并返回相关文件。

文章重点:

利用OCR自动提取数据生成语义嵌入以捕捉文本之间的关联性使用AWS的服务以实现多语言搜索

在当今数据驱动的世界中,如何有效地利用巨大的非结构化数据是一项挑战,特别是对于需要跨语言数据搜索的全球企业。在这系列博客的第一部分中,我们建立了内容库的架构基础,其中的关键组件是基于动态访问控制的逻辑以及用于上传文档的网页 UI。

在第二部分中,我们为内容库扩展了多语言语义搜索的功能,同时保持第一部分的访问控制逻辑。这使得用户可以在内容库中以多种语言导入文档,然后运行搜索查询以获取语义上类似的文档。

解决方案概览

基于第一部分的架构基础,我们引入了四个新的构建块以扩展搜索功能。

模块描述光学字符识别 (OCR) 工作流自动识别和提取文档中的文本嵌入生成将文本映射到高维向量嵌入嵌入导入使嵌入向量可搜索语义搜索实现用户查询的语义搜索服务

光学字符识别工作流: 我们使用 Amazon Textract 来自动识别和提取上传文档中的文本,从而利用 png 格式的样本审查数据集。我们使用 Amazon Textract 的同步应用程序编程接口 (API) 收集关键值对,如 reviewid 和 reviewBody 属性。根据您的特定需求,您可以选择捕获完整的提取文本或部分文本。

嵌入生成: 我们利用一个机器学习 (ML) 模型来捕捉文本之间的语义关系。您可以使用 Amazon SageMaker 来构建、训练和部署 ML 模型,以便在生产就绪的托管环境中使用。本文使用的开源预训练 multilingualuniversalsentenceencoder 模型。部署到 SageMaker 的模型推断端点会为文档文本和搜索查询生成嵌入。

嵌入导入: 为了使内容库用户能够搜索嵌入,您可以利用 Amazon OpenSearch Service 的 kNN 搜索功能。OpenSearch kNN 插件提供不同的方法。本博客中,我们选择了基于 层次导航小型世界 (HNSW) 演算法的 近似 kNN 搜索方法。

语义搜索: 我们将搜索服务作为额外的后端逻辑,通过 Amazon API Gateway 提供给用户。经过身份验证的内容库用户可通过前端发送搜索查询,接收匹配的文档。这一解决方案利用用户的 Amazon Cognito 身份 (ID) token 的 department 属性来维持完整的访问控制逻辑。

技术架构

技术架构包括两个部分:

啊哈加速器安卓实施多语言语义搜索功能:描述用户上传文档的处理工作流,将文档设置为可搜索。运行输入搜索查询:覆盖用户输入查询的搜索流程,找回输入文本查询的最近邻资料。

部分一:实施多语言语义搜索功能

在我们之前的博客文章中,我们探讨了用户身份验证、ID Token 增强、Amazon Simple Storage Service 的物件标签、动态访问控制和文档上传至 S3 源桶的模块。接下来我们将讨论 E 到 H 四个模块。

OCR 工作流从上传的文档中提取文本。源 S3 桶向 Amazon Simple Queue Service (SQS) 发送事件通知。订阅 SQS 队列的文档转换 AWS Lambda 函数调用 Amazon Textract API 以提取文本。转换羊脑 Lambda 函数向 SageMaker 上的编码器模型发出推断请求。此示例中,Lambda 函数将提交 reviewBody 属性以生成嵌入。文档转换 Lambda 函数在转换 S3 桶中写入输出文件,该文件包含提取出来的 reviewid 和 reviewBody 属性以及从步骤 2 产生的 reviewBodyembeddings 属性。 注意: 该工作流使用与源文档相同的 S3 对象标签标记输出文件,以方便后续访问控制。转换 S3 桶发送事件通知以调用索引 Lambda 函数。索引 Lambda 函数读取文本文件内容,并向 OpenSearch 索引发送 API 调用以进行访问控制。

部分二:运行用户主动的查询

接下来,我们将描述用户的请求如何生成查询结果。

用户在网页 UI 中输入搜索字符串以检索相关文档。根据活动的登录会话,UI 将用户的 ID token 传递给 API Gateway 的搜索端点。API Gateway 利用 Amazon Cognito 集成来授权搜索 API 请求。验证后,搜索 API 端点请求调用搜索文档 Lambda 函数。搜索文档函数将查询字符串作为推断请求发送到编码器模型以接收嵌入作为推断响应。搜索文档函数利用嵌入响应构建 OpenSearch kNN 搜索查询。HNSW 演算法配置了 Lucene 引擎和其过滤选项 以根据用户 ID token 中的自定义 department 声明维持访问控制逻辑。OpenSearch 查询将返回以下结果:前三个最近的 Approximate kNN其他属性,如 reviewid 和 reviewBody该工作流将相关的查询结果属性返回给 UI。

先决条件

在安装此解决方案之前,您必须具备如下先决条件:

必须拥有 AWS 帐户。请点击 此处创建并激活帐户。在开发机器上安装以下软件,或者使用 AWS Cloud9 环境:AWS 命令行界面 (AWS CLI);配置它以指向您的 AWS 帐户TypeScript;使用如 npm 的包管理器AWS Cloud Development Kit (AWS CDK)Docker;确保其正在运行适当的 AWS 凭证 以便于与 AWS 资源互动。

操作步骤

设置

以下步骤将在您的 AWS 帐户中部署两个 AWS CDK 堆栈:

contentreposearchstack (blogcontentreposearchstackts) 创建了图 3 详述的环境,但不包括 SageMaker 端点,该端点需要在单独的步骤中创建。demodatastack (userpooldemodatastackts) 部署了样本用户、群组和角色映射。

要继续设置,请使用以下命令:

克隆项目 Git 仓库:

bashgit clone https//githubcom/awssamples/contentrepositorywithmultilingualsearch contentrepository

安装必要的依赖:

bashcd contentrepository/backendcdk npm install

配置环境变量:

bashexport CDKDEFAULTACCOUNT=(aws sts getcalleridentity query Account output text)export CDKDEFAULTREGION=(aws configure get region)

为 AWS CDK 使用引导您的帐户:

bashcdk bootstrap aws//CDKDEFAULTACCOUNT/CDKDEFAULTREGION

将代码部署到您的 AWS 帐户:

非结构化数据内容库与多语言语义搜索:第二部分 架构博客

bashcdk deploy all

整个堆栈设置可能需要最多 20 分钟。

创建 SageMaker 端点

请遵循以下步骤以创建 SageMaker 端点,该端点位于您部署 AWS CDK 堆栈的 AWS 区域中。

登录 SageMaker 控制台。在导航菜单中,选择 Notebook,然后选择 Notebook 实例。点击 创建笔记本实例。在 笔记本实例设置 中,输入 contentreponotebook 作为笔记本实例名称,其余默认设置保持不变。在 权限和加密 部分 (图 5),您需要将 IAM 角色部分设置为前缀为 contentreposearchstack 的角色。如果没有自动填充此角色,则从下拉列表中选择它。保持其余默认,然后选择 创建笔记本实例。

在 34 分钟内,笔记本创建状态更改为 Pending,然后可用。一旦笔记本状态为 可用,选择 打开 Jupyter。选择 上传 按钮,上传位于博客仓库根目录的 backendcdk 文件夹中的 createsagemakerendpointipynb 文件。打开 createsagemakerendpointipynb 笔记本,从 Cell 菜单中选择 全部运行。这可能需要最多 10 分钟。

在所有单元成功运行后,确认 AWS Systems Manager 参数 sagemakerendpoint 已更新为 SageMaker 端点名称的值。如果你没有看到输出,请检查先前步骤是否正确执行。

在 SageMaker 控制台中确认已部署以 tensorflowinference 开头的推断端点并状态为 InService。上传样本数据到内容库:在博客仓库根目录的 uploaddocumentstoS3sh 脚本中,更新 S3BUCKETNAME 变量为 AWS CDK 输出中的 s3SourceBucketName。运行 uploaddocumentstoS3sh 脚本以将 150 个样本文档上传到内容库,这需要 56 分钟。在此过程中,上传文档将触发在 实施多语言语义搜索功能 中描述的工作流。

使用搜索服务

到目前为止,您已在 AWS 帐户中部署了内容库的所有构建块。接下来,作为上传样本数据到内容库的一部分,您推送了有限的 150 个样本文档png 格式。每个文档都是四种不同语言之一英语、德语、西班牙语和法语。借助新增的多语言搜索能力,您可以使用一种语言查询,并在不同语言之间获得语义上类似的结果,同时保持访问控制逻辑不变。

访问前端应用:从 contentreposearchstack 的 AWS CDK 输出中复制 amplifyHostedAppUrl 的值。在网页浏览器中输入该 URL 以访问前端应用。

当自动构建和部署 React 应用完成后,将显示一个临时页面,这大约需要 45 分钟。

登录应用:

内容库提供了两个演示用户作为 AWS CDK 输出中的凭证。从终端中复制与 salesuser 相关的密码,该用户属于 sales 部门。

按照 React 网页的提示,使用 salesuser 登录并更改临时密码。

输入搜索查询并验证结果。搜索操作将调用 运行用户主动查询 中描述的工作流。例如:

输入 works well 作为搜索查询。注意多语言的输出和语义上相似的结果。

![正面情感多语言搜索结果](https//d2908q01vom

从 Amazon RDS for MySQL 57 执行跨账户主要版本升级到 Amazon Aurora 304x 的最小停机时间通过 Robert Daly Guy Baulch 和 Sudhakar Darse 于 2024 年 2 月 28 日在高级(300),Amazon Aurora,Am...