OpenAI Embeddings API:嵌入如何工作?

Man*_*dha 4 azure openai-api azure-openai

embeddingsOpenAI有相当多的教程。我无法理解它们是如何工作的。

参考https://platform.openai.com/docs/guides/embeddings/what-are-embeddings, anembedding是 avectorlist。将字符串传递给embedding模型,模型返回一个数字(用最简单的术语来说)。我可以使用这个号码。

如果我使用一个简单的字符串来获取它embeddings,我会得到一个巨大的列表

result = get_embedding("I live in space", engine = "textsearchcuriedoc001mc")
Run Code Online (Sandbox Code Playgroud)

result打印时

[5.4967957112239674e-05,
 -0.01301578339189291,
 -0.002223075833171606,
 0.013594076968729496,
 -0.027540158480405807,
 0.008867159485816956,
 0.009403547272086143,
 -0.010987567715346813,
 0.01919262297451496,
 0.022209804505109787,
 -0.01397960539907217,
 -0.012806257233023643,
 -0.027908924967050552,
 0.013074451126158237,
 0.024942029267549515,
 0.0200139675289392 , ..... -> truncated this much, much, much longer list 
Run Code Online (Sandbox Code Playgroud)

问题 1 - 这个庞大的列表与我的 4 字文本有何关联?

问题2 -

我创建embeddings了要在查询中使用的文本。注意,与原文内容的文字完全一致I live in space

queryembedding = get_embedding(
        'I live in space',
        engine="textsearchcuriequery001mc"
    )
queryembedding
Run Code Online (Sandbox Code Playgroud)

当我跑步时cosine similarity,值为0.42056650555103214.

similarity = cosine_similarity(embeddings_of_i_live,queryembedding)
similarity
Run Code Online (Sandbox Code Playgroud)

我得到价值0.42056650555103214

该值不应该1表示相同的值吗?

Rok*_*nko 5

问题一:

这个庞大的列表与我的 4 字文本有何关联?

A1:假设您想使用 OpenAItext-embedding-ada-002模型。无论你的输入是什么,你总是会得到一个1536维的嵌入向量(即里面有1536个数字)。您可能熟悉 3 维空间(即 X、Y、Z)。嗯,这是一个1536维的空间,这是非常难以想象的。为什么嵌入向量中有 1536 个数字?因为该text-embedding-ada-002模型的输出维度为1536。它是预先定义的。


问题2:

我创建了要在查询中使用的文本的嵌入。注意,与原文内容的文字完全一致:I live in space。当我运行余弦相似度时,该值为0.42056650555103214。该值应该1表示相同的值吗?

A2:是的,如果计算两个相同文本之间的余弦相似度,该值应该是。1请参阅此处的示例。

有关基于嵌入的语义搜索的示例,请参阅此答案