使用 Milvus 和 Streamlit 搭建多模态产品推荐系统

3dd2bfe26836a5a718e427ff80aee678.png7537eb3d7b7145d105a79510feaf164e.png

我们可以使用 Milvus 搭建多模态 RAG 应用,用于产品推荐系统。用户只需简单上传一张图片并输入文字描述,Google 的 MagicLens 多模态 Embedding 模型就会将图像和文本编码成一个多模态向量。然后,使用这个向量从 Milvus 向量数据库中找到最相似的亚马逊产品。

🎨🔍 Milvus 魔法:图像搜索和智能购物!

您是否曾经希望只需上传一张图片并简单描述你想要的东西就能找到对应的产品?我们现在可以帮您实现这个想法!🛍️✨

以下是我们搭建的应用示例的使用流程:

  1. 📸 拍摄一张照片并输入您想要搜索的内容

  2. 🧙♂️ Milvus 会将您的输入转换成一个特殊的"多模态向量"(很神奇吧?)

  3. 🕵️♀️ 这个输入向量将扮演超级侦探的角色,在 Milvus 向量数据库中进行相搜索

  4. 🎉 随后,系统就能够根据您的图片和描述在亚马逊上找到对应的产品

本文将展示如何使用 Milvus 搭建多模态 RAG 应用。

01.

多模态产品推荐系统使用的技术

Google DeepMind 的 MagicLens 是一个多模态 Embedding 模型,使用双编码器架构基于 CLIP(OpenAI 2021)或 CoCa(Google Research 2022)模型处理文本和图像。MagicLens 通过将训练得到的权重(weights)整合到同一个向量空间中,实现对多种检索任务的支持,包括以图搜图和以文本搜图。该模型基于 3670 万个三元训练,能够执行图像到图像、文本到图像和多模态文本-图像混合的检索任务,且相较于此前的模型显著减小了模型大小。

OpenAI GPT-4o 是一个生成式多模态大语言模型,集成了文本、图像和其他数据类型,突破了传统的语言模型。先进的 AI 技术能够更深层次地理解和处理复杂信息,提高了准确性和上下文感知能力。该模型支持自然语言处理(NLP)、计算机视觉等多种应用。

Milvus 是一款开源的分布式向量数据库,可用于存储、索引和搜索向量,十分适合生成式 AI 应用。凭借其混合搜索、元数据过滤、重排(Reranking)等功能,以及能够高效处理万亿级向量数据的能力,Milvus 是 AI 和 ML 应用的首选解决方案。您可以直接本地运行 Milvus 可以本地运行或部署集群版 Milvus,抑或是使用全托管的 Milvus 服务——Zilliz Cloud。

Streamlit 是一个开源的 Python 库,简化了创建和运行 Web 应用的过程。Streamlit 能够助力开发人员使用简单的 Python 脚本构建和部署仪表板(dashboard)、数据报告和简单的机器学习接口,免去深入学习 CSS 或 JavaScript 框架(如 Node.js)等 Web 技术的麻烦。

02.

准备数据

本文示例使用的数据来自 Amazon Reviews 2023 数据集。原始数据中包含 5400 万条用户评论,涵盖 4800 万件商品,分属于 33 个类别(如电器、美妆、服装、运动、户外以及“未知”等类别)。

我们将只使用上述数据集中的 5000 件商品数据,按类别均匀抽样。您可以通过运行 download_images.py 来下载图片。

$ python download_images.py

每行产品数据包含商品元数据(如:类别名称、平均用户评分)以及产品缩略图和大图的 URL。

本文示例仅针对每个产品的大图生成向量。

03.

MagicLens 设置指南

MagicLens 是由 Google DeepMind 开发的图像检索模型。本指南介绍如何设置环境并下载 MagicLens 的模型权重。更多信息,请前往 MagicLens 的 GitHub 仓库。

环境设置:

1.使用 Conda 创建环境:

$ conda create --name magic_lens python=3.9

2.启动环境:

$ conda activate magic_lens

3.克隆 Scenic 仓库:

$ git clone https://github.com/google-research/scenic.git

4.打开 Scenic 目录:

$ cd scenic

5.安装 Scenic:

$ pip install

6.安装 CLIP 依赖:

$ pip install -r scenic/projects/baselines/clip/requirements.txt

7.安装 Jax:

如果您使用 GPU,您还需要安装对应的 GPU 版本 Jax。更多信息,请阅读 Jax 文档。

以下为使用特定 CUDA 版本安装的示例(仅 Linux 系统):

使用 CUDA 12 安装:

$ pip install --upgrade "jax[cuda12_pip]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html

使用 CUDA 11 安装:

$ pip install --upgrade "jax[cuda11_pip]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html

