一架梯子,一头程序猿,仰望星空!
OpenAI开发教程 > 内容正文

Embeddings(文本嵌入)


1.嵌入(Embeddings)简介

1.1. 什么是嵌入(Embeddings)

嵌入,或者叫做Embeddings,在机器学习领域,尤其是在处理自然语言处理(NLP)问题时,是一种将文本数据转换为数值向量的技术。在人类语言中,单词和短语的意义是由它们的上下文和使用环境决定的。嵌入的目标是捕获这些语言单位的语义,使计算机可以理解和处理它们。

Embeddings的核心思想是将类似意思的词语映射到数学空间中的临近点,即,将词语表示为高维空间中的点,这样语义上相似的词(例如“国王”和“王后”)在空间中的距离会很近。Embeddings通常由浮点数组成,即使是非常不同的文本片段(如“dog”和“canine”),也可以有相似的嵌入表示。

提示:作为应用开发者,你可以简单的理解意思相近的两个文本句子,他们之间的Embeddings向量相似度是很高的。

1.2. 嵌入的应用场景

Embeddings广泛应用于多种场景,下面是一些主要的用例:

  1. 搜索(Search):通过嵌入特征,可以根据与查询文本的相关性来排列搜索结果。
  2. 聚类(Clustering):嵌入可以帮助识别和归纳语义上相似的文本片段,形成群组。
  3. 推荐系统(Recommendations):基于相关性推荐可以帮助发现并推荐与已知项相似的其他项。
  4. 异常检测(Anomaly Detection):嵌入可以用来识别与主要数据集显著不同的数据点。
  5. 多样性度量(Diversity Measurement):嵌入也可以用于分析不同文本之间的相似性分布。
  6. 分类(Classification):通过将文本与一组已知标签的嵌入进行比较,可以将其分类到最相似的类别中。

2.OpenAI Embeddings介绍

2.1. OpenAI Embeddings模型概览

OpenAI提供了第三代嵌入模型,包括text-embedding-3-smalltext-embedding-3-large。这些模型是基于OpenAI独特的深度学习技术构建的,旨在提供高度多语言性能,同时它们也在设法降低成本。

这些模型在处理嵌入时,具有各自独特的特点。例如,text-embedding-3-small提供了1536维的嵌入向量,而text-embedding-3-large则提供了3072维的嵌入向量,用于涵盖更加复杂的文本特性。通过调整参数,可以控制嵌入的维数,以满足特定应用场景的需求。

2.2. 模型的选择与使用

选择合适的嵌入模型取决于特定应用的要求。以下是如何在不同应用场景中做出选择:

  1. 在关注性能的场景下:如果需要捕获更细粒度的语义信息,比如在精细化推荐系统或者高精度文本分类中,通常推荐使用text-embedding-3-large,虽然它的成本比小模型要高,但能提供更丰富的文本特征表示。

  2. 在成本敏感型应用中:对于需要处理大量数据,但对精度要求不是特别高的应用,例如初始的数据探索或者快速原型开发,那么text-embedding-3-small是一个更经济的选择,因为它在保持相对较高性能的同时,可以显著减少成本。

  3. 多语言环境:由于这些嵌入模型具有较高的多语言性能表现,它们在处理跨语言或多种语言场景时特别有用,这使其在全球化应用中成为理想的选择。

选择正确的嵌入模型将依赖于具体需求、数据的复杂性以及期望达到的平衡点(性能与成本之间的平衡)。

3. 如何使用Embeddings

3.1 使用curl调用Embeddings API

curl是一个常用的命令行工具,用于发送HTTP请求。下面的例子展示了如何使用curl来获取文本的嵌入表示:

curl https://api.openai.com/v1/embeddings \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -d '{
        "input": "机器学习是人工智能的一个分支。",
        "model": "text-embedding-3-small"
    }'

在上述命令中,$OPENAI_API_KEY变量包含了用户的OpenAI API密钥,在实际使用时应将其替换为有效的密钥。

执行该命令后,OpenAI的Embeddings API将返回包含文本嵌入表示的响应。下面是一个API调用结果的示例:

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [  // 这里就是特征向量
        -0.006929283495992422,
        -0.005336422007530928,
        ...  // 此处省略其余数字以便展示
        -4.547132266452536e-05,
        -0.024047505110502243
      ],
    }
  ],
  "model": "text-embedding-3-small",
  "usage": {
    "prompt_tokens": 5,
    "total_tokens": 5
  }
}

3.2 使用Python客户端调用Embeddings API

除了使用curl直接在命令行中调用API之外,你也可以使用Python客户端。这需要先安装openai官方库。以下是如何用Python获取文本嵌入表示的代码实例:

import openai

openai.api_key = 'YOUR_OPENAI_API_KEY'  # 替换为你的OpenAI API密钥

response = openai.Embedding.create(
  input="人工智能正在改变世界。",
  model="text-embedding-3-small"
)

embedding_vector = response['data'][0]['embedding']
print(embedding_vector)

执行此Python脚本,你会得到类似于使用curl时的嵌入向量。这个向量是一个浮点数列表,表示了输入文本在嵌入空间中的数值表示。

调用结果如下:

[-0.0032198824, 0.0022555287, ..., 0.0015886585, -0.0021505365]

3.2 操作嵌入向量

OpenAI只是提供了Embeddings文本向量化计算模型,如果你想使用Embeddings实现文本相似搜索之类的功能,你需要学习向量数据库知识,例如:Qdrant、Chroma、Milvus等。

请参考下面向量数据库教程:


关联主题