数字出版商不断寻求方法来简化和自动化媒体工作流程,以尽快生成和发布新内容,但不牺牲质量。
添加图片以捕捉文本的精髓可以改善阅读体验。机器学习技术可以帮助您发现这样的图片。”引人注目的图片是吸引观众注意力并与您的故事创造互动的最有效方式之一,但它也必须有意义。”
在上一篇文章中,我们讨论了如何使用亚马逊机器学习(ML)服务来帮助您找到最佳的图片,以放置在文章或电视简介中,而无需键入关键字。在上一篇文章中,您使用亚马逊视觉分析(Amazon Rekognition)从图像中提取元数据。然后,您使用文本嵌入模型生成了元数据的词嵌入,以便以后用于帮助找到最佳的图片。
在本篇文章中,您将了解如何使用亚马逊Titan基础模型快速理解一篇文章,并找到最佳的图片来配合它。这次,您直接从图像生成嵌入。
语义搜索中的一个关键概念是嵌入。嵌入是输入(图像、文本或二者)的数值表示形式,通常以向量的形式存在。当您有许多向量时,您可以测量它们之间的距离,而距离接近的向量在语义上是相似或相关的。
亚马逊基石(Amazon Bedrock)是一项完全托管的服务,提供了来自领先的人工智能公司(包括AI21 Labs、Anthropic、Cohere、Meta、Stability AI和亚马逊)的高性能基础模型(FMs)选择,以及广泛的功能集,帮助您构建生成式人工智能应用程序,简化开发并确保隐私和安全。
亚马逊Titan最近向其收藏中添加了一个新的嵌入模型,Titan多模态嵌入。这个新模型可以用于多模态搜索、推荐系统和其他下游应用。
多模态模型可以理解和分析文本、图像、视频和音频等多种模态的数据。这个最新的亚马逊Titan模型可以接受文本、图像或二者。这意味着您可以使用同一模型生成图像和文本的嵌入,并使用这些嵌入来计算两者的相似度。
解决方案概述
在下面的屏幕截图中,您可以看到如何获取一篇迷你文章,执行搜索,并找到与文章相关的图片。在这个例子中,您拿到了一个描述Werner Vogels戴着白色围巾在印度周游的句子。该句子的向量在语义上与Werner戴围巾的图片的向量相关,因此在这次搜索中被返回为前几个图片。
在较高层次上,图像被上传到亚马逊简单存储服务(Amazon S3),并提取其包括图像嵌入在内的元数据。
为了从图像提取文本元数据,您使用名人识别功能和标签检测功能在亚马逊视觉分析中。亚马逊视觉分析利用机器学习自动识别图像和视频中数以万计的知名人物。您可以使用此功能识别图像中的任何名人,并将此元数据存储在亚马逊OpenSearch服务中。标签检测可以找到图像中的对象和概念,就像上面的屏幕截图中,图像下方有标签元数据。
您使用Titan Multimodal Embeddings模型生成图像的嵌入向量,同时也作为可搜索的元数据。
所有的元数据都存储在OpenSearch Service 中,以便在需要查找图像或图片时进行后续搜索查询。
架构的第二部分是提交一篇文章以找到这些新投入的图像。
当提交文章时,需要将文章提取和转换为OpenSearch Service的搜索输入。您使用Amazon Comprehend来检测文本中可能是潜在名人的任何姓名。您会对文章进行总结,因为您可能只选择一到两张图片来捕捉文章的精髓。生成文本摘要是确保嵌入向量捕捉到故事的要点的好方法。为此,您使用Amazon Titan Text G1 – Express模型,并使用“请提供以下文本的摘要。不要添加任何未在文本中提及的信息”作为提示。通过摘要文章,您使用Amazon Titan Multimodal Embeddings模型生成摘要文章的嵌入向量。嵌入模型还有一个最大标记输入计数,因此总结文章对于确保尽可能多地捕获嵌入中的信息非常重要。简单来说,标记是一个单词、子词或字符。
然后,使用文章中的姓名和嵌入向量对OpenSearch Service进行搜索,以检索具有给定名人的语义相似图像。
作为用户,您只是使用文章作为输入来搜索图片。
演练
以下图示向您展示了实现此用例的架构。
以下步骤详细介绍了启用语义图像和名人搜索的一系列操作(图示中所示)。
- 您将图像上传到Amazon S3存储桶。
- Amazon EventBridge监听此事件,然后启动AWS Step Functions步骤。
- Step Functions步骤采取Amazon S3图像详细信息,并并行运行三个操作:
- 调用Amazon Rekognition的DetectLabels API以提取对象元数据
- 调用Amazon Rekognition的RecognizeCelebrities API以提取已知名人
- AWS Lambda函数将图像调整大小为ML嵌入模型所接受的最大尺寸,并直接从图像输入生成嵌入向量。
- Lambda函数然后将图像对象元数据和名人名称(如果存在),以及嵌入向量作为k-NN向量插入到OpenSearch Service索引中。
- Amazon S3托管一个简单的静态网站,由Amazon CloudFront分发。前端用户界面(UI)允许您使用Amazon Cognito进行身份验证来搜索图像。
- 您使用UI提交一篇文章或一些文本。
- 另一个Lambda函数调用Amazon Comprehend来检测文本中的任何姓名作为潜在名人。
- 该函数然后概述文本,使用Titan Text G1 – Express获取文章的要点。
- 该函数使用Amazon Titan Multimodal Embeddings模型生成摘要文章的嵌入向量。
- 然后,该函数使用OpenSearch Service图像索引搜索与名人名称匹配以及使用k最近邻和余弦相似度的向量使用带评分脚本的精确k-NN。
- Amazon CloudWatch和AWS X-Ray为您提供了关于端到端工作流的可观察性,以便在出现任何问题时向您发出警报。
以下图片展示了Step Functions工作流的可视化工作流设计器。
这是嵌入的一个示例:
{"Embedding_Results": [-0.40342346, 0.073382884, 0.22957325, -0.014249567, 0.042733602, -0.102064356, 0.21086141, -0.4672587, 0.17779616, 0.08438544, -0.58220416, -0.010788828, -0.28306714, 0.4242958, -0.01655291,....
上面的数字数组是以一种可以对文本或图像对象进行计算和功能操作的形式来捕捉其含义。
嵌入具有高维度,从几百到几千维不等。该模型的维度为1,024,即上面的数组将有1,024个元素,它们捕捉了给定对象的语义。
多模态嵌入与文本嵌入
我们讨论了两种选项来实现语义图像搜索,主要区别在于如何生成图像的嵌入。在我们的上一篇文章中,您可以从文本元数据中生成一个嵌入,该元数据是使用Amazon Rekognition提取的。在本文中,您使用Titan多模态嵌入模型,可以直接生成图像的嵌入。
在UI中进行快速测试,并对这两种方法进行查询,你会发现结果明显不同。查询文章的示例是”Werner Vogels loves wearing white scarfs as he travels around India.”。
多模态模型的结果评分更高。我们提交的文章中存在“scarf”这个词,嵌入已经识别出来了。
在UI中,您可以看到由Amazon Rekognition提取的元数据,而元数据中并不包含“scarf”一词,因此从图像中丢失了某些信息,可以推断出图像嵌入模型没有丢失,因此多模态模型可能在使用场景上具有优势。使用Amazon Rekognition,您可以在创建嵌入之前过滤图像中检测到的对象,从而可以有其他适用的使用案例,根据您的期望结果选择更合适的方式。
以下图片展示了使用Amazon Titan多模态嵌入模型的结果。
以下图片展示了使用Amazon Titan文本嵌入模型,使用Amazon Rekognition提取的元数据生成嵌入的结果。
先决条件
执行此步骤,您必须具备以下先决条件:
- 一个AWS账户
- AWS Serverless Application Model命令行界面(AWS SAM CLI)
- 解决方案需要使用AWS SAM CLI进行部署。
- 确保使用最新版本的AWS SAM CLI。
- Docker
- 解决方案使用AWS SAM CLI选项在容器内进行构建,以避免本地依赖的需求。您需要Docker来实现这个目标。
- Node
- 这个解决方案的前端是一个React Web应用程序,可以在本地使用Node运行。
- npm
- 为了在本地运行Web应用程序或构建它以进行远程部署,需要安装运行所需包的npm。
构建和部署全栈应用程序
-
克隆仓库
git clone https://github.com/aws-samples/semantic-image-search-for-articles.git
-
切换到新克隆的项目目录。
cd semantic-image-search-for-articles
-
运行npm install以下载运行应用程序所需的所有软件包。
npm install
-
运行一个部署脚本,按顺序运行一系列脚本,它将执行”sam build”,”sam deploy”,更新配置文件,并将Web应用程序文件托管在Amazon S3中,以便通过Amazon CloudFront提供服务
npm run deploy
-
脚本的最终输出之一是Amazon CloudFront URL,您将使用该URL访问应用程序。您必须在AWS管理控制台中创建一个新用户进行登录。记下稍后使用的URL。
以下截图显示脚本如何使用AWS SAM部署您的堆栈,并输出您可以使用的Amazon CloudFront URL来访问应用程序。
创建新用户以登录应用程序
- 转到Amazon Cognito控制台并选择您的新的用户池。
- 创建一个带有新密码的新用户。
登录并测试Web应用程序
- 找到Amazon CloudFront URL以进入登录页面。这在前面的截图中的最后一行中显示。
- 输入您的新的用户名和密码组合进行登录。
- 使用UI上传一些样本图像。
- 选择选择文件,然后选择上传。 注意: 您也可以通过将文件添加到/uploads文件夹中批量直接上传到S3存储桶。
- 撰写或复制粘贴一篇文章,然后选择提交以查看图像是否按预期顺序返回。
清理
为了避免未来产生费用,请删除资源。
- 找到使用该解决方案部署的S3存储桶,并清空该存储桶。
- 转到CloudFormation控制台,选择之前通过部署脚本部署的堆栈,并删除该堆栈。
结论
在本文中,您将了解如何使用Amazon Rekognition、Amazon Comprehend、Amazon Bedrock和OpenSearch Service从图像中提取元数据,然后使用ML技术自动发现与名人和语义搜索密切相关的内容。这在出版行业中尤为重要,因为在快速获得新内容并将其发布到多个平台上的情况下,速度至关重要。
作为下一步,将解决方案部署到您的AWS账户并上传一些自己的图像,以测试语义搜索如何为您工作。请在下面的评论中告诉我您的一些反馈意见。