マルチモーダル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アプリケーションの標準となるでしょう。