AI
January 19, 2024
YandexGPT API. Часть 2. Embeddings
Embeddings (векторные представления текста) обычно используют для измерения связанности текстовых строк и применяются в таких задачах, как:
- Поиск (где результаты ранжируются по релевантности строке запроса)
- Кластеризация (когда текстовые строки группируются по сходству)
- Рекомендации (где рекомендуются элементы со связанными текстовыми смыслами)
- Измерение разнообразия (когда анализируется распределение сходства)
- Классификация (где текстовые строки классифицируются по наиболее похожей метке)
Обычно embedding это массив чисел, представляющий вектор определённого текста. Посмотрим на примерах кода, как это генерируется и как это выглядит в результате.
Прежде всего, предлагаю ознакомиться с первой частью статьи. Где я показал, как получить api-ключ для запросов.
Пример кода на TypeScript
Нам понадобится библиотека для http-запросов. Я возьму axios
npm i --save axios
yarn add axios
bun add axios
import axios from 'axios';
const yandexgpt_key = '<секретный api-ключ выше>';
async function main() {
try {
const data = {
modelUri: `emb://<идентификатор_каталога>/text-search-doc/latest`,
text: `Любой текст для генерации embedding`
};
const response = await axios.post(
`https://llm.api.cloud.yandex.net/foundationModels/v1/textEmbedding`,
data,
{
headers: {
'Authorization': `Api-Key ${yandexgpt_key}`
},
}
);
console.log(response.status);
console.log(JSON.stringify(response.data, null, 2));
} catch (err) {
console.error('error:', err)
}
}
main();Параметры запроса и пример ответа разберу ниже после примера кода на Python.
Пример кода на Python
import requests
gpt_api_key = '<секретный api-ключ выше>'
def yandex_gpt_embedding(text: str):
response = requests.post(
"https://llm.api.cloud.yandex.net/foundationModels/v1/textEmbedding",
headers={
"Authorization": f"Api-Key {gpt_api_key}"
},
json={
"modelUri": "emb://<идентификатор_каталога>/text-search-doc/latest",
"text": text
},
)
return response.json()
print(yandex_gpt_embedding("Любой текст для генерации embedding"))Разбор параметров и ответа
Согласно документации в body принимается следующая структура JSON:
{
"modelUri": "string",
"text": "string"
}В ответ нам возвращается структура следующего вида:
{
"embedding": [
-0.019805908203125,
0.059234619140625,
-0.07427978515625,
0.0361328125,
...
0.0200042724609375,
0.04119873046875,
-0.01357269287109375
],
"numTokens": "8",
"modelVersion": "06.12.2023"
}embedding— вектор значений (длина получается 256)numTokens— число токенов, которое входящего текста. Как правило это не всегда число слов и знаков препинания. Модель определяет это сама.modelVersion— модель версии, используемой для генерацииembedding.
- https://cloud.yandex.ru/ru/docs/yandexgpt/api-ref/authentication
- https://yandex.cloud/en/docs/foundation-models/embeddings/api-ref/Embeddings/textEmbedding
- https://yandex.cloud/ru/docs/foundation-models/concepts/embeddings
- https://cloud.yandex.ru/ru/docs/yandexgpt/pricing#pricing-embedding