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

news2024/11/15 18:58:16

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.coloradmin.cn/o/2105892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

负载均衡 Ribbon 与 Fegin 远程调用原理

文章目录 一、什么是负载均衡二、Ribbon 负载均衡2.1 Ribbon 使用2.2 Ribbon 实现原理 (★)2.3 Ribbon 负载均衡算法 三、Feign 远程调用3.1 Feign 简述3.2 Feign 的集成3.3 Feign 实现原理 (★) 一、什么是负载均衡 《服务治理:Nacos 注册中心》 末尾提到了负载均…

简单的Linux Ftp服务搭建

简单的Linux FTP服务搭建 1.需求 公司有一个esb文件传输代理,其中我们程序有文件传输功能,需要将本地文件传输到esb文件代理服务器上,传输成功之后发送http请求,告知esb将固定文件进行传输到对应外围其他服务的文件目录中&#…

【高阶数据结构】秘法(二)——图(一):图的基本概念和存储结构

前言: 今天我们要讲解的是数据结构中图的部分,这部分在我们实际生活中也是经常会碰到的,同时这部分也是数据结构中比较有难度的部分,这部分内容我会把它分为多章来进行讲解,今天我们先来讲解一下图的基本概念和存储结构…

Codeforces Round 920 (Div. 3)(A,B,C,D)

A 在二维坐标轴上有一个正方形&#xff0c;给你一个正方形的四个顶点坐标&#xff0c;求面积 知道一个边长&#xff0c;平方即可 for(int i0;i<4;i)x[i]x1; Arrays.sort(x); //1122 kMath.abs(x[2]-x[1]); System.out.println(k*k); B 操作1、2是添加和修改&#xff0c;操…

Windows系统下的Spark环境配置

一&#xff1a;Spark的介绍 Apache Spark 是一个开源的分布式大数据处理引擎&#xff0c;它提供了一整套开发API&#xff0c;包括流计算和机器学习。Spark 支持批处理和流处理&#xff0c;其显著特点是能够在内存中进行迭代计算&#xff0c;从而加快数据处理速度。尽管 Spark …

