Skip to main content

字符串距离

比较LLM或链的字符串输出与参考标签之间的最简单方法之一是使用字符串距离测量,例如Levenshtein或后缀距离。这可以与近似/模糊匹配标准一起用于非常基本的单元测试。

可以使用string_distance评估器来访问,该评估器使用来自rapidfuzz库的距离度量。

注意:返回的分数是“距离”,意味着较低的分数通常是“更好”的。

有关更多信息,请查看StringDistanceEvalChain的参考文档。

# %pip install rapidfuzz

from langchain.evaluation import load_evaluator

evaluator = load_evaluator("string_distance")

API参考:

evaluator.evaluate_strings(
prediction="The job is completely done.",
reference="The job is done",
)
{'score': 0.11555555555555552}
# 结果纯粹基于字符,因此在涉及否定时不太有用
evaluator.evaluate_strings(
prediction="The job is done.",
reference="The job isn't done",
)
{'score': 0.0724999999999999}

配置字符串距离度量

默认情况下,StringDistanceEvalChain使用Levenshtein距离,但它还支持其他字符串距离算法。可以使用distance参数进行配置。

from langchain.evaluation import StringDistance

list(StringDistance)

API参考:

[<StringDistance.DAMERAU_LEVENSHTEIN: 'damerau_levenshtein'>,
<StringDistance.LEVENSHTEIN: 'levenshtein'>,
<StringDistance.JARO: 'jaro'>,
<StringDistance.JARO_WINKLER: 'jaro_winkler'>]
jaro_evaluator = load_evaluator(
"string_distance", distance=StringDistance.JARO
)
jaro_evaluator.evaluate_strings(
prediction="The job is completely done.",
reference="The job is done",
)
{'score': 0.19259259259259254}
jaro_evaluator.evaluate_strings(
prediction="The job is done.",
reference="The job isn't done",
)
{'score': 0.12083333333333324}