Slide 1

Slide 1 text

マルチモーダルRAG やってみた 2024/10/30 クラスメソッド株式会社 リテールアプリ共創部 たにもん 1

Slide 2

Slide 2 text

自己紹介 たにもん (@tanimon_dev) リテールアプリ共創部 サーバサイドエンジニア 2022 年2 月入社(今年で3 年目) 趣味 サウナ 有酸素運動 ( ジョギングやジムでのエアロバイク) 2

Slide 3

Slide 3 text

今日の発表の概要 LLM の回答精度を高めるための手法としてRAG がある 一般的なRAG はテキストのみを扱うが、画像や音声なども扱えるRAG をマルチモ ーダルRAG と呼ぶ マルチモーダルRAG を実現するアプローチを3 つ紹介 実際にマルチモーダルRAG を実装してみたので、その概要を紹介 3

Slide 4

Slide 4 text

アジェンダ そもそもRAG とは? マルチモーダルRAG とは? マルチモーダルRAG のアプローチ 今回実装したマルチモーダルRAG の概要 動かしてみる まとめ 4

Slide 5

Slide 5 text

アジェンダ そもそもRAG とは? マルチモーダルRAG とは? マルチモーダルRAG のアプローチ 今回実装したマルチモーダルRAG の概要 動かしてみる まとめ 5

Slide 6

Slide 6 text

そもそもRAG とは? Retrieval-Augmented Generation の略 日本語では「検索拡張生成」と呼ばれることも LLM ( 大規模言語モデル) に外部知識を与えて回答を生成する手法 LLM 単体では、学習済みのデータに基づく回答しか行えない 学習後に公開された情報や、社内独自の情報などについては正しく回答できな い(ハルシネーション) RAG を利用することで、外部データに基づいた回答を行える 6

Slide 7

Slide 7 text

RAG の基本的な流れ 以下の2 つのフェーズから構成される データ準備フェーズ データソースから情報を取り込み、インデックスを作成 し、検索可能な状態にする 通常バッチ処理で行われる 実行時フェーズ ユーザーのクエリを受け取り、インデックスからデータ を検索し、それに基づいて回答を生成する 7

Slide 8

Slide 8 text

RAG の基本的な流れ | データ準備フェーズ データ データ 前処理されたデータ データソース Loader Preprocessor Data Store Loader: データソースからデータを読み込む Preprocessor: データを後続の処理で扱いやすい形に変換する。例えば、データを チャンク分割したり、埋め込みベクトルを生成したりする Data Store: 前処理されたデータを保存し、検索可能な状態にする。Pinecone ・ ChromaDB などのベクトルDB や、Kendra ・OpenSearch などの全文検索エンジン を使用することができる 8

Slide 9

Slide 9 text

RAG の基本的な流れ | 実行時フェーズ 質問 質問 検索結果 回答 検索クエリ/ 検索結果 ユーザー Retriever Generator Data Store Retriever: ユーザーからの質問に基づいて、Data Store から関連するデータを検索 する Generator: ユーザーの質問と検索結果からプロンプトを組み立て、回答を生成す る。回答の生成にはLLM を使用する 9

Slide 10

Slide 10 text

アジェンダ そもそもRAG とは? マルチモーダルRAG とは? マルチモーダルRAG のアプローチ 今回実装したマルチモーダルRAG の概要 動かしてみる まとめ 10

Slide 11

Slide 11 text

マルチモーダルRAG とは? 一般的なRAG は検索や生成の対象としてテキストのみを扱う 画像やグラフ、図表など、テキスト以外の要素を含んだドキュメントも多いた め、それらに基づいた検索や回答生成が行えないのは不便 テキストだけでなく画像や音声などのモダリティも扱えるRAG をマルチモーダル RAG と呼ぶ より幅広い情報に基づいて回答を生成するため、回答精度が高くなることが期待 できる 今回はテキストと画像の2 つのモダリティを扱うことを考える 11

Slide 12

Slide 12 text

アジェンダ そもそもRAG とは? マルチモーダルRAG とは? マルチモーダルRAG のアプローチ 今回実装したマルチモーダルRAG の概要 動かしてみる まとめ 12

Slide 13

Slide 13 text

マルチモーダルRAG のアプローチ アプローチ1: すべてのモダリティを同じベクトル空間に埋め込む アプローチ2: モダリティごとに異なるストアを用意する アプローチ3: すべてのモダリティを1 つの主要なモダリティにまとめる 13

Slide 14

Slide 14 text

アプローチ1: すべてのモダリティを同じベクトル空間に埋め込む Preprocessor テキストデータ チャンク化されたテキスト データ 画像データ データ データ 前処理されたデータ データソース Loader Data Store Data Classifier Text Splitter MultiModalEmbeddingModel 既存のテキストベースRAG システムの埋め込みモデルをマルチモーダルなものに変 更する マルチモーダル埋め込みモデルを用いてテキストと画像を同じベクトル空間でエ ンコードし、複数のモダリティにまたがった検索ができる 14

Slide 15

Slide 15 text

アプローチ1: すべてのモダリティを同じベクトル空間に埋め込む 😆 メリット: データ準備フェーズの処理内容・インフラ構成がシンプル 既存のテキストベースRAG システムの多くを流用できる 🙁 デメリット: 効果的な埋め込みモデルの選定が難しい マルチモーダル埋め込みモデルの最大入力トークン数はテキスト埋め込みモ デルより少ない傾向にある 複雑な画像情報(画像内のテキストや表など)の取り込み精度が課題になりや すい 15

Slide 16

Slide 16 text

