MilvusとStreamlitを使ったマルチモーダル商品推薦デモの構築

Milvus Composed Image Retrieval demo](https://github.com/milvus-io/bootcamp/tree/master/bootcamp/tutorials/quickstart/apps/cir_with_milvus)は逆画像検索を紹介し、Milvus Multimodal RAG demoは商品推薦にこの技術を使用している。画像をアップロードし、テキストの指示を入力するだけで、GoogleのMagicLensのマルチモーダル埋め込みモデルは、画像とテキストの両方を単一のマルチモーダルベクトルにエンコードする。そして、このベクトルは、Milvusベクトルデータベースから、最も近いアマゾンの商品を見つけるために使用される。
🎨Milvus Magicの紹介:画像検索とスマートショッピング!***。
写真を見せ、欲しいものを説明するだけで、商品を見つけることができたらと思ったことはありませんか?それが可能になりました!🛍️✨
クールなデモの仕組みはこちら:
1.📸 写真を撮って、探しているものを入力してください。
2.🧙♂️ 私たちのMilvusマジックは、あなたの入力を特別な「マルチモーダルベクトル」に変えます。
3.🕵️♀️ このベクトルは、私たちのミルバスベクトルデータベースを検索するためのスーパースルースになります。
4.🎉 ほら!画像と説明文に一致するAmazonの商品を検索します。
このブログでは、Milvus Multimodal RAG demoの実行方法を紹介します。
マルチモーダル商品レコメンダーに使われる技術
Google DeepMindの MagicLensは、CLIP (OpenAI 2021)またはCoCa(Google Research 2022)のいずれかに基づいてテキストと画像を処理するデュアルエンコーダーアーキテクチャを使用したマルチモーダル埋め込みモデルである。MagicLensは、学習された重みを共通のベクトル空間に融合することで、画像から画像、テキストから画像など、多様な検索タスクをサポートします。MagicLensは、36.7Mトリプレットで訓練され、画像対画像、テキスト対画像、およびマルチモーダルなテキストと画像の組み合わせの検索タスクを実行することができ、大幅に小さいモデルサイズで以前のモデルを凌駕しています。
OpenAIの GPT-4o は、OpenAIによる生成的マルチモーダル大規模言語モデルで、テキスト、画像、その他のデータタイプを単一のモデルに統合し、従来の言語モデルを強化します。この高度なAIは、複雑な情報をより深く理解し処理することで、精度と文脈を認識する能力を向上させます。自然言語処理](https://zilliz.com/learn/A-Beginner-Guide-to-Natural-Language-Processing)からコンピュータビジョンまで、多様なアプリケーションをサポートしています。
Milvus**はオープンソースの分散型ベクトルデータベースであり、生成AIワークロード用のベクトルを格納、インデックス付け、検索する。ハイブリッド検索](https://zilliz.com/blog/a-review-of-hybrid-search-in-milvus) メタデータフィルタリング リランキング を実行し、何兆ものベクトルを効率的に処理する能力により、MilvusはAIおよび機械学習ワークロードに最適な選択肢となっています。Milvusは、ローカル、クラスタ、またはZilliz Cloudでホストすることができます。
Streamlit**は、Webアプリケーションの作成と実行を簡素化するオープンソースのPythonライブラリである。 開発者は、CSSのようなウェブ技術やNode.jsのようなJavaScriptフレームワークの広範な知識を必要とせずに、簡単なPythonスクリプトを使用して、ダッシュボード、データレポート、シンプルな機械学習インターフェースを構築し、デプロイすることができます。
データの準備
このデモのデータはAmazon Reviews 2023 datasetから来ている。このオリジナル・データ・ソースには、家電、美容、衣類、スポーツ、アウトドアのような33のカテゴリーと、追加の "不明 "カテゴリーの4,800万アイテムの5,400万件のユーザー・レビューが含まれている。
私たちは、カテゴリごとに均等にサンプリングすることで、利用可能なデータの5Kアイテムのサブセットを使用します。 download_images.py](https://github.com/milvus-io/bootcamp/blob/master/bootcamp/tutorials/quickstart/apps/cir_with_milvus/download_images.py) を実行して画像をダウンロードします。
$ python download_images.py
各商品データの行は、商品のメタデータ(カテゴリ名や平均ユーザーレビュー評価など)と、商品のサムネイル画像と大きな画像のURLで構成されています。
ベクターデータについては、このデモでは商品ごとに1つの大きな画像埋め込みベクターを使用しています。
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 documentationページの指示に従ってください。
以下は、特定の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 . # デモをクローンしたメインディレクトリに戻ります。
2.モデルをダウンロードします(認証が必要な場合があります):
$ gsutil cp -R gs://gresearch/magiclens/models ./
Milvusコレクションの作成とベクターの保存
このデモのMilvusサーバはMilvus LiteでスキーマレスのMilvusクライアントです。
コレクションを作成し、各画像をベクターにエンコードし、index.py
を実行してベクターデータをMilvusにロードします。
$ python index.py
このステップは各画像を768次元のベクトルにエンコードします。 サンプルの各製品について、画像ベクトルは関連する製品のメタデータとともに "cir_demo_large "というMilvusコレクションにAUTOINDEX (HNSW)で保存されます。
Milvus インデックスと検索
実行時に画像とテキストを逆検索すると、MilvusはCOSINE ベクトル距離を使用して、top_k = 100の最も近い画像ベクトルを検索します。
Milvusは自動的にtop_kを降順にソートします(COSINE距離の値が大きいほど近いことを意味するため)。
Streamlit Serverフロントエンドの実行
1.ローカルのファイル cfg.py
を更新し、画像とモデルの重みのパス名をローカルのパスに置き換えます。
2.ターミナルからアプリを起動します:
streamlit run ui.py
3.アプリを使う
画像をアップロードして商品検索を行います。
検索をガイドするテキスト命令を入力します。
検索」をクリックすると、Milvusベクトルデータベースから類似製品を検索します。
GPTに聞く "をクリックすると、AIが推薦してくれる。
図1-デモアプリのインターフェース](https://assets.zilliz.com/Figure_1_The_interface_of_our_demo_app_fb022cef25.png)
図1: 私たちのデモアプリのインターフェイス_(Figure 1: The interface of our demo app)
このアプリの仕組み
検索**機能は、Milvusベクトルデータベースに保存されている商品画像を埋め込むために使用されるのと同じモデルであるMagicLensというマルチモーダル埋め込みモデルを使用して、画像とテキストをベクトルに埋め込みます。その後、Milvusは近似最近傍(ANN)ベクトル検索を実行し、入力ベクトルに最も近いtop_k商品画像を検索します。
Ask GPT**関数は、OpenAIのGPT-4o miniマルチモーダル生成モデルを呼び出します。検索結果から上位25枚の画像を取り出し、プロンプトに詰め、モデルに送ります。GPT-4o miniは最適な画像を選択し、その理由を説明します。
図2-GPT-4o miniの回答](https://assets.zilliz.com/Figure_2_The_answers_provided_by_GPT_4o_mini_82bf73e0b4.png)
図2:GPT-4o miniの回答
参考文献
ブートキャンプでのマルチモーダル画像検索: https://github.com/milvus-io/bootcamp/tree/master/bootcamp/tutorials/quickstart/apps/cir_with_milvus
マルチモーダルRAGと再ランキング推薦 on bootcamp:https://github.com/milvus-io/bootcamp/tree/master/bootcamp/tutorials/quickstart/apps/multimodal_rag_with_milvus
Google MagicLensモデル:https://github.com/google-deepmind/magiclens
このデモの背後にある理論についてのビデオ: https://youtu.be/uaqlXRCvjG4?si=e83DnUsLZvVnWt-0&t=51
読み続けて

Zilliz Cloud Enterprise Vector Search Powers High-Performance AI on AWS
Zilliz Cloud delivers blazing-fast, secure vector search on AWS, optimized for AI workloads with AutoIndex, BYOC, and Cardinal engine performance.

Vector Databases vs. Object-Relational Databases
Use a vector database for AI-powered similarity search; use an object-relational database for complex data modeling with both relational integrity and object-oriented features.

Vector Databases vs. NoSQL Databases
Use a vector database for AI-powered similarity search; use NoSQL databases for flexibility, scalability, and diverse non-relational data storage needs.