使用 Transformer 和 Amazon OpenSearch Service 构建基于列的语义搜索引擎

03d69fda0950f81f6e64eabe32f26875.gif

在数据湖中,对于数据清理和注释、架构匹配、数据发现和跨多个数据来源进行分析等许多操作,查找相似的列有着重要的应用。如果不能从多个不同的来源准确查找和分析数据,就会严重拉低效率,不论是数据科学家、医学研究人员、学者,还是金融和政府分析师,所有人都会深受其害。

传统解决方案涉及到使用词汇关键字搜索或正则表达式匹配,这些方法容易受到数据质量问题的影响,例如缺少列名或者不同数据集中采用了不同的列命名约定(例如, zip_code、zcode、postalcode )。

在这篇文章中,我们演示了一种解决方案,基于列名和/或列内容对相似列执行搜索。该解决方案使用 Amazon OpenSearch Service 中提供的近似最近邻算法来搜索具有相似语义的列。为了协助进行搜索,我们使用 Amazon SageMaker 中通过 sentence-transformers 库预训练的 Transformer 模型,为数据湖中的各个列创建特征表示(嵌入对象)。最后,为了从解决方案进行交互并可视化结果,我们构建了在 Amazon Fargate 上运行的交互式 Streamlit Web 应用程序。

我们提供了一个代码教程,您可用它来部署资源,以便对示例数据或自己的数据运行该解决方案。

解决方案概览

以下架构图展示了查找具有相似语义列的工作流程,分为两个阶段。第一阶段运行 Amazon Step Functions 工作流,从表格列创建嵌入对象并构建 OpenSearch Service 搜索索引。第二阶段是在线推理阶段,通过 Fargate 运行 Streamlit 应用程序。Web 应用程序收集输入搜索查询,并从 OpenSearch Service 索引中检索与该查询近似的 k 个最相似列。

6671d8978b3390737b8445e03a1c294f.png

图1 解决方案架构

自动化工作流按以下步骤进行:

  1. 用户将表格数据集上传到 Amazon Simple Storage Service (Amazon S3) 存储桶中,这会调用 Amazon Lambda 函数来启动 Step Functions 工作流。

  2. 该工作流首先启动 Amazon Glue 作业,将 CSV 文件转换为 Apache Parquet 数据格式。

  3. SageMaker Processing 作业使用预训练模型或自定义列嵌入模型,为各个列创建嵌入对象。SageMaker Processing 作业将每个表的列嵌入对象保存在 Amazon S3 中。

  4. Lambda 函数创建 OpenSearch Service 域和集群,以索引上一步中生成的列嵌入对象。

  5. 最后,使用 Fargate 部署交互式 Streamlit Web 应用程序。Web 应用程序为用户提供了一个界面,用于输入查询,从而在 OpenSearch Service 域中搜索相似的列。

您可以从 GitHub 下载代码教程,在示例数据或自己的数据上试用此解决方案。Github 上提供了如何部署本教程所需资源的说明。

先决条件

要实施此解决方案,您需要:

  • 亚马逊云科技账户。

  • 对亚马逊云服务有一些基本了解,例如 Amazon Cloud Development Kit(Amazon CDK)、Lambda、OpenSearch Service 和 SageMaker Processing。

  • 用于创建搜索索引的表格数据集。您可以使用自己的表格数据,也可以在 GitHub 上下载示例数据集。

构建搜索索引

第一阶段中将构建列搜索引擎索引。下图展示了运行此阶段的 Step Functions 工作流。

c1688a5694694f36e184bbf1eb4d00be.png

图 2 Step Functions 工作流 – 多个嵌入模型

数据集

在这篇文章中,我们构建了一个搜索索引,包括了超过 25 个表格数据集中的 400 多个列。数据集来自以下公共来源:

  •  s3://sagemaker-sample-files/datasets/tabular/ 

  • NYC Open Data

  • Chicago Data Portal

