语义相似度
语义相似度
语义相似度指标评估生成答案与参考(真实)答案之间的语义相似性。其取值范围为0到1,分数越高表示生成答案与真实答案之间的一致性越好。
该指标使用嵌入和余弦相似度来衡量两个答案在语义上的相似程度,这可以为评估生成答案的质量提供有价值的见解。
示例
from openai import AsyncOpenAI
from ragas.embeddings import OpenAIEmbeddings
from ragas.metrics.collections import SemanticSimilarity
# Setup embeddings
client = AsyncOpenAI()
embeddings = OpenAIEmbeddings(model="text-embedding-3-small", client=client)
# Create metric
scorer = SemanticSimilarity(embeddings=embeddings)
# Evaluate
result = await scorer.ascore(
reference="The Eiffel Tower is located in Paris. It has a height of 1000ft.",
response="The Eiffel Tower is located in Paris."
)
print(f"Semantic Similarity Score: {result.value}")
输出
同步用法
如果你偏好同步代码,可以使用 .score() 方法来代替 .ascore()
计算方法
示例
参考答案:阿尔伯特·爱因斯坦的相对论彻底改变了我们对宇宙的理解。
高相似度答案:爱因斯坦开创性的相对论改变了我们对宇宙的认知。
低相似度答案:艾萨克·牛顿的运动定律极大地影响了经典物理学。
让我们来看看高相似度答案的语义相似度是如何计算的
- 第一步: 使用指定的嵌入模型将参考答案向量化。
- 第二步: 使用相同的嵌入模型将生成的答案向量化。
- 第三步: 计算两个向量之间的余弦相似度。
- 第四步: 余弦相似度值(0-1)即为最终得分。
旧版指标 API
以下示例使用旧版指标 API 模式。对于新项目,我们建议使用上面显示的基于集合的 API。
弃用时间表
此 API 将在 0.4 版本中被弃用,并在 1.0 版本中被移除。请迁移到上面显示的基于集合的 API。
使用 SingleTurnSample 的示例
from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import SemanticSimilarity
from ragas.embeddings import LangchainEmbeddingsWrapper
sample = SingleTurnSample(
response="The Eiffel Tower is located in Paris.",
reference="The Eiffel Tower is located in Paris. It has a height of 1000ft."
)
scorer = SemanticSimilarity(embeddings=LangchainEmbeddingsWrapper(evaluator_embedding))
await scorer.single_turn_ascore(sample)
输出