忠实度
忠实度
忠实度指标衡量了 响应
与 检索到的上下文
的事实一致性。其取值范围为 0 到 1,分数越高表示一致性越好。
如果一个响应的所有主张都能得到检索到的上下文的支持,则该响应被认为是忠实的。
计算方法如下
1. 识别响应中的所有主张。
2. 检查每个主张,看它是否可以从检索到的上下文中推断出来。
3. 使用以下公式计算忠实度分数
\[ \text{忠实度分数} = \frac{\text{响应中得到检索到的上下文支持的主张数量}}{\text{响应中的主张总数}} \]
示例
from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import Faithfulness
sample = SingleTurnSample(
user_input="When was the first super bowl?",
response="The first superbowl was held on Jan 15, 1967",
retrieved_contexts=[
"The First AFL–NFL World Championship Game was an American football game played on January 15, 1967, at the Los Angeles Memorial Coliseum in Los Angeles."
]
)
scorer = Faithfulness(llm=evaluator_llm)
await scorer.single_turn_ascore(sample)
使用 HHEM-2.1-Open 计算忠实度
Vectara 的 HHEM-2.1-Open 是一个分类模型 (T5),经过训练用于检测 LLM 生成文本中的幻觉。这个模型可以用于计算忠实度的第二步,即在将主张与给定上下文进行交叉核对以确定是否可以从上下文中推断出来时。该模型免费、体积小且开源,在生产用例中效率非常高。要使用此模型计算忠实度,可以使用以下代码片段
from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import FaithfulnesswithHHEM
sample = SingleTurnSample(
user_input="When was the first super bowl?",
response="The first superbowl was held on Jan 15, 1967",
retrieved_contexts=[
"The First AFL–NFL World Championship Game was an American football game played on January 15, 1967, at the Los Angeles Memorial Coliseum in Los Angeles."
]
)
scorer = FaithfulnesswithHHEM(llm=evaluator_llm)
await scorer.single_turn_ascore(sample)
您可以通过设置 device
参数将模型加载到指定设备上,并使用 batch_size
参数调整推理的批处理大小。默认情况下,模型加载在 CPU 上,批处理大小为 10
my_device = "cuda:0"
my_batch_size = 10
scorer = FaithfulnesswithHHEM(device=my_device, batch_size=my_batch_size)
await scorer.single_turn_ascore(sample)
计算方法
示例
问题:爱因斯坦在哪里出生?何时出生?
上下文:阿尔伯特·爱因斯坦(生于 1879 年 3 月 14 日)是一位德裔理论物理学家,被广泛认为是史上最伟大、最具影响力的科学家之一
高忠实度答案:爱因斯坦于 1879 年 3 月 14 日出生在德国。
低忠实度答案:爱因斯坦于 1879 年 3 月 20 日出生在德国。
让我们看看如何使用低忠实度答案计算忠实度
-
步骤 1:将生成的答案分解成独立的主张。
- 主张
- 主张 1:“爱因斯坦出生在德国。”
- 主张 2:“爱因斯坦于 1879 年 3 月 20 日出生。”
- 主张
-
步骤 2:对于每个生成的主张,验证是否可以从给定上下文中推断出来。
- 主张 1:是
- 主张 2:否
-
步骤 3:使用上面所示的公式计算忠实度。
\[ \text{忠实度} = { \text{1} \over \text{2} } = 0.5 \]