Skip to content

任务指标

摘要评分

SummarizationScore 指标衡量摘要(response)从 retrieved_contexts 中捕捉重要信息的程度。该指标的直觉是,一个好的摘要应包含上下文(或文本)中的所有重要信息。

我们首先从上下文中提取一组重要的关键词。然后使用这些关键词生成一组问题。对于上下文,这些问题的答案总是 yes(1)。然后我们向摘要提出这些问题,并计算摘要评分,即正确回答的问题数与总问题数的比率。

我们使用答案列表(包含 10)计算问题-答案评分。问题-答案评分是正确回答的问题数(答案 = 1)与总问题数的比率。

\[ \text{QA score} = \frac{|\text{正确回答的问题}|}{|\text{总问题}|} \]

我们还引入了一个选项,通过提供简洁性评分来惩罚较长的摘要。如果启用此选项,最终评分是摘要评分和简洁性评分的加权平均值。这种简洁性评分确保了仅仅是文本复制的摘要不会获得高分,因为它们显然会正确回答所有问题。

\[ \text{conciseness score} = 1 - \frac{\min(\text{摘要长度}, \text{上下文长度})}{\text{上下文长度} + \text{1e-10}} \]

我们还提供了一个系数 coeff(默认值 0.5)来控制评分的权重。

最终的摘要评分计算如下:

\[ \text{Summarization Score} = \text{QA score}*\text{coeff} + \\ \text{conciseness score}*\text{(1-coeff)} \]

示例

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import SummarizationScore


sample = SingleTurnSample(
    response="一家公司正在推出一款健身追踪应用,帮助用户设定运动目标、记录饮食和追踪水分摄入,提供个性化的锻炼建议和激励提醒。",
    retrieved_contexts=[
        "一家公司正在推出新产品,一款智能手机应用,旨在帮助用户追踪他们的健身目标。该应用允许用户设定每日运动目标、记录饮食和追踪水分摄入。它还提供个性化的锻炼推荐,并在一天中发送激励提醒。"
    ]
)

scorer = SummarizationScore()
await scorer.single_turn_ascore(sample)