【专题】2024年8月中国企业跨境、出海、国际化、全球化行业报告汇总PDF合集分享(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p37584 在全球化浪潮汹涌澎湃的当下&#xff0c;中国企业积极探索海外市场&#xff0c;开启了出海跨境的新征程。本报告合集旨在全面梳理出海跨境全球化行业的发展态势&#xff0c;涵盖多个领域的深度洞察。 从游戏、快消品、医疗器…

Python行结构(逻辑行、物理行、显式拼接行、隐式拼接行、空白行)

Python行结构 &#xff08;逻辑行、物理行、显式拼接行、隐式拼接行、空白行&#xff09; 本文目录&#xff1a; 零、时光宝盒 一、Python PEP8 编码行规范 1.1、Maximum Line Length 行的最大长度 1.2、在二元运算符之前应该换行吗&#xff1f; 二、Python行结构 2.1、物…

电子设计-基础3-电感与二极管

电子设计-基础3-电感与二极管 电感电感简介电感的发展历史电感的原理结构电感的性质&#xff1a; 电流惯性电感性质的演示 电感的分类常用的几种电感&#xff1a;一体成型电感一、定义与结构二、特点 三、工作原理四、应用领域 五、优缺点屏蔽电感 CD系列电感&#xff1a;多用于…

网站安全问题整改

网站安全、政务云、第三方安全检测机构等评测出来的网站web安全问题整改&#xff0c;如果你也正需要做这方面&#xff0c;请联系我吧

【代码随想录训练营第42期 Day50打卡 - dfs入门 - 卡码网 98. 所有可达路径

目录 一、dfs基础 二、模板题 题目&#xff1a;98. 所有可达路径 题目链接 题解&#xff1a;dfs邻接矩阵 三、小结 一、dfs基础 dfs是按照一个方向搜索到尽头再搜索其他方向。怎样实现对其他方向的搜索呢&#xff1f;我们可以通过回溯&#xff0c;撤销最后一步&#xff0c…

JUC-无锁之CAS

问题提出 (应用之互斥) package cn.itcast; import java.util.ArrayList; import java.util.List; interface Account {// 获取余额Integer getBalance();// 取款void withdraw(Integer amount);/*** 方法内会启动 1000 个线程&#xff0c;每个线程做 -10 元 的操作* 如果初始…

2024全国大学省数学建模竞赛C题-优秀论文分析(2023)

​某商超蔬菜类商品动态定价与补货决策研究 摘 要 随着生鲜市场规模的持续扩大&#xff0c;蔬菜零售行业的竞争也愈加激烈。为帮助某商超 改善经营模式&#xff0c;本文基于题目所给数据信息&#xff0c;建立数学模型进行分析&#xff0c;从而制定合理 的蔬菜类商品动态定价与…

ARM发布新一代高性能处理器N3

简介 就在2月21日&#xff0c;ARM发布了新一代面向服务器的高性能处理器N3和V3&#xff0c;N系列平衡性能和功耗&#xff0c;而V系列则注重更高的性能。此次发布的N3&#xff0c;单个die最高32核&#xff08;并加入到CCS&#xff0c;Compute Subsystems&#xff0c;包含Core&a…

C语言函数不同个数、大小形参对执行速度的影响:以Cortex-M3为例从汇编角度分析原因

0 资料&工具 Cortex M3权威指南(中文).pdf keil5&#xff08;用于仿真查看汇编代码、栈变化&#xff09;1 C语言函数不同个数、大小形参对执行速度的影响&#xff1a;以Cortex-M3为例从汇编角度分析原因 C语言中有条不成文的规定&#xff1a;不建议函数的形参数量超过4个…

C8T6超绝模块--LED

C8T6超绝模块–LED 大纲 怎样点亮LED结构体分析代码流程 具体案例 怎样点亮LED 首先不同的芯片的接法不一样&#xff0c;需要自己查看自己的芯片的原理图&#xff0c;我使用的是C8T6&#xff0c;使用的PC13接入的LED 注意看&#xff1a;怎么才能使LED灯亮呢&#xff1f; …

flux 文生图大模型 自有数据集 lora微调训练案例

参考: https://github.com/ostris/ai-toolkit 目前 Flux 出现了 3 个训练工具 SimpleTuner https://github.com/bghira/SimpleTuner X-LABS 的https://github.com/XLabs-AI/x-flux ai-toolkit https://github.com/ostris/ai-toolkit 待支持:https://github.com/kohya-ss/sd-s…

RK3588平台开发系列讲解(显示篇)MIPI详解

文章目录 一、DSI和CSI二、初识MIPI2.1、框架2.2、参数2.3、接口三、设备树下CSI的配置沉淀、分享、成长,让自己和他人都能有所收获!😄 一、DSI和CSI DSI( Display Serial Interface ) :位于处理器和显示模组之间的显示串行接口CSI( Camera Serial Interface ) : 位于…

Linux 安装nodejs环境

文章目录 Node.js简介Node.js的核心特性Node.js的生态系统Node.js的模块系统 部署下载Node.js预编译二进制包上传到Linux服务器并解压配置环境变量验证安装 部署在下边&#xff0c;我先对nodejs进行一些介绍&#xff0c;大家了解一下 Node.js简介 Node.js是一个基于Chrome V8…

计算机毕业设计Spark+PyTorch知识图谱房源推荐系统 房价预测系统 房源数据分析 房源可视化 房源大数据大屏 大数据毕业设计 机器学习

《SparkPyTorch知识图谱房源推荐系统》开题报告 一、选题背景与意义 1.1 选题背景 随着互联网的快速发展和大数据技术的广泛应用&#xff0c;房地产行业特别是房屋租赁市场迎来了前所未有的变革。房源信息的海量增长使得用户在寻找合适的房源时面临巨大挑战。传统的房源推荐…

集成电路学习:什么是IDE集成开发环境

IDE&#xff1a;集成开发环境 IDE&#xff0c;全称“Integrated Development Environment”&#xff0c;即集成开发环境&#xff0c;是一种用于提供程序开发环境的应用程序。它集成了代码编写、分析、编译、调试等多种功能于一体的开发软件服务套&#xff0c;为开发者提供了一个…