上下文精度
上下文精度是一种度量标准,用于衡量retrieved_contexts
中相关块的比例。它通过计算上下文中每个块的精度@k的平均值来计算。精度@k是排名k处相关块的数量与排名k处总块数的比率。
\[
\text{上下文精度@K} = \frac{\sum_{k=1}^{K} \left( \text{精度@k} \times v_k \right)}{\text{前 } K \text{ 个结果中相关项目的总数}}
\]
\[
\text{精度@k} = {\text{真阳性@k} \over (\text{真阳性@k} + \text{假阳性@k})}
\]
其中 \(K\) 是 retrieved_contexts
中的块总数,\(v_k \in \{0, 1\}\) 是排名 \(k\) 处的相关性指示符。
基于LLM的上下文精度
以下指标使用LLM来判断检索到的上下文是否相关。
无参考的上下文精度
LLMContextPrecisionWithoutReference
指标可以在你同时拥有检索到的上下文和与 user_input
相关的参考上下文时使用。为了估计检索到的上下文是否相关,此方法使用LLM将 retrieved_contexts
中的每个检索到的上下文或块与 response
进行比较。
示例
from ragas import SingleTurnSample
from ragas.metrics import LLMContextPrecisionWithoutReference
context_precision = LLMContextPrecisionWithoutReference()
sample = SingleTurnSample(
user_input="埃菲尔铁塔位于哪里?",
response="埃菲尔铁塔位于巴黎。",
retrieved_contexts=["埃菲尔铁塔位于巴黎。"],
)
await context_precision.single_turn_ascore(sample)
有参考的上下文精度
LLMContextPrecisionWithReference
指标可以在你同时拥有检索到的上下文和与 user_input
相关的参考答案时使用。为了估计检索到的上下文是否相关,此方法使用LLM将 retrieved_contexts
中的每个检索到的上下文或块与 reference
进行比较。
示例
from ragas import SingleTurnSample
from ragas.metrics import LLMContextPrecisionWithReference
context_precision = LLMContextPrecisionWithReference()
sample = SingleTurnSample(
user_input="埃菲尔铁塔位于哪里?",
reference="埃菲尔铁塔位于巴黎。",
retrieved_contexts=["埃菲尔铁塔位于巴黎。"],
)
await context_precision.single_turn_ascore(sample)
非LLM的上下文精度
以下指标使用传统方法来判断检索到的上下文是否相关。你可以使用任何非LLM的度量标准作为距离度量来判断检索到的上下文是否相关。
有参考上下文的上下文精度
NonLLMContextPrecisionWithReference
指标可以在你同时拥有检索到的上下文和与 user_input
相关的参考上下文时使用。为了估计检索到的上下文是否相关,此方法使用LLM将 retrieved_contexts
中的每个检索到的上下文或块与 reference_contexts
中的每个块进行比较。
示例
from ragas import SingleTurnSample
from ragas.metrics import NonLLMContextPrecisionWithReference
context_precision = NonLLMContextPrecisionWithReference()
sample = SingleTurnSample(
retrieved_contexts=["埃菲尔铁塔位于巴黎。"],
reference_contexts=["巴黎是法国的首都。", "埃菲尔铁塔是巴黎最著名的地标之一。"]
)
await context_precision.single_turn_ascore(sample)