アプローチ2: モダリティごとに異なるストアを用意する データ準備フェーズの処理の流れ: Preprocessor テキストデータ 画像データ データ データ 前処理されたテキストデー タ 前処理された画像データ データソース Loader テキスト用Data Store 画像用Data Store Data Classifier テキスト用前処理 画像用前処理 実行時フェーズの処理の流れ: 質問 質問 検索結果 リランクされた検索結果 回答 検索クエリ/ 検索結果 検索クエリ/ 検索結果 ユーザー Retriever Reranker Generator テキスト用Data Store 画像用Data Store 16

Slide 17

Slide 17 text

アプローチ2: モダリティごとに異なるストアを用意する 😆 メリット: マルチモーダル埋め込みベクトルモデルのチューニングや選定が不要 各モダリティに特化した処理が可能 🙁 デメリット: 複数のモダリティからの結果を統合するリランカーを用意する必要がある 17

Slide 18

Slide 18 text

アプローチ3: すべてのモダリティを1 つの主要なモダリティにまとめ る Preprocessor テキストデータ 画像データ 画像の説明 チャンク化されたテキスト データ データ データ 前処理されたデータ データソース Loader Data Store Data Classifier Text Splitter Multimodal Text Generation Model Text Embedding Model 主要なモダリティを1 つ選択し、その他のモダリティをそれに変換 例: テキストを主要なモダリティとして選択し、画像をテキストに変換する 主要なモダリティによって検索できるようにしておき、検索結果に紐付く元デー タを取得できようにしておく 18

Slide 19

Slide 19 text

アプローチ3: すべてのモダリティを1 つの主要なモダリティにまとめ る 😆 メリット: マルチモーダル埋め込みベクトルモデルのチューニングや選定が不要 異なるモダリティ間の検索結果をリランクする必要がない 🙁 デメリット: 複雑な前処理を実装する必要がある 画像のニュアンスの一部が失われる可能性がある 19

Slide 20

Slide 20 text

アジェンダ そもそもRAG とは? マルチモーダルRAG とは? マルチモーダルRAG のアプローチ 今回実装したマルチモーダルRAG の概要 動かしてみる まとめ 20

Slide 21

Slide 21 text

今回採用したマルチモーダルRAG のアプローチ アプローチ3: すべてのモダリティを1 つの主要なモダリティにまとめる 実装にはLangChain の MultiVectorRetriever を使用 画像の説明と画像の元データを紐付けて管理し、検索することができる 21

Slide 22

Slide 22 text

データ準備フェーズの概要 MultiVectorRetriever 画像を含むドキュメント 画像 画像の説明 画像の説明の埋め込みベク トル テキスト テキストの埋め込みベクト ル 画像 テキスト データソース ドキュメントから画像を抽 出 テキストEmbedding Model でテキストの埋め込みベク トルを生成 マルチモーダルLLM で画像 の説明を生成 ベクトルDB (テキスト・画像の説明の 埋め込みベクトルを保持) Docstore (テキスト・画像の元デー タを保持) MultiVectorRetriever は、内部的にベクトルDB とDocstore を管理している ベクトルDB: テキストと画像の説明文の埋め込みベクトルを保持 Docstore: 元の画像データとテキストデータを保持 検索時には、検索クエリに類似するベクトルがベクトルDB から検索され、それに 紐付く元データがDocstore から返される 22

Slide 23

Slide 23 text

実行時フェーズの概要 質問 質問 検索結果 (テキスト・画像の説明 文・画像の元データ) 回答 ユーザー MultiVectorRetriever Generator 検索クエリに類似するテキスト・画像が取得される 画像に関しては、検索クエリと画像の説明文の類似度に基づいた検索が行わ れ、検索結果として画像の説明文と元の画像データが取得される 検索結果とユーザーの質問がGenerator に渡され、回答が生成される 23

Slide 24

Slide 24 text

アジェンダ そもそもRAG とは? マルチモーダルRAG とは? マルチモーダルRAG のアプローチ 今回実装したマルチモーダルRAG の概要 動かしてみる まとめ 24

Slide 25

Slide 25 text

動かしてみる 見る マルチモーダルRAG マルチモーダルRAG 共有 共有 25

Slide 26

Slide 26 text

アジェンダ そもそもRAG とは? マルチモーダルRAG とは? マルチモーダルRAG のアプローチ 今回採用したマルチモーダルRAG のアプローチ 動かしてみる まとめ 26

Slide 27

Slide 27 text

まとめ RAG は、LLM に外部知識を与えることでより正確な回答を生成する手法 マルチモーダルRAG は、テキストだけでなく画像や音声などの情報を統合して回 答を生成する手法 マルチモーダルRAG を実現するアプローチを3 つ紹介 アプローチ1: すべてのモダリティを同じベクトル空間に埋め込む アプローチ2: モダリティごとに異なるストアを用意する アプローチ3: すべてのモダリティを1 つの主要なモダリティにまとめる 今回はアプローチ3 を採用し、LangChain の MultiVectorRetriever を使用して 実装した 27

Slide 28

Slide 28 text

参考情報 Build a Retrieval Augmented Generation (RAG) App | 🦜️🔗 LangChain マルチモーダル検索拡張生成 (RAG) の簡単な紹介 - NVIDIA 技術ブログ 【RAG 】画像・テーブルデータに対応可能な Multi-representation-indexing につ いて | Hakky Handbook 28

Slide 29

Slide 29 text

参考情報 Multi-Vector Retriever for RAG on tables, text, and images Multimodal Retrieval Augmented Generation (RAG) with Gemini, Vertex AI Vector Search, and LangChain RAG の課題と精度改善のための発展的なアプローチまとめ | Hakky Handbook 29

Slide 30

Slide 30 text

30