使用Ragas评估VertexAI模型在RAG问答任务中的表现对比

使用Ragas评估VertexAI模型在RAG问答任务中的表现对比

概述

本文介绍如何利用Ragas评估框架对VertexAI平台上的不同大语言模型(LLM)在基于检索增强生成(RAG)的问答任务中的表现进行量化评估和可视化对比。通过本教程,您将掌握完整的模型评估流程,包括数据准备、评估指标选择、结果分析和可视化展示。

技术背景

Ragas评估框架简介

Ragas是一个专门用于评估RAG系统的开源框架,它提供了一系列评估指标,包括:

  • 上下文精确度(Context Precision):衡量检索到的上下文与问题的相关性
  • 忠实度(Faithfulness):评估生成答案与提供上下文的一致性
  • ROUGE分数:衡量生成答案与参考答案的相似度
  • 自定义评分标准(Rubrics Score):可根据业务需求定义的评价维度

VertexAI模型服务

VertexAI是Google Cloud提供的机器学习平台,集成了多种大语言模型,包括Gemini系列模型。本教程将对比Gemini 1.0 Pro和Gemini 1.5 Pro两个版本在问答任务中的表现差异。

环境准备

安装依赖包

首先需要安装必要的Python包:

%pip install --upgrade --user --quiet langchain-core langchain-google-vertexai langchain ragas rouge_score

安装完成后需要重启运行时环境以加载新安装的包。

初始化VertexAI SDK

设置Google Cloud项目信息并初始化VertexAI:

import vertexai

PROJECT_ID = "your-project-id"  # 替换为实际项目ID
LOCATION = "us-central1"  # 选择区域

vertexai.init(project=PROJECT_ID, location=LOCATION)

评估流程设计

1. 定义评估指标

选择适合问答任务的评估指标:

from ragas.metrics import ContextPrecision, Faithfulness, RubricsScore, RougeScore

# 定义ROUGE评分
rouge_score = RougeScore()

# 自定义有用性评分标准
helpfulness_rubrics = {
    "score1_description": "回答无用/不相关,包含错误/误导信息",
    "score2_description": "回答与问题勉强相关,但缺乏清晰度和细节",
    "score3_description": "回答相关且有用,但不够全面详细",
    "score4_description": "回答非常相关,清晰满足问题核心需求",
    "score5_description": "回答极其全面,超出问题明确要求的范围"
}

rubrics_score = RubricsScore(name="helpfulness", rubrics=helpfulness_rubrics)
context_precision = ContextPrecision(llm=evaluator_llm)
faithfulness = Faithfulness(llm=evaluator_llm)

2. 准备测试数据集

构建评估数据集需要以下四个要素:

  1. 用户问题(user_input)
  2. 检索到的上下文(retrieved_contexts)
  3. 模型生成的回答(response)
  4. 参考答案(reference)
user_inputs = [
    "短期记忆依赖于大脑的哪个部分?",
    "什么使罗马元老院感到振奋?",
    "Hasan-jalalians家族控制了什么地区?"
]

retrieved_contexts = [
    ["短期记忆由前额叶(特别是背外侧前额叶皮层)和顶叶区域的神经元活动模式支持..."],
    ["公元前62年,庞培从亚洲胜利归来。元老院因成功对抗喀提林而欢欣鼓舞..."],
    ["12世纪早期,Zakarid家族的亚美尼亚王子驱逐了塞尔柱突厥人..."]
]

references = [
    "前额叶和顶叶",
    "成功对抗喀提林",
    "Artsakh和Utik地区"
]

3. 配置对比模型

设置两个Gemini模型进行对比:

from vertexai.generative_models import GenerativeModel

generation_config = {
    "max_output_tokens": 128,
    "temperature": 0.1,
}

gemini_15 = GenerativeModel("gemini-1.5-pro", generation_config=generation_config)
gemini_10 = GenerativeModel("gemini-1.0-pro", generation_config=generation_config)

4. 生成模型回答

使用统一模板生成两个模型的回答:

template = """根据以下上下文回答问题:
{context}

问题: {query}
"""

responses_15 = []
responses_10 = []

for i in range(len(user_inputs)):
    context_str = "\n".join(retrieved_contexts[i])
    prompt = template.format(context=context_str, query=user_inputs[i])
    
    responses_15.append(gemini_15.generate_content(prompt).text)
    responses_10.append(gemini_10.generate_content(prompt).text)

5. 构建评估数据集

将数据转换为Ragas评估格式:

from ragas.dataset_schema import SingleTurnSample, EvaluationDataset

samples_15 = [
    SingleTurnSample(
        user_input=user_inputs[i],
        retrieved_contexts=retrieved_contexts[i],
        response=responses_15[i],
        reference=references[i]
    ) for i in range(len(user_inputs))
]

samples_10 = [...]  # 同上,使用responses_10

dataset_15 = EvaluationDataset(samples=samples_15)
dataset_10 = EvaluationDataset(samples=samples_10)

执行评估

运行评估计算

from ragas import evaluate

metrics = [context_precision, faithfulness, rouge_score, rubrics_score]

result_15 = evaluate(dataset=dataset_15, metrics=metrics)
result_10 = evaluate(dataset=dataset_10, metrics=metrics)

结果可视化

使用雷达图和柱状图直观对比模型表现:

def plot_radar_compare(results, model_names):
    fig = go.Figure()
    
    for res, name in zip(results, model_names):
        metrics = res._repr_dict
        fig.add_trace(go.Scatterpolar(
            r=list(metrics.values()),
            theta=list(metrics.keys()),
            fill='toself',
            name=name
        ))
    
    fig.update_layout(polar=dict(radialaxis=dict(visible=True, range=[0,5])))
    fig.show()

plot_radar_compare([result_15, result_10], ["Gemini 1.5", "Gemini 1.0"])

结果分析与解读

通过评估结果可以发现:

  1. 上下文精确度:两个模型表现接近,但1.5版本在处理复杂上下文时表现更稳定
  2. 忠实度:两个模型都能很好地基于上下文生成答案
  3. ROUGE分数:1.5版本在答案与参考文本匹配度上略优
  4. 有用性评分:1.5版本生成的答案通常更全面和详细

最佳实践建议

  1. 指标选择:根据实际业务需求选择评估指标,问答系统应优先考虑忠实度和上下文精确度
  2. 测试数据:确保测试数据覆盖各种场景,包括边界情况
  3. 模型选择:新版本模型通常表现更好,但也需要考虑成本和延迟因素
  4. 持续评估:建立自动化评估流程,监控模型性能变化

通过本教程,您已经掌握了使用Ragas评估框架对VertexAI模型进行系统评估的方法,这套方法可以扩展到其他模型和任务的评估场景中。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牧韶希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值