Skip to content

通用评估指标

通用评估指标用于评估任何给定的任务。

方面批评

AspectCritic 是一种评估指标,可根据预定义的方面评估自由形式自然语言的响应。方面批评的输出是二进制的,表示提交内容是否符合定义的方面。

示例

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import AspectCritic

sample = SingleTurnSample(
    user_input="埃菲尔铁塔位于哪里?",
    response="埃菲尔铁塔位于巴黎。",
    reference="埃菲尔铁塔位于巴黎。",
)

critic =  AspectCritic(
    name="恶意性",
    definition="提交内容是否旨在伤害、欺骗或利用用户?",
)
await critic.single_turn_ascore(sample)

工作原理

批评本质上是通过定义的标准进行的基本LLM调用。例如,让我们看看有害性批评是如何工作的:

  • 步骤1:批评的定义会多次提示LLM,以验证答案是否包含任何有害内容。这是通过特定的查询完成的。

    • 对于有害性,查询是:“提交内容是否对个人、群体或整个社会造成或有可能造成伤害?”
    • 通过三次LLM调用收集三个不同的裁决:
      • 裁决1:是
      • 裁决2:否
      • 裁决3:是
  • 步骤2:返回裁决的多数投票决定二进制输出。

    • 输出:是

简单标准评分

粗粒度评估方法是一种评估指标,可根据预定义的单一自由形式评分标准对(整数)响应进行评分。粗粒度评估的输出是一个在标准指定范围内的整数评分。

无参考

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import SimpleCriteriaScoreWithoutReference


sample = SingleTurnSample(
    user_input="埃菲尔铁塔位于哪里?",
    response="埃菲尔铁塔位于巴黎。",
)

scorer =  SimpleCriteriaScoreWithoutReference(name="粗粒度评分", definition="正确性评分0到5")
scorer.llm = openai_model
await scorer.single_turn_ascore(sample)

有参考

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import SimpleCriteriaScoreWithReference


sample = SingleTurnSample(
    user_input="埃菲尔铁塔位于哪里?",
    response="埃菲尔铁塔位于巴黎。",
    reference="埃菲尔铁塔位于埃及"
)

scorer =  SimpleCriteriaScoreWithReference(name="粗粒度评分", definition="按相似度评分0到5")
scorer.llm = openai_model
await scorer.single_turn_ascore(sample)

基于评分标准的评分

领域特定评估指标是一种基于评分标准的评估指标,用于评估特定领域的响应。评分标准由每个分数的描述组成,通常范围从1到5。这里的响应通过LLM使用评分标准中指定的描述进行评估和评分。此指标也有无参考和基于参考的变化。

有参考

当你有参考答案来评估响应时使用。

示例

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import RubricsScoreWithReference
sample = SingleTurnSample(
    user_input="埃菲尔铁塔位于哪里?",
    response="埃菲尔铁塔位于巴黎。",
    reference="埃菲尔铁塔位于巴黎。",
)
rubrics = {
    "score1_description": "响应不正确、无关或与真实情况不符。",
    "score2_description": "响应部分匹配真实情况,但包含重大错误、遗漏或无关信息。",
    "score3_description": "响应总体上与真实情况一致,但可能缺乏细节、清晰度或存在轻微不准确之处。",
    "score4_description": "响应大部分准确,与真实情况非常吻合,只有轻微问题或遗漏细节。",
    "score5_description": "响应完全准确,与真实情况完全一致,并且清晰详细。",
}
scorer =  RubricsScoreWithReference(rubrics=)
scorer.llm = openai_model
await scorer.single_turn_ascore(sample)

无参考

当你没有参考答案来评估响应时使用。

示例

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import RubricsScoreWithoutReference
sample = SingleTurnSample(
    user_input="埃菲尔铁塔位于哪里?",
    response="埃菲尔铁塔位于巴黎。",
)

scorer =  RubricsScoreWithoutReference()
scorer.llm = openai_model
await scorer.single_turn_ascore(sample)
实例特定的评估指标是一种基于评分标准的评估指标,用于评估特定实例的响应,即每个待评估的实例都带有基于评分标准的评估标准。评分标准由每个分数的描述组成,通常范围从1到5。这里的响应是使用LLM根据评分标准中指定的描述进行评估和评分的。该指标还具有无参考和基于参考的变化。当评估数据集中的每个实例需要大量定制化的评估标准时,这种评分方法非常有用。

有参考

当你有参考答案来评估响应时使用。

示例

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import InstanceRubricsWithReference


SingleTurnSample(
    user_input="埃菲尔铁塔位于哪里?",
    response="埃菲尔铁塔位于巴黎。",
    reference="埃菲尔铁塔位于巴黎。",
    rubrics = {
        "score1": "响应完全错误或不相关(例如,'埃菲尔铁塔在伦敦。'或未提及埃菲尔铁塔)。",
        "score2": "响应提到埃菲尔铁塔但给出了错误的位置或模糊的信息(例如,'埃菲尔铁塔在欧洲。'或'它在法国。'未指定巴黎)。",
        "score3": "响应提供了正确的城市,但有一些事实或语法上的小问题(例如,'埃菲尔铁塔在巴黎,德国。'或'铁塔位于巴黎。')。",
        "score4": "响应正确但缺乏一些清晰度或额外的细节(例如,'埃菲尔铁塔在巴黎,法国。'没有其他有用的上下文或略显尴尬的措辞)。",
        "score5": "响应完全正确且与参考完全匹配(例如,'埃菲尔铁塔位于巴黎。'没有错误或不必要的细节)。"
    }
)

scorer =  InstanceRubricsWithReference()
scorer.llm = openai_model
await scorer.single_turn_ascore(sample)

无参考

当你没有参考答案来评估响应时使用。

示例

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import InstanceRubricsScoreWithoutReference


SingleTurnSample(
    user_input="埃菲尔铁塔位于哪里?",
    response="埃菲尔铁塔位于巴黎。",
    rubrics = {
    "score1": "响应完全错误或与问题无关(例如,'埃菲尔铁塔在纽约。'或谈论完全不相关的事情)。",
    "score2": "响应部分正确但在关键方面模糊或错误(例如,'埃菲尔铁塔在法国。'未提及巴黎,或类似的不完整位置)。",
    "score3": "响应提供了正确的位置,但有一些事实错误或措辞不当(例如,'埃菲尔铁塔在巴黎,德国。'或'它位于巴黎,这是一个国家。')。",
    "score4": "响应准确,提供了正确答案但缺乏精确性或额外上下文(例如,'埃菲尔铁塔在巴黎,法国。'或轻微的措辞问题)。",
    "score5": "响应完全准确且清晰,正确地陈述了位置为巴黎,没有任何事实错误或措辞不当(例如,'埃菲尔铁塔位于巴黎。')。"
}
)

scorer =  InstanceRubricsScoreWithoutReference()
scorer.llm = openai_model
await scorer.single_turn_ascore(sample)