Skip to main content

Embedding距离评估

为了衡量预测和参考标签字符串之间的语义相似性(或不相似性),您可以使用向量距离度量两个嵌入表示之间的embedding_distance评估器。[1]

注意:这返回一个距离分数,意味着数字越低,预测与参考的嵌入表示越相似

请查看参考文档以获取有关EmbeddingDistanceEvalChain的更多信息。

from langchain.evaluation import load_evaluator

evaluator = load_evaluator("embedding_distance")

API参考:

evaluator.evaluate_strings(prediction="I shall go", reference="I shan't go")

{'score': 0.0966466944859925}

evaluator.evaluate_strings(prediction="I shall go", reference="I will go")

{'score': 0.03761174337464557}

选择距离度量

默认情况下,评估器使用余弦距离。如果需要,您可以选择其他距离度量。

from langchain.evaluation import EmbeddingDistance

list(EmbeddingDistance)

API参考:

[<EmbeddingDistance.COSINE: 'cosine'>,
<EmbeddingDistance.EUCLIDEAN: 'euclidean'>,
<EmbeddingDistance.MANHATTAN: 'manhattan'>,
<EmbeddingDistance.CHEBYSHEV: 'chebyshev'>,
<EmbeddingDistance.HAMMING: 'hamming'>]
# 您可以通过枚举或原始Python字符串加载
evaluator = load_evaluator(
"embedding_distance", distance_metric=EmbeddingDistance.EUCLIDEAN
)

选择要使用的嵌入

构造函数默认使用OpenAI嵌入,但您可以根据需要进行配置。下面使用huggingface本地嵌入。

from langchain.embeddings import HuggingFaceEmbeddings

embedding_model = HuggingFaceEmbeddings()
hf_evaluator = load_evaluator("embedding_distance", embeddings=embedding_model)

API参考:

hf_evaluator.evaluate_strings(prediction="I shall go", reference="I shan't go")

{'score': 0.5486443280477362}

hf_evaluator.evaluate_strings(prediction="I shall go", reference="I will go")

{'score': 0.21018880025138598}

1. 注意:在语义相似性方面,这通常比旧的字符串距离度量(例如StringDistanceEvalChain中的度量)产生更好的结果,尽管它往往比直接使用LLM的评估器(例如QAEvalChainLabeledCriteriaEvalChain)不太可靠。