CLIPとLlama3によるマルチモーダルRAG
最近、GPT-4oとGeminiがリリースされ、マルチモーダルが話題になっている。ライティング・スポットのトップに君臨しているもう一つのものは、昨年からRetrieval Augmented Generation(RAG)ですが、それは主にテキストに焦点を当てたものでした。このチュートリアルでは、マルチモーダルRAGシステムを構築する方法を紹介します。
マルチモーダルRAGを使うことで、テキストだけを使う必要はありません。もちろん、画像、音声、動画、テキストなど、さまざまな種類のデータを使うことができます。また、異なる種類のデータを返すことも可能です。RAGシステムの入力としてテキストを使用したからといって、出力としてテキストを返す必要はありません。このチュートリアルではそのことを紹介します。
前提条件
このチュートリアルの様々なコンポーネントのセットアップを始める前に、あなたのシステムに以下のものがあることを確認してください:
DockerとDocker-Compose**-DockerとDocker-Composeがシステムにインストールされていることを確認してください。
Milvus Standalone-F 今回の目的では、Docker Composeで簡単に管理できる効率的なMilvus Standaloneを利用します; インストールガイダンスについてはドキュメントを参照してください。
Ollama**-システムにOllamaをインストールする。これでラップトップでLlama3を使えるようになる。最新のインストールガイドについては、彼らのウェブサイトを参照。
OpenAI CLIP
CLIP](https://zilliz.com/learn/exploring-openai-clip-the-future-of-multimodal-ai-learning) (Contrastive Language-Image Pretraining)モデルの中核となる考え方は、画像とテキスト間のつながりを理解することである。これは、テキストと画像のペアで訓練された基礎的なAIモデルです。そして、テキストと画像の両方のベクトル空間に点を作るように学習する。この空間では、類似したテキストの説明は関連する画像に近く、逆もまた同様である。
CLIPは以下のような様々な用途に使用できる:
画像検索**:テキスト説明を使って画像を検索したり、画像にマッチする完璧なキャプションを見つけることを想像してみてください。
マルチモーダル学習:***CLIPのテキストと画像を結びつける強さは、異なるフォーマットの情報を扱うマルチモーダルRAGのようなシステムのための完璧なビルディングブロックとなる。
これにより、私たちのRAGシステムは、テキストと画像の両方を含むことができるクエリを理解し、応答することができます。
図1:OpenAI CLIPのアーキテクチャ](https://assets.zilliz.com/Architecture_of_Open_AI_CLIP_765f6f1fc0.png)
マルチモーダル埋め込み
**エンベッディングとは何でしょうか?CLIPは画像やテキストを入力とし、その主要な特徴を捉えた数値コードに変換します。
CLIPの優れた点は、テキストでも画像でも動作することです。画像を与えれば、視覚的な内容をとらえたエンベッディングを生成します。しかし、テキストを提供することもでき、CLIPはテキストの意味を反映した埋め込みを生成します。
マルチモーダル埋め込み](https://assets.zilliz.com/Multimodal_Embeddings_67e69922c4.png)
ベクトル空間への射影をイメージすると、似たような意味の埋め込みが近くにあることになる。例えば、「笑顔の犬」というテキストと「笑っているように見える犬の写真」は近い。
図2.ベクトル空間での表現](https://assets.zilliz.com/Representation_in_a_Vector_Space_e47a5a4373.png)
マルチモーダルRAGの構築
ウィキペディアのデータを使って、詳しく知りたいことに関連するテキストデータをダウンロードし、画像についても同様に行う。
CLIPのViT-B/32モデルを使ってエンベッディングを生成し、LLMとしてLlama3を使う。
エンベッディングはMilvusに保存する。Milvusは大規模なエンベッディングを管理するように設計されているので、素早く効率的な検索を行うことができる。
LlamaIndexはクエリーエンジンとして使用され、Milvusはベクターストアとして使用されます。
Wikipediaを閲覧し、テキストと画像を処理し、RAGアプリケーションを作成する必要があるため、コード全体はかなり長い。しかし、Githubに完全に公開されているので、ぜひチェックしてほしい!
一旦動くようになれば、以下のようなクエリを実行できるようになるはずだ:
# https://en.wikipedia.org/wiki/Helsinki
query2 = "ヘルシンキで人気の観光スポットは?"
# 画像検索結果を生成する
image_query(query2)
# テキスト検索結果の生成
text_retrieval_results = text_query_engine.query(query2)
print("テキスト検索結果:\print("Text retrieval results:" + str(text_retrieval_results))
と同じようなものが出力されるはずです。
ヘルシンキの人気観光スポットには、豊かな歴史を持つ要塞島スオメンリンナ(スヴェーボルグ)や、ヘルシンキの主要な島のひとつにあるコルケアサーリ動物園などがあります。さらに、ヘルシンキ最大の自然保護区であるヴァンハンカウプンギンセルカ(Vanhankaupunginselkä)をはじめ、市内には多くの自然保護区があります。
これで、画像またはテキストを処理し、画像またはテキストを返すことができるマルチモーダルRAGアプリケーションが完成する。
読み続けて

How to Improve Retrieval Quality for Japanese Text with Sudachi, Milvus/Zilliz, and AWS Bedrock
Learn how Sudachi normalization and Milvus/Zilliz hybrid search improve Japanese RAG accuracy with BM25 + vector fusion, AWS Bedrock embeddings, and practical code examples.

Why AI Databases Don't Need SQL
Whether you like it or not, here's the truth: SQL is destined for decline in the era of AI.

DeepRAG: Thinking to Retrieval Step by Step for Large Language Models
In this article, we’ll explore how DeepRAG works, unpack its key components, and show how vector databases like Milvus and Zilliz Cloud can further enhance its retrieval capabilities.
