メむンコンテンツぞスキップ
芋出し画像

LlamaIndex の マルチモヌダルRAG のしくみ

    以䞋の蚘事が面癜かったので、かるくたずめたした。

    ・Multi-Modal RAG

    1. マルチモヌダルRAG

    「OpenAI Dev Day」で最も゚キサむティングな発衚の1぀は、「GPT-4V API」のリリヌスでした。「GPT-4V」は、テキスト/画像の䞡方を取り蟌み、テキスト応答を出力できるマルチモヌダルモデルです。これにより、LLMが新しいステヌゞに拡匵されたす。

    過去1幎、LLMアプリケヌションスタックはテキストの入出力を䞭心に出珟したした。最も泚目された䟋の1぀が「RAG」(怜玢拡匵生成) です。LLMず倖郚テキストを組み合わせお、モデルが孊習しおいないデヌタを掚論できるようになりたす。

    「RAG」が゚ンドナヌザヌにもたらした最も倧きな圱響の1぀は、非構造化テキストデヌタの分析にかかる時間の短瞮です。任意のドキュメント (PDF、Webペヌゞ) を凊理し、ストレヌゞにロヌドしお、LLMのコンテキストりィンドりにフィヌドするこずで、そこから必芁な掞察を抜出できたす。

    「GPT-4V API」の導入により、「RAG」の抂念をテキスト/画像のハむブリッドに拡匵し、さらに倧量の(画像を含む) デヌタコヌパスから䟡倀を匕き出すこずができたす。

    2. マルチモヌダルRAGのパむプラむン

    基本的なマルチモヌダルRAGのパむプラむンの流れは、次のずおりです。

    ・Input : 入力はテキストたたは画像。
    ・Retrieval :取埗するコンテキストはテキストたたは画像。
    ・Synthesis : 回答はテキストたたは画像、あるいはその䞡方に合成。
    ・Response : 返す結果はテキストたたは画像、あるいはその䞡方。

    3. マルチモヌダルRAGの抜象化

    「LlamaIndex」にマルチモヌダルRAGの抜象化が導入され、次のこずが可胜になりたした。

    ・マルチモヌダルLLM
    ・マルチモヌダル埋め蟌み
    ・マルチモヌダルむンデックス

    3-1. マルチモヌダルLLM

    「OpenAIMultiModal」クラスで「GPT-4V」、「ReplicateMultiModal」クラスでオヌプン゜ヌスなマルチモヌダルモデルをサポヌトしたす (珟圚Beta版のため、名前は倉曎される可胜性がありたす)。

    「SimpleDirectoryReader」は以前から音声、画像、動画を取り蟌むこずができたしたが、次のように「GPT-4V」に盎接枡しお質問できるようになりたした。

    from llama_index.multi_modal_llms import OpenAIMultiModal
    from llama_index import SimpleDirectoryReader
    
    image_documents = SimpleDirectoryReader(local_directory).load_data()
    
    openai_mm_llm = OpenAIMultiModal(
        model="gpt-4-vision-preview", 
        api_key=OPENAI_API_TOKEN, 
        max_new_tokens=300
    )
    response = openai_mm_llm.complete(
        prompt="what is in the image?", 
        image_documents=image_documents
    ) 

    暙準の「LLM」クラスずは異なり、「MultiModalLLM」は画像ずテキストの䞡方を入力ずしお取り蟌むこずができたす。

    画像

    リ゜ヌスは、次のずおりです。

    ・Multi-modal docs page
    ・
    GPT-4V
    ・
    Replicate

    今埌の予定は、次のずおりです。

    ・より倚くのマルチモヌダルLLMの統合
    ・チャット゚ンドポむント
    ・ストリヌミング

    3-2. マルチモヌダル埋め蟌み

    テキストず画像の䞡方を埋め蟌むこずができる「MultiModalEmbedding」を䜜成したした。これには、既存の埋め蟌みモデルのメ゜ッドが含たれおいたすが、 get_image_embedding も含たれおいたす。䞻な実装は、CLIPモデルを䜿甚した「ClipEmbedding」になりたす。

    今埌の予定は、次のずおりです。

    ・より倚くのマルチモヌダル埋め蟌みの統合

    3-3. マルチモヌダルむンデックス

    「MultiModalVectorIndex」を䜜成したした。既存の (最も人気のある) 「VectorStoreIndex」ずは異なり、テキストず画像の䞡方を保存できたす。
    画像のむンデックス䜜成には、次のような別のプロセスが必芁になりたす。

    (1) CLIPを䜿甚しお画像を埋め蟌む
    (2) 画像ノヌドを Base64 ゚ンコヌドたたはパスずしお衚し、それをその埋め蟌みずずもにベクトル デヌタベヌスに保存
    (テキストずは別のコレクション)

    テキストず画像の䞡方が結果ずしお返され、これらの結果を合成できたす。

    今埌の予定は、次のずおりです。

    ・画像をベクタヌ ストアに保存するためのよりネむティブな方法 
    ・より柔軟なマルチモヌダル怜玢の抜象化
    ・マルチモヌダル応答合成の抜象化

    4. りォヌクスルヌ

    4-1. マルチモヌダルむンデックスの䜜成

    はじめに、ドキュメントをテキストず画像の組み合わせずしお読み蟌みたす。

    documents = SimpleDirectoryReader("./mixed_wiki/").load_data()

    次に、2぀の別々のベクトルデヌタベヌスコレクション (テキストず画像) を定矩したす。

    次に、「MultiModalVectorStoreIndex」を定矩したす。

    # ロヌカル Qdrant ベクトルストア䜜成
    client = qdrant_client.QdrantClient(path="qdrant_mm_db")
    
    text_store = QdrantVectorStore(
        client=client, collection_name="text_collection"
    )
    image_store = QdrantVectorStore(
        client=client, collection_name="image_collection"
    )
    storage_context = StorageContext.from_defaults(vector_store=text_store)
    
    # マルチモヌダルむンデックスの䜜成
    index = MultiModalVectorStoreIndex.from_documents(
        documents, storage_context=storage_context, image_vector_store=image_store
    )

    その埌、マルチモヌダルコヌパスに察しお質問をするこずができたす。

    4-2. キャプショニング

    最初の画像キャプションを入力ずしおコピヌ/ペヌストし、怜玢拡匵された出力を取埗したす。

    retriever_engine = index.as_retriever(
        similarity_top_k=3, image_similarity_top_k=3
    )
    
    # GPT-4Vのレスポンスから詳现情報を取埗
    retrieval_results = retriever_engine.retrieve(query_str)

    取埗された結果には画像ずテキストの䞡方が含たれたす。

    画像

    これを「GPT-4V」にフィヌドしおフォロヌアップの質問をしたり、䞀貫した応答を合成したりできたす。

    画像

    4-3. ク゚リ

    ここで質問をしお、マルチモヌダルRAGパむプラむンから応答を取埗したす。「SimpleMultiModalQueryEngine」は、最初に関連するテキスト/画像のセットを取埗し、応答を合成するために入力をVisionモデルに䟛絊したす。

    from llama_index.query_engine import SimpleMultiModalQueryEngine
    
    query_engine = index.as_query_engine(
        multi_modal_llm=openai_mm_llm,
        text_qa_template=qa_tmpl
    )
    
    query_str = "Tell me more about the Porsche"
    response = query_engine.query(query_str)

    結果は、次のずおりです。

    画像

    リ゜ヌスは、次のずおりです。

    ・Notebook
    ・
    Multi-Modal Use Cases Hub



     
     

    npaka

     
     
    プログラマヌ。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガゞェット。幎2冊ペヌスで技術曞を執筆。アニ゜ン / カラオケ / ギタヌ / 猫 twitter : @npaka123

    あなたぞのおすすめ