本地下载模型权重

1.返回主文件夹:

$ cd ..  This will take you back to the main directory where you cloned the demo.

2.下载模型(可能需要填写验证信息):

$ gsutil cp -R gs://gresearch/magiclens/models ./

04.

创建 Milvus Collection 并存储向量

本教程使用 Milvus Lite 以及 schema-less Milvus Client。

创建 Collection、将图片编码为向量,并运行 index.py 在 Milvus 中加载向量数据。

$ python index.py

此步骤将每张图片编码为一个 768 维的向量。对于示例中的每个产品,图像向量及其相关的产品元数据将被保存到一个名为 “cir_demo_large” 的 Milvus Collection 中,并使用 AUTOINDEX (HNSW) 索引。

05.

在 Milvus 中创建索引并执行搜索

当您进行图片搜索时,Milvus 将使用 COSINE 向量距离搜索 top_k = 100 个最接近的图片向量。

Milvus 会自动将 top_k 结果按降序排列。这是因为两个向量的 COSINE 距离值越大,这两个向量越相似。

06.

运行 Streamlit Server 实现前端界面

更新本地文件 cfg.py,使用您实际的图片和模型权重路径作为路径名称。

在终端输入以下指令,运行应用;

$ streamlit run ui.py
  1. 使用 Streamlit 应用:

  2. 在终端输入以下指令,运行应用

$ streamlit run ui.py

3.   使用 Streamlit 应用:

  • 上传用于产品搜索的图片。

  • 输入文字描述。

  • 点击 "搜索" 从 Milvus 向量数据库中查找相似产品。

  • 点击 "Ask GPT" 获取 AI 产品推荐。

6f317d934f54a2c21e786cd7e077fe8d.png

本文示例中的应用工作流程如下:

  • 搜索功能:使用多模态 Embedding 模型 MagicLens 将您的查询图片和文本转换为向量。此时使用的模型与此前批量将产品图片转换为向量并存储在 Milvus 向量数据库中的模型相同。然后 Milvus 执行近似最近邻(ANN)搜索,查找与您输入向量最接近的 top_k 个产品图片向量。

  • Ask GPT 功能:调用 OpenAI 的 GPT-4o mini 多模态生成式模型,从搜索结果中取出前 25 张图片,将它们放入 Prompt 中,并传入模型。然后 GPT-4o mini 将选择最推荐的产品图片并提供推荐理由。

6a9bac074c42c17c8c31741bc6d208ae.png

参考链接

(1)多模态图像检索 Bootcamp:

https://github.com/milvus-io/bootcamp/tree/master/bootcamp/tutorials/quickstart/apps/cir_with_milvus

(2)使用 Reranking 的多模态 RAG 推荐系统 Bootcamp:

https://github.com/milvus-io/bootcamp/tree/master/bootcamp/tutorials/quickstart/apps/multimodal_rag_with_milvus

(3)Google MagicLens 模型:

https://github.com/google-deepmind/magiclens

(4)介绍本示例原理的视频:

https://youtu.be/uaqlXRCvjG4?si=e83DnUsLZvVnWt-0&t=51

Source: https://zilliz.com/blog/build-multimodal-product-recommender-demo-using-milvus-and-streamlit

推荐阅读

8c940c12c887f8615c258a052514c4dc.png

1589398a21e36ac0ca1ba15f08ad8b95.png

33de4495eb9be157ba7b1e2006730642.png

df3a367ba49558d919fd6faab97af832.png

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

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

相关文章

JVM——Java虚拟机内存初识(面经篇之JVM内存)

网上说的太详细了,真不利于我的初识和记忆, 例如:堆区的young, old,讲了一大堆,结果,我连这些区域是干什么的都不知道,存储什么的都不知道, 害得是我自己总结: 堆&#x…

JavaWeb【day08】--(MySQL-Mybatis入门)

数据库开发-MySQL 1. 多表查询 1.1 概述 1.1.1 数据准备 SQL脚本: #建议:创建新的数据库 create database db04; use db04; ​ -- 部门表 create table tb_dept (id int unsigned primary key auto_increment comment 主键ID,name v…

各类AI工具编程能力测试对比

各类AI工具编程能力对比 现在各类AI工具火爆,擅长各类问题解决,闲来无事,验证下各类AI工具的编程能力如何。问题:c 实现杨辉三角,并main函数测试 kimi 对话窗口输入问题,得到了c的完整程序: …

通过redis-operator 来部署 Redis Cluster 集群

安装 Redis Operator 首先,需要安装 redis-operator。可以通过 Helm 或直接应用 YAML 文件来安装。 使用 Helm 安装: helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/ helm install redis-operator ot-helm/redis-operator --…

B树和B+树

B树和B树是两种用于数据库和文件系统中的自平衡树数据结构,它们可以保持数据有序,同时支持快速的查找、插入和删除操作。下面是它们的基本介绍: B树(B-Tree) 定义:B树是一种平衡的多路搜索树,…

数据分析新星,DuckDB与Pandas处理大数据速度对比

大家好,Pandas库众所周知,适合数据分析新手入门,但在大数据面前却显得处理缓慢。相比之下,开源的DuckDB以其卓越的列式存储性能,在大数据处理上速度惊人,速度远超Pandas。而且,DuckDB配备了Pyth…

JS设计模式之“语言之魂” - 原型模式

前言 当我们学习JavaScript的时候,经常会听到原型(prototype)、原型链(prototype chain)和原型模式(prototype pattern)这些概念,它们之间有什么关联呢?怎么样才能使用好原型模式呢…

基于yolov8的西红柿检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的西红柿检测系统是一种利用深度学习技术的创新应用,旨在通过自动化和智能化手段提高西红柿成熟度检测的准确性和效率。该系统采用YOLOv8算法,该算法是深度学习领域中的先进目标检测模型,具备实时检测和多目标识别的…

OpenGL Texture C++ 预览Camera视频

OpenGL是一个图形API,并不是一个独立的平台。包含了一系列可以操作图形、图像的函数。基于Texture纹理强大的功能,本篇文章实现Android OpenGL Texture C 预览Camera视频流的功能。 项目github地址:https://github.com/wangyongyao1989/WyFFm…

第T10周:数据增强

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)** 在本教程中,你将学会如何进行数…

iOS——APP启动流程

APP启动 APP启动主要分为两个阶段:pre-main和main之后,而APP的启动优化也主要是在这两个阶段进行的。 main之后的优化:1. 减少不必要的任务,2.必要的任务延迟执行,例如放在控制器界面等等。 APP启动的大致过程&#…

云原生技术:‌引领数字化转型的新浪潮

云原生技术:‌引领数字化转型的新浪潮 在数字化转型的时代背景下,‌企业面临着前所未有的挑战与机遇。‌随着云计算技术的飞速发展,‌云原生技术作为一种新型的应用程序开发和部署方式,‌正逐步成为构建高可用、‌可扩展应用程序…

景联文科技:专业视频标注服务助力计算机视觉应用升级

视频标注是指对视频内容进行分析,并在视频中的特定对象、行为或事件上添加标签的过程。 视频标注包括: 1. 对象检测与跟踪 •对象检测:在每一帧中识别并定位特定的对象,如人、车、动物等。 •对象跟踪:跟踪这些对象…

使用html+css+layui实现动态表格组件

1、概述 需求,表格第一列指标可配置通过后端api传进来,表格显示数据以及鼠标触摸后气泡弹出层提示信息都是从后端传过来,实现动态表格的组件!!实现效果如下: 接口标准数据格式如下: {"da…

Unity TMP (TextMeshPro) 更新中文字符集

TMP更新中文字符集 1 字符集缺失说明2 字体的字符表2.1 字符表更新模式:动态2.2 字符表更新模式:静态 3 更新字符集步骤3.1 打开纹理更新面板3.1 导入文本文件3.3 关于警告处理 4 修改TMP默认字体设置 1 字符集缺失说明 使用TMP显示中文需要用到中文字体…

SprinBoot+Vue问卷调查微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

uniapp / uniapp x UI 组件库推荐大全

在 uniapp 开发中,我们大多数都会使用到第三方UI 组件库,提起 uniapp 的UI组件库,我们最常使用的应该就是uview了吧,但是随着日益增长的需求,uview 在某些情况下已经不在满足于我们的一些开发需求,尽管它目…

单例模式的总结

常规模式:有属性/构造方法/普通方法,也可以在类中执行主方法,也可以在test类中执行主方法 单例模式是什么? 单例模式:类只有1个对象;保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式是在内…

Linux平台屏幕|摄像头采集并实现RTMP推送两种技术方案探究

技术背景 随着国产化操作系统的推进,市场对国产化操作系统下的生态构建,需求越来越迫切,特别是音视频这块,今天我们讨论的是如何在linux平台实现屏幕|摄像头采集,并推送至RTMP服务。 我们知道,Linux平台&…

pdf压缩到指定大小需要怎么压缩?2024快速进行文件压缩的软件合集

pdf压缩到指定大小需要怎么压缩?2024快速进行文件压缩的软件合集 当你需要将PDF文件压缩到指定的大小时,选择适当的软件和方法可以帮助你在保持文件质量的同时,尽可能地减小文件体积。以下是五款可以帮助你快速压缩PDF文件并控制其大小的软件…