Skip to main content

两两Embedding距离

衡量两个在共享或相似输入上的预测之间的相似性(或不相似性)的一种方法是将预测进行嵌入,并计算两个嵌入之间的向量距离[1]

您可以加载pairwise_embedding_distance评估器来实现此功能。

注意: 这返回一个距离分数,意味着数字越低,输出越相似,根据它们的嵌入表示。

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

from langchain.evaluation import load_evaluator

evaluator = load_evaluator("pairwise_embedding_distance")

API参考:

evaluator.evaluate_string_pairs(
prediction="Seattle is hot in June", prediction_b="Seattle is cool in June."
)
{'score': 0.0966466944859925}
evaluator.evaluate_string_pairs(
prediction="Seattle is warm in June", prediction_b="Seattle is cool in June."
)
{'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'>]
evaluator = load_evaluator(
"pairwise_embedding_distance", distance_metric=EmbeddingDistance.EUCLIDEAN
)

选择要使用的嵌入

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

from langchain.embeddings import HuggingFaceEmbeddings

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

API参考:

hf_evaluator.evaluate_string_pairs(
prediction="Seattle is hot in June", prediction_b="Seattle is cool in June."
)
{'score': 0.5486443280477362}
hf_evaluator.evaluate_string_pairs(
prediction="Seattle is warm in June", prediction_b="Seattle is cool in June."
)
{'score': 0.21018880025138598}

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