字符串距离
比较LLM或链的字符串输出与参考标签之间的最简单方法之一是使用字符串距离测量,例如Levenshtein或后缀距离。这可以与近似/模糊匹配标准一起用于非常基本的单元测试。
可以使用string_distance
评估器来访问,该评估器使用来自rapidfuzz库的距离度量。
注意:返回的分数是“距离”,意味着较低的分数通常是“更好”的。
有关更多信息,请查看StringDistanceEvalChain的参考文档。
# %pip install rapidfuzz
from langchain.evaluation import load_evaluator
evaluator = load_evaluator("string_distance")
API参考:
- load_evaluator来自
langchain.evaluation
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来自
langchain.evaluation
[<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}