在这篇文章中,将介绍如何基于向量数据库,构建一个电商产品图片目录的向量相似度查询解决方案。将通过亚马逊云科技Amazon SageMaker、pgvector向量数据库扩展插件、小型语言模型助力AI图片搜索能力,从而在产品目录中查找到最符合条件的产品,提高查询的准确性、效率性和便利性。该方案尤其适合垂直行业使用,可覆盖电商、游戏、短视频,甚至法律、医疗、制造业、人力资源等场景。
构建背景介绍
各行各业都在探索AIGC创新方法,希望通过利用生成式AI的巨大潜力,来增强用户体验,探索垂直行业的无限可能。
在游戏美术、电商产品设计、建筑/家装设计等行业,AIGC正在彻底改变图片方向创作过程。通过大数据分析用户喜好和行为数据,人工智能算法可以生成独特的游戏场景和角色、服装款式和设计、家装内饰和风格,将个性化和成本效益提升到一个新的水平。且通过图像识别,对最终生成的图片进行审查,实现对结果的鉴黄鉴暴功能。
视频网站、短视频平台同样可以从AI能力中获益,尤其是在视频相似度搜索和推荐方面,AI算法可以分析用户行为,并推荐与他们的兴趣点密切相关的视频内容,从而提升用户的整体观感体验,从而增加用户粘性。此外,AI驱动的图像和视频托管服务可以提供图像去重、图像相似度搜索和文本与图像相似度搜索等功能,从而实现搜索精度和搜索体验的整体改善。
生物信息行业也是AI应用探索的另一领域。在分子和DNA序列分类相似度搜索的应用,使得AI在药物发现和药物研究中发挥了关键作用,大大提升了药物研发的速度。无论是识别潜在的候选药物还是DNA序列分析,AI都被证明是一种宝贵的工具。
在这篇文章中,将分享如何构建一个类似的产品目录相似度搜索解决方案。该方案主要集成Amazon SageMaker和亚马逊关系数据库服务(Amazon RDS)PostgreSQL,而PostgreSQL通过启用pgvector扩展插件实现了数据的向量存储能力。
Pgvector作为PostgreSQL的开源扩展插件,它提供了ML生成式向量的存储和搜索功能。还同时支持精确识别和近似最近邻算法识别(KNN)。它的设计初衷就是用于与PostgreSQL的其他功能无缝集成,包括了索引和查询等。甚至可以使用pgvector存储来自AWS Bedrock的ML生成式向量分片(目前Bedrock还处于限量预览版阶段)。
综述,无论属于哪个行业,无论是以上提到的电商、游戏、视频服务、生命科学,还是法律、医疗、制造业、人力资源等行业,本篇文章都将为相似度搜索提供有价值的见解。
Vector embeddings概述
Embeddings(向量化表示/向量嵌入)是指将文本、图像、视频或音频等对象转换成高维向量空间中的数字表示的过程。该技术是通过使用机器学习算法实现,理解数据的含义和上下文的语义关系、句法关系。可以将生成的Embeddings用于各种应用程序,例如信息检索、图像分类、自然语言处理等等。
Vector embeddings之所以变得越来越受欢迎,是因为它们能够以易于计算和扩展的方式捕捉对象之间的语义含义和相似之处。下图直观地表示了Word Embedding(词语向量化表示)的特征形态。
生成Embeddings后,可以在向量空间内执行相似度搜索。基于Embedding的相似度搜索能在许多行业的应用中受益,如电子商务、推荐系统和欺诈检测等。例如,系统可以识别产品或交易之间的数学相似之处,以创建相关的产品推荐,或识别潜在的欺诈活动。
使用pgvector实现高效的Embedding相似度搜索
通过使用pgvector扩展插件,PostgreSQL可以有效地执行Vector Embeddings的相似度搜索,为企业提供快速查询的解决方案。
要为本文场景的产品目录生成Embedding向量化表示数据,可以使用Amazon SageMaker等机器学习服务,可轻松训练和部署机器学习模型,包括生成文本数据的Embedding模型。
在本文部署执行过程中,为了快速地呈现实验效果,使用Hugging Face DLCs(深度学习容器)和Amazon SageMaker Python SDK来创建一个实时推理节点,运行All MiniLM-L6-v2(句子转换器模型),生成文档的embedding数据。使用pgvector扩展插件将Vector Embeddings存储在RDS for PostgreSQL数据库中。然后,使用pgvector的相似度搜索功能,在产品目录中查找最符合客户搜索查询意图的商品,并返回图片结果。
在上述过程中,pgvector的索引功能将进一步增强搜索优化。通过对向量数据进行索引,可以加快搜索过程,并最大限度地减少识别最近的邻域对象所需的时间。深入研究了pgvector插件如何与PostgreSQL协同,为向量数据相似度搜索提供了一种简化而有效的解决方案。
pgvector扩展插件的安装与使用验证
pgvector扩展插件的安装
首先,创建并连接到RDS for PostgreSQL V15.2或以上版本的数据库。然后可以启用创建pgvector插件,并支持您可以在数据库中启动vector embbeding的存储并根据需要进行搜索(Amazon RDS for PostgreSQL数据库自15.2版本起支持pgvector扩展插件,用户可以通过SQL规范语句调用pgvector插件)。
Pgvector扩展插件的使用验证
本文实验中,使用sentence-transformers/all-MiniLM-L6-v2模型来生成vector embeddings数据。它将句子和段落映射到384维的密集向量空间,因此在解决方案中使用它来表示向量大小。
代码示范:创建一个用于存储三维向量的测试表,插入一些样本数据,使用欧几里德距离(也称为L2距离)进行查询,然后删除测试表:
电商产品图片相似度搜索方案
基于上述如何使用pgvector构建向量相似度搜索的演示,接下来开始使用pgvector为电商的产品目录,构建搜索解决方案。以下将构建一个搜索系统,让买家通过描述来查找类似的商品。
接下来将逐步演示如何执行产品相似度查询。将在SageMaker实例上使用Hugging Face预训练的模型,为产品描述生成vector embeddings数据;使用Amazon RDS for PostgreSQL并集成pgvector扩展插件,对vector embeddings数据进行存储和相似度搜索。
方案步骤
1. 在AWS SageMaker notebook实例中,创建Jupyter notebook,由SageMaker负责管理创建实例和相关资源。
2. 部署预先训练的Hugging Face sentence transformer model(句子转换器模型)到SageMaker,以便下一步利用实时推理和数据转换,生成物品描述的embeddings数据。
3. 使用AWS SageMaker实时推理为产品目录描述生成Embeddings数据。
4. 使用AWS RDS for PostgreSQL来存储原始产品描述和对应的文本Embeddings。
5. 使用AWS SageMaker实时推理将需要查询的文本描述也生成Embedding数据。
6. 使用AWS RDS for PostgreSQL的pgvector插件,执行相似度搜索。
方案架构图
前置条件
若要完成本Demo,您需要拥有一个亚马逊云科技账户,并具有相应的AWS IAM权限,以启动提供的Amazon CloudFormation模板。
解决方案部署
使用CloudFormation Stack来部署这个解决方案。该堆栈会自动在您的账户内创建所有必要的资源,包括以下资源:
- 网络组件,包括VPC、子网、路由,安全组等资源。
- 一个SageMaker Notebook实例,用于在Jupyter Notebook中运行Python代码。
- 与Notebook实例关联的IAM角色。
- 一个RDS for PostgreSQL实例,用于存储和查询商品目录的Embedding数据。
解决方案部署开始,请完成以下步骤:
1. 使用您的IAM用户名和密码登录亚马逊云科技管理控制台。
2. 选择“启动堆栈Launch Stack”,并在新的浏览器标签页中打开。
3. 选择默认值,点击“Next”,在下一页选中复选框以确认IAM资源的创建,选择“Create Stack”。
4. 等待堆栈创建完成,状态CREATE_COMPLETE。您可以在“Event”选项卡上检查堆栈创建过程中的状态。
5. 在“Outputs”选项卡上,打开NotebookInstanceUrl。此链接将打开Jupyter Notebook,来完成剩下的部分。
6.打开笔记本rdspg-vector.ipynb,然后按顺序逐个在所有单元格中运行代码。
在以下部分中,我们将检查Jupyter Notebook中几个重要单元格的部分代码,以演示解决方案。
演示数据获取
使用Zalando Research FEIDEGGER数据,该数据由8,732张高分辨率的时尚图片和五张德语文字注释组成,每张都是由单独的用户生成的。我们已经使用Amazon Translate将每条着装描述从德语翻译成英语。代码如下所示:
SageMaker模型托管与向量化表示数据生成
在本节中,将预先训练的Hugging Face all-MiniLM-L6-v2句子转换器模型托管到SageMaker中,并为产品目录生成384维向量化表示数据(Embedding)。步骤如下:
1. 定义SageMaker的执行角色,工作S3桶和建立SageMaker。
2. 指定模型配置参数,部署模型推理节点。
3. 调用SageMaker实时推理节点生成Embeddings,结果将显示给定输入文本的384维向量的维度。
4. 使用SageMaker推理,为我们的产品目录描述生成384维的向量化表示数据(embedding)。
PostgreSQL与pgvetor插件的存储与检索
连接到RDS for PostgreSQL,使用向量数据类型创建产品表并提取数据。然后,为相似度搜索创建索引,以查找最近的L2距离邻域向量对象。
使用pgvector插件,在RDS for PostgreSQL执行产品图片的最相似图片搜索。
大家可以修改查询用的描述文本,或Limit参数,尝试不同图片结果和输出图片的数量。本文的查询文本:“green sleeveless summer wear”,Limit参数3,返回产品ID(Product Item Id)分别为:2328、5117、479。
现在,向量相似度搜索功能已为您返回最接近的匹配结果。
方案资源清理
在Jupyter notebook单元中运行以下代码以删除模型和节点。
在CloudFormation stack中,清理本Demo中创建的Stack,清理剩余的资源。
结论
将AWS SageMaker,AWS RDS for PostgreSQL与pgvector开源扩展集成,配合小型语言模型(MiniLM),可以提供基于Vector Embedding的高精度AI图片智能数据检索。可以应用于电商产品目录的相似度搜索,优化查询体验。通过使用机器学习模型和Vector Embedding,企业可以提高相似度搜索、个性化推荐和欺诈检测的准确性和速度,最终提高用户满意度和更个性化的体验。
Pgvector的使用为大型多模态数据集(图片、文本)的查询提供了可扩展性,并且能够无缝集成PostgreSQL的存储功能。AWS SageMaker和pgvector的组合可在动态和数据驱动世界中取得更好的应用效果。
随着工作负载的持续发展,PostgreSQL在向量数据库方向的可扩展性,使开发人员能够在垂直行业构建新的数据类型和索引机制。随着AI/ML创新的不断涌现,您未来可以在查询终端集成LLM(大语言模型),进一步形成用户友好的智能查询ChatBot,构建新的企业级智能化应用程序。