跳过内容

传统自然语言处理(NLP)指标

非LLM字符串相似性

NonLLMStringSimilarity 指标使用传统的字符串距离度量方法(如 Levenshtein, Hamming, 和 Jaro)来衡量参考文本和响应之间的相似性。此指标无需依赖大型语言模型(LLMs),即可用于评估 responsereference 文本的相似性。该指标返回一个介于0到1之间的分数,其中1表示响应和参考文本完全匹配。这是一个非LLM指标。

示例

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics._string import NonLLMStringSimilarity

sample = SingleTurnSample(
    response="The Eiffel Tower is located in India.",
    reference="The Eiffel Tower is located in Paris."
)

scorer = NonLLMStringSimilarity()
await scorer.single_turn_ascore(sample)
输出
0.8918918918918919

可以从 DistanceMeasure 中选择可用的字符串距离度量方法。这是一个使用 Hamming 距离的示例。

from ragas.metrics._string import NonLLMStringSimilarity, DistanceMeasure

scorer = NonLLMStringSimilarity(distance_measure=DistanceMeasure.HAMMING)

BLEU分数

BleuScore 分数是一种通过将 responsereference 进行比较来评估其质量的指标。它基于 n-gram 精确率和简洁性惩罚来衡量响应与参考文本之间的相似性。BLEU 分数最初设计用于评估机器翻译系统,但也用于其他自然语言处理任务。BLEU 分数范围从0到1,其中1表示响应和参考文本完全匹配。这是一个非LLM指标。

示例

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import BleuScore

sample = SingleTurnSample(
    response="The Eiffel Tower is located in India.",
    reference="The Eiffel Tower is located in Paris."
)

scorer = BleuScore()
await scorer.single_turn_ascore(sample)
输出
0.7071067811865478

ROUGE分数

RougeScore 分数是一组用于评估自然语言生成质量的指标。它基于 n-gram 召回率、精确率和 F1 分数来衡量生成的 responsereference 文本之间的重叠程度。ROUGE 分数范围从0到1,其中1表示响应和参考文本完全匹配。这是一个非LLM指标。

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import RougeScore

sample = SingleTurnSample(
    response="The Eiffel Tower is located in India.",
    reference="The Eiffel Tower is located in Paris."
)

scorer = RougeScore()
await scorer.single_turn_ascore(sample)
输出
0.8571428571428571

可以将 rouge_type 设置为 rouge1rougeL,分别基于 unigrams 或最长公共子序列计算 ROUGE 分数。

scorer = RougeScore(rouge_type="rouge1")

可以将 mode 设置为 precisionrecallfmeasure,分别基于精确率、召回率或 F1 分数计算 ROUGE 分数。

scorer = RougeScore(mode="recall")

精确匹配

ExactMatch 指标检查响应是否与参考文本完全相同。这在需要确保生成的响应与预期输出逐字匹配的场景中非常有用,例如工具调用中的参数等。如果响应与参考文本完全匹配,该指标返回1;否则返回0。

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import ExactMatch

sample = SingleTurnSample(
    response="India",
    reference="Paris"
)

scorer = ExactMatch()
await scorer.single_turn_ascore(sample)
输出
0.0

字符串存在性

StringPresence 指标检查响应是否包含参考文本。这在需要确保生成的响应包含特定关键词或短语的场景中非常有用。如果响应包含参考文本,该指标返回1;否则返回0。

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import StringPresence

sample = SingleTurnSample(
    response="The Eiffel Tower is located in India.",
    reference="Eiffel Tower"
)
scorer = StringPresence()
await scorer.single_turn_ascore(sample)
输出
1.0