Skip to content

上下文精度

上下文精度是一种度量标准,用于衡量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)