在大语言模型(LLM)和检索增强生成(RAG)系统快速发展的背景下,如何评估模型生成的文本质量成为一个核心问题。RAGas 是一个专门用于 LLM 和 RAG 系统评估的 Python 库,提供了多种指标和工具来量化生成质量。本文将带你快速了解 RAGas 的基本功能,并通过实例展示如何使用它进行评估。
1. 单轮对话评估
在 RAGas 中,最基础的单轮对话评估可以使用 SingleTurnSample
来包装用户输入、模型输出以及参考答案。比如,我们可以用经典的 BLEU 指标来衡量生成摘要与参考摘要的相似度:
from langchain_community.chat_models import ChatTongyi
from ragas import SingleTurnSample
from ragas.metrics import BleuScore
test_data = {
"user_input": "summarise given text\nThe company reported an 8% rise in Q3 2024, driven by strong performance in the Asian market...",
"response": "The company experienced an 8% increase in Q3 2024, largely due to effective marketing strategies...",
"reference": "The company reported an 8% growth in Q3 2024, primarily driven by strong sales in the Asian market..."
}
metric = BleuScore()
test_data = SingleTurnSample(**test_data)
result = metric.single_turn_score(test_data)
print(result)
结果
0.13718598426177148
通过这种方式,我们可以快速获得模型生成摘要的 BLEU 分数,为自动化评估提供基础指标。
2. 使用 AspectCritic 进行更细粒度的评估
BLEU 等传统指标只能衡量文本表面相似度,而 AspectCritic 指标可以基于 LLM 对生成内容的“质量”进行更深层次评估。例如,我们可以检查摘要是否忠实于原文内容:
from ragas import SingleTurnSample
from ragas.metrics import AspectCritic
from ragas.llms import LangchainLLMWrapper
llm = ChatTongyi(model="qwen-plus", api_key="your_api_key")
evaluator_llm = LangchainLLMWrapper(llm)
test_data = {
"user_input": "summarise given text\nThe company reported an 8% rise in Q3 2024...",
"response": "The company experienced an 8% increase in Q3 2024..."
}
metric = AspectCritic(name="summary_accuracy", llm=evaluator_llm, definition="Verify if the summary is accurate.")
test_data = SingleTurnSample(**test_data)
import asyncio
result = asyncio.run(metric.single_turn_ascore(test_data))
print(result)
运行结果
1
通过 AspectCritic,我们可以得到生成文本在“忠实性”、“准确性”等方面的量化分数,更接近人类评判标准。
3. 使用数据集进行大规模评估
前面我们演示了如何在单条样本上评估 RAG 系统的表现。但在实际应用中,我们通常需要在 整个数据集上进行评估,以便得到更稳定、更有代表性的指标。
Ragas 支持直接加载 HuggingFace 数据集,并结合内置的评估指标进行批量测试。例如,这里我们使用了一个财报摘要(explodinggradients/earning_report_summary
)数据集,对模型生成的摘要进行“准确性”方面的评估:
def evaluate_on_dataset():
from datasets import load_dataset
from ragas import EvaluationDataset
from ragas.metrics import AspectCritic
from ragas.llms import LangchainLLMWrapper
from langchain_community.chat_models import ChatTongyi
# 初始化评估 LLM
llm = ChatTongyi(model="qwen-plus", api_key="your_api_key_here")
evaluator_llm = LangchainLLMWrapper(llm)
# 定义评估指标,这里关注摘要是否准确
metric = AspectCritic(
name="summary_accuracy",
llm=evaluator