任务指标
摘要评分
SummarizationScore
指标衡量摘要(response
)从 retrieved_contexts
中捕捉重要信息的程度。该指标的直觉是,一个好的摘要应包含上下文(或文本)中的所有重要信息。
我们首先从上下文中提取一组重要的关键词。然后使用这些关键词生成一组问题。对于上下文,这些问题的答案总是 yes(1)
。然后我们向摘要提出这些问题,并计算摘要评分,即正确回答的问题数与总问题数的比率。
我们使用答案列表(包含 1
和 0
)计算问题-答案评分。问题-答案评分是正确回答的问题数(答案 = 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)