OpenAI 的 Embeddings API 将文本转换为浮点数列表(向量)。向量之间的距离衡量了它们的相关性:距离越小(通常使用余弦相似度),表示语义越相关;距离越大,表示语义差异越大。
什么是 Embeddings?
Embedding 是一个浮点数向量(列表)。
例如:[0.00230642, -0.00932729, ...]
如果两个文本的 Embedding 向量在多维空间中距离很近,说明它们含义相似。这对于关键词匹配无法解决的场景(例如“猫”和“喵星人”)非常有用。
常见用例
- 搜索 (Search): 根据相关性对结果进行排序。
- 聚类 (Clustering): 将文本分组。
- 推荐 (Recommendations): 推荐具有相关文本字符串的项目。
- 异常检测 (Anomaly detection): 识别相关性极低的离群值。
- 多样性测量 (Diversity measurement): 分析相似度分布。
- 分类 (Classification): 将文本归类到最相似的标签。
如何使用
获取 Embeddings
from openai import OpenAI
client = OpenAI()
response = client.embeddings.create(
input="Your text string goes here",
model="text-embedding-3-small"
)
print(response.data[0].embedding)
模型选择
OpenAI 推荐使用第三代模型(v3):
| 模型 | 用途 | 性能 | 成本 |
|---|---|---|---|
| text-embedding-3-small | 高效、低成本,适合大多数任务 | 优于 v2 | 极低 |
| text-embedding-3-large | 最高精度,适合需要极致效果的场景 | 最佳 | 较高 |
| text-embedding-ada-002 | 上一代模型 (v2) | 良好 | - |
降维 (Reducing dimensions)
text-embedding-3 系列模型支持通过 dimensions 参数缩减输出向量的维度(例如从 1536 降至 256),而不会显著损失性能。这有助于节省向量数据库的存储空间。
局限性与风险
- Social Bias (社会偏见): 模型可能包含训练数据中的偏见或刻板印象。
- Blindness to recent events: Embeddings 模型也是静态的,不知道最新的事件(但这通常影响不大,因为它们主要理解语义关系)。