有关索引中包含的表的完整列表,请参阅 GitHub 上的代码教程(https://github.com/aws-samples/tabular-column-semantic-search/blob/main/sample-batch-datasets.json)。

您可以使用自己的表格数据集来扩充示例数据,或者构建自己的搜索索引。我们提供了两个 Lambda 函数用于启动 Step Functions 工作流,这两个函数分别为单个 CSV 文件或批量 CSV 文件构建搜索索引。

将 CSV 转换为 Parquet

使用 Amazon Glue 将原始 CSV 文件转换为 Parquet 数据格式。Parquet 是一种面向列格式文件的格式,是大数据分析中的首选格式,可提供高效的压缩和编码。在我们的实验中,与原始 CSV 文件相比,Parquet 数据格式显著减少了所需的存储空间。我们还使用 Parquet 作为通用数据格式来转换其他数据格式(例如 JSON 和 NDJSON),因为它支持高级嵌套数据结构。

创建表格列嵌入对象

在本文中,为了对示例表格数据集中的单个表列提取嵌入对象,我们使用了从 sentence-transformers 库预训练的以下模型。有关其他模型,请参阅 Pretrained Models(预训练模型,https://www.sbert.net/docs/pretrained_models.html)

d7b9f34aabf807e7014a00fb3f609e0e.png

SageMaker Processing 作业为单个模型运行 create_embeddings.py (代码:https://github.com/aws-samples/tabular-column-semantic-search/blob/main/assets/s3/scripts/create_embeddings.py)。要从多个模型中提取嵌入对象,工作流会并行运行 SageMaker Processing 作业,如 Step Functions 工作流所示。我们使用该模型创建两组嵌入对象:

  • column_name_embeddings – 列名的嵌入对象(标题)

  • column_content_embeddings – 列中所有行的平均嵌入对象

有关列嵌入过程的更多信息,请参阅 GitHub 上的代码教程(https://github.com/aws-samples/tabular-column-semantic-search)。

SageMaker Processing 步骤的替代方法是创建 SageMaker 批量变换,用于在大型数据集上获取列嵌入对象。这将需要将模型部署到 SageMaker 端点。有关更多信息,请参阅 Use Batch Transform(使用批量转换)。

使用 OpenSearch Service 

对嵌入对象编制索引

在本阶段的最后一步,Lambda 函数将列嵌入对象添加到 OpenSearch Service 近似 k 近邻(kNN,k-Nearest-Neighbor)搜索索引中。向每个模型分配自己的搜索索引。有关近似 kNN 搜索索引参数的更多信息,请参阅 k-NN (https://opensearch.org/docs/latest/search-plugins/knn/index/)。

使用 Web 应用程序

进行在线推理和语义搜索

工作流程的第二阶段运行 Streamlit Web 应用程序,您可以在其中提供输入数据,然后在 OpenSearch Service 中搜索编制了索引的具有相似语义的列。应用层使用应用程序负载均衡器、Fargate 和 Lambda。应用程序基础设施作为解决方案的一部分自动部署。

使用该应用程序,您可以提供输入数据,然后搜索具有相似语义的列名和/或列内容。此外,您可以选择嵌入模型以及搜索中返回的最近邻的数量。应用程序接收输入数据,使用指定模型嵌入输入数据,并在 OpenSearch Service 中使用 kNN 搜索,以此来搜索编制了索引的列嵌入对象,并查找与给定输入数据最相似的列。显示的搜索结果包括表名、列名和所确定列的相似度分数,以及数据在 Amazon S3 中的位置,以供进一步探索。

下图显示了 Web 应用程序的示例。在此示例中,我们在数据湖中搜索具有与 district (负载)相似的 Column Names (负载类型)的列。应用程序使用 all-MiniLM-L6-v2 作为嵌入模型,从 OpenSearch Service 索引中返回了 10 个(k)最近邻。

根据 OpenSearch Service 中索引的数据,应用程序返回 transit_district 、 city 、 borough 和 location 作为四个最相似的列。此示例演示了搜索方法识别数据集中相似语义列的功能。

8e2d5f8059f816fe7a9b461c2c857a34.png

图 3:Web 应用程序用户界面

清理

要删除本教程中由 Amazon CDK 创建的资源,请运行以下命令:

 Bash 

cdk destroy --all

左滑查看更多

总结

在这篇文章中,我们介绍了为表格列构建语义搜索引擎的端到端工作流程。

您可以使用我们在 GitHub (https://github.com/aws-samples/tabular-column-semantic-search) 上提供的代码教程,开始处理自己的数据。如果您需要帮助加快在产品和流程中使用机器学习功能的速度,请联系 Amazon Machine Learning Solutions Lab (https://aws.amazon.com/ml-solutions-lab/)。

Original URL: 

https://aws.amazon.com/blogs/big-data/build-a-semantic-search-engine-for-tabular-columns-with-transformers-and-amazon-opensearch-service/

本篇作者

7dda4f3381cdecbb9651f03c483bc6f8.png

Kachi Odoemene 

亚马逊云科技人工智能部门的应用科学家。他构建人工智能/机器学习解决方案,为亚马逊云科技客户解决业务问题。

08f6daf7ffb3fd7d215cc01c284ca9ef.png

Taylor McNally

Amazon Machine Learning Solutions Lab 的深度学习架构师。他帮助来自不同行业的客户利用亚马逊云科技上的人工智能/机器学习构建解决方案。他喜欢醇美咖啡,爱好户外活动,并享受与家人和活泼好动的狗子共度时光。

adbf39d8954a78ba1b28e4dfc8bfaa50.png

Austin Welch 

Amazon ML Solutions Lab 的数据科学家。他开发自定义深度学习模型,帮助亚马逊云科技公共部门客户加快人工智能和云的采用。在业余时间,他喜欢阅读、旅行和柔术。

3d290668abc601400a3408b64270c0c5.gif

4e33180a7dc303bf272e3b1f47225226.gif

听说,点完下面4个按钮

就不会碰到bug了!

608a5f169a6b80f59664832064338ad3.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/91905.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密

C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密,为了演示方便本问使用的是Visual Studio 2022 来构建代码的 1、新建项目,之后选择 项目 鼠标右键选择 管理NuGet程序包管理,输入 BouncyCastle 回车 添加BouncyCastle程序包 2、代码如下&am…

npm和yarn的区别?

文章目录 前言npm和yarn的作用和特点npm和yarn的安装的机制npm安装机制yarn安装机制检测包解析包获取包链接包构建包 总结后言 前言 这一期给大家讲解npm和yarn的一些区别 npm和yarn的作用和特点 包管理:npm 和 yarn 可以用于安装、更新和删除 JavaScript 包。它们提…

识别图片中的文字

前言 PearOCR 是一款免费无限制网页版文字识别工具。 优点如下: 免费:完全免费,没有任何次数、大小限制,可以无限使用; 安全:全部数据本地运算,所有图片均不会被上传; 智能&#xf…

市场的新宠:4G智能手表

现在人们提到智能手表,健康监测、运动记录、接打电话等定是他不可或缺的功能,而其中通讯功能在绝大数多的智能手表上都是通过蓝牙实现的,需要让手表通过蓝牙连接到手机端来进行。在没有手机的情况下,配置再高的蓝牙智能手表也是“…

Kubernetes入门 十、HPA 自动扩/缩容

目录 概述安装metrics-server使用HPA 概述 我们已经可以通过手动执行 kubectl scale 命令实现Pod的扩缩容,但是这显然不符合 Kubernetes 的定位目标–自动化和智能化。Kubernetes 期望可以通过监测Pod的使用情况,实现 Pod 数量的自动调整,于…

成都瀚网科技:抖店如何经营?

作为热门的短视频分享平台,抖音不仅是一种娱乐工具,更是一个蕴藏着无限商机的电商平台。开店、抖音下单成为很多人的选择。那么,抖音如何开店、下单呢? 1、如何在抖音上开店和下单? 注册账号:首先&#xff…

5.网络原理之初识

文章目录 1.网络发展史1.1独立模式1.2网络互连1.3局域网LAN1.3.1基于网线直连1.3.2基于集线器组建1.3.3基于交换机组建1.3.4基于交换机和路由器组建1.3.4.1路由器和交换机区别 1.4广域网WAN 2.网络通信基础2.1IP地址2.2端口号2.3认识协议2.4五元组2.5 协议分层2.5.1 分层的作用…

SpringMVC-2-Spring MVC拦截器详解:从入门到精通

SpringMVC-2-Spring MVC拦截器详解:从入门到精通 今日目标 能够编写拦截器并配置拦截器 1.拦截器【理解】 1 拦截器介绍 1.1 拦截器概念和作用 拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方…

上海亚商投顾:创业板指反弹大涨1.26% 核污染概念股午后全线走强

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 三大指数今日集体反弹,沪指午后冲高回落,创业板指盘中涨超2%,尾盘涨幅也有所收…

Electron学习3 使用serialport操作串口

Electron学习3 使用serialport操作串口 一、准备工作二、 SerialPort 介绍1. 核心软件包(1) serialport(2) serialport/stream(3) serialport/bindings-cpp(4) serialport/binding-mock(5) serialport/bindings-interface 2. 解析器包3. 命令行工具 三、创建一个demo程序1. 创建…

元类(metaclass)

目录 一、引言 二、什么是元类 三、为什么用元类 四、内置函数exec(储备) 五、class创建类 5.1 type实现 六、自定义元类控制类的创建 6.1 应用 七、__call__(储备) 八、__new__(储备) 九、自定义元类控制类的实例化 一十、自定义元类后类的继承顺序 十一、练习 p…

Go1.19 排序算法设计实践 经典排序算法对比

详解经典排序算法 01 为什么要学习数据结构与算法 抖音直播排行榜功能 案例 规则:某个时间段内,直播间礼物数TOP10房间获得奖励,需要在每个房间展示排行榜解决方案 •礼物数量存储在Redis-zset中,使用skiplist使得元素整体有序 •…

ImportError: cannot import name ‘SQLDatabaseChain‘ from ‘langchain‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

第三方检测检验实验室信息化建设

检测公司配置先进的信息化管理系统,信息化管理系统采用适宜的、先进的架构,具备开放性、扩展性、前瞻性、安全性等。先期建设按照实验室的规格及整体配套设施,整个实验室信息化系统的结构化数据考虑本地存储,且应考虑高速存储应用…

树莓派自带的GPIO串口输出及输出乱码问题解决方案

可以使用树莓派的UART0进行串口输出,具体连接方法如图所示: 连接后可以使用如下代码发送串口数据: import serial import time# 串口初始化 ser serial.Serial(/dev/serial0, 9600, timeout1) # /dev/serial0 是树莓派上默认的串口设备# 发…

构建 NodeJS 影院预订微服务并使用 docker 部署(04/4)

一、说明 构建一个微服务的电影网站,需要Docker、NodeJS、MongoDB,这样的案例您见过吗?如果对此有兴趣,您就继续往下看吧。 我们前几章的快速回顾 第一篇文章介绍了微服务架构模式,并讨论了使用微服务的优缺点。第二篇…

Dataset类实践

Dataset类实践 蚂蚁蜜蜂分类数据集和下载链接https://download.pytorch.org/tutorial/hymenoptera_data.zip Dataset:提供一种方式去获取数据及其lable Q:如何获取每个数据及其lable 重写构造方法和获取标签方法 Q:告诉我们总共有多少数据 …

最新域名和子域名信息收集技术

域名信息收集 1.WHOIS查询 WHOIS是一个标准的互联网协议,可用于收集网络注册信息、注册域名﹑IP地址等信息。简单来说,WHOIS就是一个用于查询域名是否已被注册及注册域名详细信息的数据库(如域名所有人、域名注册商)…

OLED透明屏水波纹效果:打造独特的显示体验

OLED透明屏水波纹效果是一种独特的显示技术,通过模拟水波纹的视觉效果,为用户带来更加生动逼真的观感。 根据市场调研报告显示,OLED透明屏水波纹效果已经在广告、游戏和商业领域得到广泛应用,为品牌提供了新的展示方式&#xff0…

语言基础篇1——Python概述,Python是什么?Python能干什么?

概述 简介 Python,计算机高级语言,读作/ˈpaɪθən/(英音)、/ˈpaɪθɑːn/(美音),意为蟒蛇,Python的logo为两条缠绕的蟒蛇 特点 Python以开发效率高而运行效率低著称 应用领域…