1.嵌入(Embeddings)简介
1.1. 什么是嵌入(Embeddings)
嵌入,或者叫做Embeddings,在机器学习领域,尤其是在处理自然语言处理(NLP)问题时,是一种将文本数据转换为数值向量的技术。在人类语言中,单词和短语的意义是由它们的上下文和使用环境决定的。嵌入的目标是捕获这些语言单位的语义,使计算机可以理解和处理它们。
Embeddings的核心思想是将类似意思的词语映射到数学空间中的临近点,即,将词语表示为高维空间中的点,这样语义上相似的词(例如“国王”和“王后”)在空间中的距离会很近。Embeddings通常由浮点数组成,即使是非常不同的文本片段(如“dog”和“canine”),也可以有相似的嵌入表示。
提示:作为应用开发者,你可以简单的理解意思相近的两个文本句子,他们之间的Embeddings向量相似度是很高的。
1.2. 嵌入的应用场景
Embeddings广泛应用于多种场景,下面是一些主要的用例:
- 搜索(Search):通过嵌入特征,可以根据与查询文本的相关性来排列搜索结果。
- 聚类(Clustering):嵌入可以帮助识别和归纳语义上相似的文本片段,形成群组。
- 推荐系统(Recommendations):基于相关性推荐可以帮助发现并推荐与已知项相似的其他项。
- 异常检测(Anomaly Detection):嵌入可以用来识别与主要数据集显著不同的数据点。
- 多样性度量(Diversity Measurement):嵌入也可以用于分析不同文本之间的相似性分布。
- 分类(Classification):通过将文本与一组已知标签的嵌入进行比较,可以将其分类到最相似的类别中。
2.OpenAI Embeddings介绍
2.1. OpenAI Embeddings模型概览
OpenAI提供了第三代嵌入模型,包括text-embedding-3-small
和text-embedding-3-large
。这些模型是基于OpenAI独特的深度学习技术构建的,旨在提供高度多语言性能,同时它们也在设法降低成本。
这些模型在处理嵌入时,具有各自独特的特点。例如,text-embedding-3-small
提供了1536维的嵌入向量,而text-embedding-3-large
则提供了3072维的嵌入向量,用于涵盖更加复杂的文本特性。通过调整参数,可以控制嵌入的维数,以满足特定应用场景的需求。
2.2. 模型的选择与使用
选择合适的嵌入模型取决于特定应用的要求。以下是如何在不同应用场景中做出选择:
在关注性能的场景下:如果需要捕获更细粒度的语义信息,比如在精细化推荐系统或者高精度文本分类中,通常推荐使用
text-embedding-3-large
,虽然它的成本比小模型要高,但能提供更丰富的文本特征表示。在成本敏感型应用中:对于需要处理大量数据,但对精度要求不是特别高的应用,例如初始的数据探索或者快速原型开发,那么
text-embedding-3-small
是一个更经济的选择,因为它在保持相对较高性能的同时,可以显著减少成本。多语言环境:由于这些嵌入模型具有较高的多语言性能表现,它们在处理跨语言或多种语言场景时特别有用,这使其在全球化应用中成为理想的选择。
选择正确的嵌入模型将依赖于具体需求、数据的复杂性以及期望达到的平衡点(性能与成本之间的平衡)。
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等。
请参考下面向量数据库教程: