Skip to content
🔗 分享本题
查看我的学习进度 →

多模态 RAG 评估优化图解:分别评估检索、生成和跨模态一致性,再通过混合召回、融合精排与证据约束形成反馈闭环

🧠 图解记忆:多模态 RAG 要分层判断瓶颈在召回、生成还是图文一致性,再分别用混合召回、融合精排和证据约束优化,而不是只盯最终答案分数;点击图片可查看原图。

💡 答案要点

多模态 RAG = 检索图片和文本,生成答案

系统架构:

用户问题:"这张产品图的价格是多少?"

1. 多模态检索
   - 图像检索:CLIP 找相似图片
   - 文本检索:BM25 + Embedding 找相关文档

2. 融合排序
   - 图片:产品照片
   - 文档:产品说明、价格信息

3. 多模态 LLM 生成
   - GPT-4V / BLIP-2
   - 输入:图片 + 文档 + 问题
   - 输出:答案

评估指标:

1. 检索质量:

指标说明计算方式
Recall@K前K个结果包含答案的比例正确检索数 / 总问题数
MRR平均倒数排名1/N Σ(1/rank_i)
NDCG归一化折扣累积增益考虑排序质量

2. 生成质量:

指标说明
准确率答案正确的比例
忠实度答案基于检索内容的程度
相关性答案与问题的匹配度

3. 多模态特有指标:

指标说明
图像相关性检索的图像是否相关
跨模态一致性图像和文本信息是否一致

优化策略:

1. 混合检索(Hybrid Retrieval):

python
def hybrid_retrieve(query, query_image=None):
    results = []

    # 文本检索(BM25 + 向量)
    if query:
        text_results = text_retriever.search(query, k=20)
        results.extend(text_results)

    # 图像检索(CLIP)
    if query_image:
        image_results = clip_retriever.search(query_image, k=10)
        results.extend(image_results)

    # 融合排序(RRF - Reciprocal Rank Fusion)
    final_results = reciprocal_rank_fusion(results)
    return final_results[:10]

2. 多模态 Rerank:

python
def multimodal_rerank(query, query_image, candidates):
    scores = []

    for doc in candidates:
        # 文本相似度
        text_score = compute_text_similarity(query, doc.text)

        # 图像相似度(如果文档包含图片)
        if doc.image and query_image:
            image_score = clip_similarity(query_image, doc.image)
        else:
            image_score = 0

        # 融合得分
        final_score = 0.6 * text_score + 0.4 * image_score
        scores.append(final_score)

    # 排序
    ranked = sorted(zip(candidates, scores),
                   key=lambda x: x[1], reverse=True)
    return ranked

3. 提示词优化:

python
# 针对多模态的 Prompt
prompt = f"""
基于以下检索到的信息回答问题:

图片信息:
[包含 {len(images)} 张相关图片]

文本信息:
{retrieved_text}

问题:{user_question}

要求:
1. 优先使用图片中的信息
2. 如果图片和文本冲突,说明原因
3. 如果无法确定答案,明确指出
"""

案例:电商客服

场景: 用户上传商品图片,询问价格、尺寸等

实现:

展开 Python 代码示例(30 行)
python
def ecommerce_qa(user_image, user_question):
    # 1. 图像检索:找相似商品
    similar_products = clip_search(user_image, k=5)

    # 2. 文本检索:找商品详情
    product_ids = [p.id for p in similar_products]
    product_details = database.query(product_ids)

    # 3. 构造上下文
    context = ""
    for product in product_details:
        context += f"""
        商品名:{product.name}
        价格:{product.price}
        尺寸:{product.size}
        图片相似度:{product.similarity:.2f}
        """

    # 4. 生成答案
    prompt = f"""
    用户上传了一张商品图片,问题是:{user_question}

    检索到的相似商品:
    {context}

    请回答用户问题。如果有多个匹配商品,列出前3个。
    """

    answer = gpt4v.generate(prompt, images=[user_image])
    return answer

效果提升:

优化Recall@5准确率用户满意度
基线(纯文本 RAG)65%72%3.2/5
+ CLIP 图像检索78%81%3.8/5
+ 多模态 Rerank85%87%4.2/5
+ GPT-4V 生成85%92%4.5/5

面试话术:

"多模态 RAG 的难点在于跨模态融合。我用 CLIP 做图像检索,BM25+向量做文本检索,RRF 融合排序。关键是 Rerank 阶段同时考虑图像和文本相似度,Recall@5 从 65% 提升到 85%。"

📚 参考:RAGAS:评估框架(多模态扩展)