最近LlamaindexがマルチモーダルのRAG方法を公開しました。(MultiModalVectorStoreIndex)
私も昨日試してみました。
このRAGの中身は、画像データとテキストデータをそれぞれベクトルストアを作成し、マルチモーダルモデルで両方から情報を取って、回答を生成する仕組みです。(イメージとしては以下のような感じです。langchainのMultiVectorRetrieverとほぼ一緒です。)
今回の試しでは、GPT-4Vと、Qdrant(テキストベクトルストア用)、CLIP(画像ベクトルストア用)を使いました。
1.GPT-4Vテスト
まずはGPT-4Vが画像をどの程度理解できるかを試してみました。
テストに使用したのは、トヨタの"アルファード"というモデルの車の写真です。外装、内装、あとスペックの写真をホームページから取って、モデルに入れてみました。
それで、モデルに"画像の内容を簡単な日本語で説明してください。"という質問を試しました。
回答としては特に問題ないですね。
2.マルチモーダルベクトルストアの作成
次に、RAGで使用するためのベクトルストアを作成します。
今回試したい質問は"アルファード"に関する質問なので、
画像のデータはwikipediaのAPI経由で"トヨタ・アルファード"の車写真を取ってきました。(ダウンロードする写真枚数が多くて、APIリクエストの制限を超えてしまい、途中で切れましたが、30枚ほどはダウンロードできました。)
テキストの情報はwikipediaの内容+ホームページの概要pdfです。
3.性能検証
色々試してベクトルストアができました。さっそく、"アルファードの内装特徴教えて"という質問を聞いてました。(回答は以下)
回答のテキスト部分はpdfの情報を使って、特に問題なかったですが、画像の部分では、"提供された画像にはアルファードの内装の特徴に関する情報は含まれていません。"となっていました。確かに、返された写真を見ると、内装の写真ではないため、該当する情報がないという回答は間違いないですが、なぜ内装の写真をうまく検索できないのはわからなかったです。画像のRetrieverモデルはそこまで性能低いかなと思いました。
そこで、質問の仕方を何度も変えて試しましたが、内装の写真はずっと出てこなくて、もしかしてwikipediaにはアルファードの内装の写真がないのではないかと疑い、実際にWikipediaで確認したところ、本当に内装の写真は掲載されていませんでした。そもそもベクトルストア内には内装の写真ないので、いくら調べても内装の写真は出てこないですね。
そこで、手動で数枚程度アルファードの内装写真をダウンロードしてベクトルストアに読み込ませました。
再度同じ質問投げてみたら、やっと内装の写真が返してくれました。(右側の画像は内装かどうかちょっと微妙なんですが、)
テキストの部分も、"提供された画像にアルファードの内装の特徴に関する情報は含まれていません"という回答はなく、正常に回答が生成されました。
今度はOSSのマルチモーダルモデル(llavaとか)で試してみたいと思います。
参考: