マルチモーダルAIの概要

マルチモーダルAIは、テキスト、画像、音声、動画など、複数の種類のデータを同時に理解し処理することができます。これにより、画像キャプション、視覚的質問応答、動画理解、クロスモーダル検索など、AIアプリケーションに全く新しい可能性が開かれます。マルチモーダルAIは、次世代AIアプリケーションの基盤能力となりつつあります。

視覚言語モデル(VLM)入門

DeepSeekなどの視覚言語モデルを使用して画像を処理する:

from openai import OpenAI
import base64

client = OpenAI(
    api_key="your-api-key",
    base_url="https://api.deepseek.com"
)

# 画像をbase64にエンコード
def encode_image(image_path):
    with open(image_path, "rb") as f:
        return base64.b64encode(f.read()).decode("utf-8")

# 画像とテキストのメッセージを送信
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "この画像には何が写っていますか?詳しく説明してください"},
            {"type": "image_url", "image_url": {
                "url": f"data:image/jpeg;base64,{encode_image('photo.jpg')}"
            }}
        ]
    }]
)

print(response.choices[0].message.content)

マルチモーダルRAGシステム

従来のRAGはテキストのみを扱えますが、マルチモーダルRAGは画像や表などの視覚情報を検索・参照できます:

from langchain.document_loaders import UnstructuredImageLoader
from langchain.vectorstores import Chroma

# 1. 画像の理解とインデックス化
# まずVLMで画像の説明を生成し、画像と一緒にインデックス化
image_descriptions = []
for img_path in image_paths:
    desc = vlm_describe(img_path)
    image_descriptions.append({
        "image_path": img_path,
        "description": desc
    })

# 2. マルチモーダル検索
# ユーザーのクエリ時に、テキストと画像の両方を検索
results = vectorstore.similarity_search(query, k=5)

# 3. マルチモーダル生成
# 検索された画像とテキストをLLMに渡して回答を生成
context = build_multimodal_context(results)
answer = llm.generate(query, context)

文書理解とOCR

マルチモーダルモデルは、文書内のテキスト、表、グラフ情報を理解し抽出できます:

def extract_document_info(image_path):
    """文書画像から構造化情報を抽出"""
    prompt = """この文書画像を分析し、以下の情報を抽出してください:
1. 文書タイプ(請求書/契約書/レポートなど)
2. 主要なフィールドと値
3. 表データ(ある場合)
4. 文書の要約

JSON形式で出力してください。"""

    response = vlm_analyze(image_path, prompt)
    return json.loads(response)

# 使用例
invoice_data = extract_document_info("invoice.jpg")
print(f"請求金額: {invoice_data['amount']}")
print(f"請求日: {invoice_data['date']}")

マルチモーダルエージェント開発

視覚情報を理解し行動できるエージェントを構築する:

class MultimodalAgent:
    def __init__(self):
        self.vlm = VLMClient()
        self.tools = {
            "screenshot": self.take_screenshot,
            "analyze_chart": self.analyze_chart,
            "compare_images": self.compare_images
        }

    def take_screenshot(self):
        """スクリーンショットを撮る"""
        import pyautogui
        screenshot = pyautogui.screenshot()
        return screenshot

    def analyze_chart(self, image):
        """グラフデータを分析"""
        prompt = """このグラフを分析し、以下を抽出してください:
1. グラフの種類
2. X軸とY軸の意味
3. データの傾向
4. 主要なデータポイント"""
        return self.vlm.analyze(image, prompt)

    def run(self, task):
        """マルチモーダルタスクを実行"""
        if "スクリーンショット" in task:
            img = self.take_screenshot()
            return self.analyze_chart(img)
        elif "比較" in task:
            return self.compare_images(task["images"])

パフォーマンス最適化のヒント

  • 画像圧縮:アップロード前に画像を適切な解像度(例:1024x1024)に圧縮し、転送時間を短縮
  • 結果のキャッシュ:同じ画像の分析結果をキャッシュする
  • バッチ処理:複数の画像の分析リクエストをまとめて処理
  • 非同期処理:非同期API呼び出しを使用してブロッキングを回避

まとめ

マルチモーダルAIは「使える」から「使いやすい」へと進化しています。簡単な画像理解から始めて、徐々に複雑なマルチモーダルアプリケーションを構築することをお勧めします。将来的には、マルチモーダル機能はAIアプリケーションの標準となるでしょう。