You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenAI Embeddings API计算余弦相似度结果不符问题咨询

问题分析与解决

你遇到的核心问题是:使用OpenAI Embeddings API时,同义词(CSS与Cascading Style Sheets)的相似度未显著高于相关但不同的概念(CSS与HTML),这不符合预期。以下是具体原因排查和解决方向:

一、排查代码中的潜在错误

1. 验证Embedding向量的正确性

OpenAI的text-embedding-ada-002返回的向量是L2归一化的(每个向量的L2范数为1),且同一文本的向量输出稳定。你可以直接通过官方API接口获取三个文本的向量,手动计算点积(归一化向量的点积等价于余弦相似度),验证结果是否符合预期:

  • 正常情况下,css与cascading style sheets的相似度应在0.9以上,css与html的相似度约为0.8-0.85,两者存在明显差距。
  • 如果手动计算结果仍不符合预期,可能是API调用时参数错误(比如误用了其他模型);如果手动计算结果正常,说明你的ChatGptApi.GetEmbedding方法存在向量解析或传输错误。

2. 检查余弦相似度函数

你的函数逻辑本身正确,但可针对OpenAI的归一化向量优化:

  • 由于API返回的向量已经L2归一化,直接计算向量点积即可得到余弦相似度,无需重复计算范数。你可以尝试调用Similarity(embedding1, embedding2, normalized: true),观察结果是否变化。
  • 注意:double[]的长度应使用vector1.Length而非vector1.GetLength(0)(后者针对多维数组),虽然一维数组下两者结果一致,但前者更规范。

二、纠正对Embeddings的预期

你可能对Embeddings的语义相似度存在误解:

  • Embeddings的相似度衡量的是语义关联度,而非严格的“同义词等价”。即使是同一概念的不同表述,它们的向量也不会完全重合(相似度接近1),因为模型训练时会结合文本在语料中的使用场景。
  • CSS与HTML在Web开发语境中高度关联、共现频率极高,因此相似度本身也会较高,但正常情况下会明显低于CSS与全称的相似度。

三、其他验证方式

  • 尝试更长的文本输入:比如用"CSS is a style sheet language used for describing the presentation of a document written in HTML"和"Cascading Style Sheets is a style sheet language used for describing the presentation of a document written in HTML",两者的相似度会更接近1,因为上下文强化了它们的同义关系。
  • 验证向量维度:text-embedding-ada-002返回的向量是1536维,检查你的向量长度是否正确,避免因维度缺失导致相似度计算错误。

内容的提问来源于stack exchange,提问作者Marc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:26:35