答案正确性
答案正确性
答案正确性的评估涉及衡量生成答案与参考答案(ground truth)相比的准确性。此评估依赖于ground truth
和answer
,分数范围从0到1。分数越高表示生成答案与参考答案越一致,表明正确性越好。
答案正确性包括两个关键方面:生成答案与参考答案之间的语义相似度,以及事实相似度。这些方面通过加权方案结合起来,形成答案正确性分数。用户还可以选择使用'threshold'值,将结果分数舍入为二元值(如果需要)。
示例
参考答案(Ground truth): 爱因斯坦于1879年在德国出生。
高答案正确性示例: 爱因斯坦于1879年在德国出生。
低答案正确性示例: 爱因斯坦于1879年在西班牙出生。
示例
from datasets import Dataset
from ragas.metrics import answer_correctness
from ragas import evaluate
data_samples = {
'question': ['When was the first super bowl?', 'Who won the most super bowls?'],
'answer': ['The first superbowl was held on Jan 15, 1967', 'The most super bowls have been won by The New England Patriots'],
'ground_truth': ['The first superbowl was held on January 15, 1967', 'The New England Patriots have won the Super Bowl a record six times']
}
dataset = Dataset.from_dict(data_samples)
score = evaluate(dataset,metrics=[answer_correctness])
score.to_pandas()
计算
让我们计算低答案正确性示例的答案正确性。它被计算为事实正确性与给定答案和参考答案之间的语义相似度之和。
事实正确性衡量生成答案与参考答案之间的事实重叠程度。这通过以下概念完成:- TP(真阳性):在参考答案和生成答案中都存在的事实或陈述。- FP(假阳性):在生成答案中存在但在参考答案中不存在的事实或陈述。- FN(假阴性):在参考答案中存在但在生成答案中不存在的事实或陈述。
在第二个示例中:- TP:[爱因斯坦于1879年出生]
- FP:[爱因斯坦在西班牙出生]
- FN:[爱因斯坦在德国出生]
现在,我们可以使用F1分数的公式,根据这些列表中的陈述数量来量化正确性
\[ \text{F1 Score} = {|\text{TP} \over {(|\text{TP}| + 0.5 \times (|\text{FP}| + |\text{FN}|))}} \]
接下来,我们计算生成答案与参考答案之间的语义相似度。在此处阅读更多。
一旦我们有了语义相似度,我们将语义相似度与上面计算的事实相似度进行加权平均,得出最终分数。您可以通过修改weights
参数来调整权重。