两两Embedding距离
衡量两个在共享或相似输入上的预测之间的相似性(或不相似性)的一种方法是将预测进行嵌入,并计算两个嵌入之间的向量距离[1]。
您可以加载pairwise_embedding_distance
评估器来实现此功能。
注意: 这返回一个距离分数,意味着数字越低,输出越相似,根据它们的嵌入表示。
请查看参考文档以获取有关PairwiseEmbeddingDistanceEvalChain的更多信息。
from langchain.evaluation import load_evaluator
evaluator = load_evaluator("pairwise_embedding_distance")
API参考:
- load_evaluator 来自
langchain.evaluation
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 来自
langchain.evaluation
[<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参考:
- HuggingFaceEmbeddings 来自
langchain.embeddings
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
)更不可靠。