链载Ai

标题: 【AI大模型应用开发】【RAG评估】1. 通俗易懂:深度理解RAGAS评估方法的原理与应用 [打印本页]

作者: 链载Ai    时间: 昨天 22:23
标题: 【AI大模型应用开发】【RAG评估】1. 通俗易懂:深度理解RAGAS评估方法的原理与应用


0. 简介及评估指标

RAGAS是一个对检索增强生成(RAG)pipeline进行无参考评估的框架。

考虑标准的RAG设置,即给定一个问题q,系统首先检索一些上下文c(q),然后使用检索到的上下文生成答案as(q)。在构建RAG系统时,通常无法访问人工标注的数据集或参考答案,因此该工作将重点放在 完全独立且无参考的度量指标上

该方法有四个评估指标:

1. 在LangChain中使用

1.1 首先构建你的RAG程序

retriever的构建步骤就不展开了,需要的同学可以去看下我之前的文章:【AI大模型应用开发】【LangChain系列】4. 从Chain到LCEL:探索和实战LangChain的巧妙设计

构建完的代码示例如下:

fromlangchain.chainsimportRetrievalQA
......
#!!!!!主要应用点:RetrievalQA构建的qa_chain的返回结果
qa_chain=RetrievalQA.from_chain_type(
llm,
retriever=retriever,
return_source_documents=True,
)
question="HowdidNewYorkCitygetitsname?"
result=qa_chain({"query":question})

关键点:使用RetrievalQA去获取结果,因为使用RetrievalQA去获取的结果中包含key:query, result, source_documents,这是LangChain集成的Ragas直接需要的,不用自己再组装数据结构了:

result_with_truth=result
result_with_truth["ground_truths"]="XXXXXXXXXXXX"

1.2 评估

fromragas.langchain.evalchainimportRagasEvaluatorChain
fromragas.metricsimport(
faithfulness,
answer_relevancy,
context_precision,
context_recall,
)

#createevaluationchains
faithfulness_chain=RagasEvaluatorChain(metric=faithfulness)
answer_rel_chain=RagasEvaluatorChain(metric=answer_relevancy)
context_rel_chain=RagasEvaluatorChain(metric=context_precision)
context_recall_chain=RagasEvaluatorChain(metric=context_recall)

#获取结果
eval_result=faithfulness_chain(result)
eval_result=answer_rel_chain(result)
eval_result=context_rel_chain(result)
eval_result=context_recall_chain(result_with_truth)

1.3 结果示例

2. 原理

2.1 faithfulness

This measures the factual consistency of the generated answer against the given context. It is calculated from answer and retrieved context. The answer is scaled to (0,1) range. Higher the better.

这衡量了生成的答案在给定上下文中的事实一致性。它是根据答案和检索到的上下文来计算的。答案按比例缩放到(0,1)范围。越高越好。

2.1.1 测量步骤

(1)首先使用LLM来根据问题和答案提取一组语句S。这一步骤的目的是将较长的句子分解为更短、更集中的断言。

该步骤的Prompt如下:

Givenaquestionandanswer,createoneormorestatementsfromeachsentenceinthegivenanswer.
question:[question]
answer:[answer]

(2)针对生成的每个语句s,再次使用大模型或验证函数来判断这个语句是否能用上下文中的信息来支撑。

该步骤的Prompt如下(最后输出Yes或No):

Considerthegivencontextandfollowingstatements,thendeterminewhethertheyaresupportedbytheinformationpresentinthecontext.Provideabriefexplanationforeachstatementbeforearrivingattheverdict(Yes/No).Provideafinalverdictforeachstatementinorderattheendinthegivenformat.Donotdeviatefromthespecifiedformat.
statement:[statement1]
...
statement:[statementn]

(3)最后分数的计算,计算公式

其中V为可以被支撑的s的数量,S为生成的statement数量。

2.2 answer_relevancy

答案与问题的相关程度。不考虑答案的正确性,但是对答案不完整或包含冗余信息的情况进行惩罚。

2.2.1 测量步骤

(1)根据最终答案,利用大模型生成针对该问题的多个潜在的问题。

Prompt如下:

Generateaquestionforthegivenanswer.
answer:[answer]

(2)针对生成的每个潜在问题,利用OpenAI的嵌入模型 text-embedding-ada-002 来计算与原始问题的向量相似度(余弦距离)。

不懂向量相似度或余弦距离是什么的,可以参考下我之前的文章:【AI大模型应用开发】【补充知识】文本向量化与向量相似度(含Python代码)

(3)最后分数的计算,计算公式

即最终对所有的向量相似度取个平均数。

2.3 context_relevancy

检索回的上下文与原始问题之间的相关性,对其中的冗余信息进行惩罚

2.3.1 测量步骤

(1)利用大模型,从给定的context上下文信息中,提取出所有对最终答案直接相关或重要的句子,不改变句子内容。

Prompt如下:

Pleaseextractrelevantsentencesfromtheprovidedcontextthatcanpotentiallyhelpanswerthefollowingquestion.Ifnorelevantsentencesarefound,orifyoubelievethequestioncannotbeansweredfromthegivencontext,returnthephrase"InsufficientInformation".Whileextractingcandidatesentencesyou’renotallowedtomakeanychangestosentencesfromgivencontext.

(2)最后分数计算,计算公式

即:对答案有用的句子数量 / 上下文中全部句子的数量

2.4 context_recall

论文中没提到这个指标,待查。这个需要认为给定参考答案,在RAGAS评估中比较少用。

3. 其它接口

langchain中的ragas还提供了其它的评估接口,简单看一个。

3.1 批量评估 `evaluate()`

给定一系列需要测试的输出结果,批量生成评估结果。

#runthequeriesasabatchforefficiency
predictions=qa_chain.batch(examples)

#evaluate
print("evaluating...")
r=faithfulness_chain.evaluate(examples,predictions)

#output
[{'faithfulness_score':1.0},
{'faithfulness_score':0.5},
{'faithfulness_score':1.0},
{'faithfulness_score':1.0},
{'faithfulness_score':0.8}]

4. 总结

本文详细介绍了RAGAS的原理及在LangChain中的使用方式。对于RAGAS的原理更是用通俗易懂的语言进行了深入讲解,相信大家都能看懂!

从上面的评测步骤可以看到,RAGAS各个指标的评测都依赖了大模型的能力。所以也会有一定的不稳定性。







欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5