В OpenAI есть довольно много руководств по embeddings
. Я не могу понять, как они работают.
Ссылаясь на https://platform.openai.com/docs/guides/embeddings/what-are-embeddings, embedding
— это vector
или list
. Строка передается модели embedding
, и модель возвращает число (просто говоря). Я могу использовать этот номер(а).
Если я использую простую строку, чтобы получить ее embeddings
, я получаю огромный список
result = get_embedding("I live in space", engine = "textsearchcuriedoc001mc")
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
Вопрос 1 — как этот огромный список коррелирует с моим текстом из 4 слов?
Вопрос 2 -
Я создаю embeddings
текста, который хочу использовать в запросе. Обратите внимание, что это точно так же, как текст оригинального контента I live in space
queryembedding = get_embedding(
'I live in space',
engine = "textsearchcuriequery001mc"
)
queryembedding
Когда я запускаю cosine similarity
, значение равно 0.42056650555103214
.
similarity = cosine_similarity(embeddings_of_i_live,queryembedding)
similarity
Я получаю ценность 0.42056650555103214
Разве значение не должно быть 1
, чтобы указать идентичное значение?
Q1:
Как этот огромный список коррелирует с моим текстом из 4 слов?
A1: Допустим, вы хотите использовать модель OpenAI text-embedding-ada-002
. Независимо от того, что вы вводите, вы всегда получите 1536-мерный вектор вложения (т.е. внутри 1536 чисел). Вы, вероятно, знакомы с трехмерным пространством (т. е. X, Y, Z). Ну, это 1536-мерное пространство, которое очень сложно представить. Почему внутри вектора встраивания ровно 1536 чисел? Потому что модель text-embedding-ada-002
имеет выходную размерность 1536. Это предопределено.
Q2:
Я создаю вложения текста, который хочу использовать в запросе. Обратите внимание, что это точно такой же, как текст исходного контента:
I live in space
. Когда я запускаю косинусное сходство, значение равно0.42056650555103214
. Должно ли значение быть1
, чтобы указать идентичное значение?
A1: Да, значение должно быть 1
, если вы вычисляете косинусное сходство между двумя идентичными текстами. Смотрите пример здесь.
Если вы сравниваете два идентичных фрагмента текста и не получаете косинусное сходство, равное 1, значит, что-то не так с вашим процессом. Ваши векторы совпадают? Если это так, вы неправильно вычисляете косинусное сходство.
странно, я получаю значение
cosine similarity
как0.42056650555103214
. я обновил вопрос