Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Foundation Models
    • О сервисе Yandex Foundation Models
    • Мультимодальные модели
    • Эмбеддинги
    • Датасеты
    • Дообучение
    • Квоты и лимиты
  • Yandex Cloud ML SDK
  • Совместимость с OpenAI
  • Управление доступом
  • Правила тарификации
  • Публичные материалы
  • История изменений

В этой статье:

  • Модели векторного представления текста
  • Обращение к моделям
  • Пример использования эмбеддингов
  • Примеры использования
  1. Концепции
  2. Эмбеддинги

Векторизация текста

Статья создана
Yandex Cloud
Обновлена 30 апреля 2025 г.
  • Модели векторного представления текста
  • Обращение к моделям
  • Пример использования эмбеддингов
  • Примеры использования

Компьютеры обрабатывают любую информацию в виде чисел. Чтобы эффективно работать с текстами на естественных языках, модели искусственного интеллекта преобразовывают слова, фразы и предложения в числовые векторы фиксированного размера, которые сохраняют характеристики слов и связи между ними.

Процесс преобразования текста в такие векторы называется векторизацией, а результирующий вектор — эмбеддингом. Эмбеддинги хранят информацию о тексте и позволяют применять математические методы для обработки текстов. Так, с помощью эмбеддингов можно классифицировать информацию, сравнивать и сопоставлять тексты или организовать поиск по собственной базе знаний.

Модели векторного представления текста

Сервис Yandex Foundation Models предоставляет две модели векторизации текста.

Назначение URI Размерность выходного вектора Режимы работы
Векторизация больших текстов исходных данных, например статей документации. emb://<идентификатор_каталога>/text-search-doc/latest 256 Синхронный
Векторизация коротких текстов: поисковых запросов, обращений и т.п. emb://<идентификатор_каталога>/text-search-query/latest 256 Синхронный

Чтобы использовать модели векторного представления текста Yandex Foundation Models, необходима роль ai.languageModels.user или выше на каталог.

Обращение к моделям

Вы можете обращаться к моделям векторного представления текста несколькими способами.

SDK
API

При работе с моделями векторного представления текста через Yandex Cloud ML SDK используйте один из следующих форматов:

  • Название модели, передается в виде строки.

    model = (
      sdk.models.text_embeddings("text-search-doc")
    )
    
  • Название и версия модели, передаются в виде строк в полях model_name и model_version соответственно.

    model = (
      sdk.models.text_embeddings(model_name="text-search-query", model_version="latest")
    )
    
  • URI модели, передается в виде строки, содержащей полный URI модели.

    model = (
      sdk.models.text_embeddings("emb://b1gt6g8ht345********/text-search-query/latest")
    )
    

Чтобы обратиться к модели через REST API или gRPC API, в поле modelUri тела запроса укажите URI модели, содержащий идентификатор каталога. Сегмент /latest указывает на версию модели и является необязательным.

Пример:

{
  "modelUri":
    emb://b1gt6g8ht345********/text-search-doc/latest
  ...
}

Для обращения к Latest версии необязательно задавать версию модели явно, поскольку версия Latest используется по умолчанию.

Пример использования эмбеддингов

Примитивный пример показывает, как с помощью эмбеддингов можно найти наиболее близкий ответ на вопрос по базе знаний. В массиве doc_texts собраны исходные данные для векторизации (база знаний), переменная query_text содержит поисковый запрос. После получения эмбеддингов можно вычислить расстояние между каждым вектором в базе знаний и вектором запроса и найти наиболее близкий текст.

SDK
Python 3
#!/usr/bin/env python3
# pylint: disable=import-outside-toplevel

from __future__ import annotations
from yandex_cloud_ml_sdk import YCloudML

doc_texts = [
    """Александр Сергеевич Пушкин (26 мая [6 июня] 1799, Москва — 29 января [10 февраля] 1837, Санкт-Петербург)
    — русский поэт, драматург и прозаик, заложивший основы русского реалистического направления,
    литературный критик и теоретик литературы, историк, публицист, журналист.""",
    """Ромашка — род однолетних цветковых растений семейства астровые,
    или сложноцветные, по современной классификации объединяет около 70 видов невысоких пахучих трав,
    цветущих с первого года жизни.""",
]
query_text = "когда день рождения Пушкина?"


def main():
    import numpy as np
    from scipy.spatial.distance import cdist

    sdk = YCloudML(
        folder_id="<идентификатор_каталога>",
        auth="<API-ключ>",
    )

    query_model = sdk.models.text_embeddings("query")
    query_embedding = query_model.run(query_text)

    doc_model = sdk.models.text_embeddings("doc")
    doc_embeddings = [doc_model.run(text) for text in doc_texts]

    query_embedding = np.array(query_embedding)

    dist = cdist([query_embedding], doc_embeddings, metric="cosine")
    sim = 1 - dist
    result = doc_texts[np.argmax(sim)]
    print(result)


if __name__ == "__main__":
    main()

Где:

  • <идентификатор_каталога> — идентификатор каталога, в котором создан сервисный аккаунт.
  • <API-ключ> — API-ключ сервисного аккаунта для аутентификации в API.

Результат выполнения:

Александр Сергеевич Пушкин (26 мая [6 июня] 1799, Москва — 29 января [10 февраля] 1837, Санкт-Петербург)
  — русский поэт, драматург и прозаик, заложивший основы русского реалистического направления,
  литературный критик и теоретик литературы, историк, публицист, журналист.
import requests
import numpy as np
from scipy.spatial.distance import cdist

FOLDER_ID = "<идентификатор_каталога>"
IAM_TOKEN = "<IAM-токен>"
doc_uri = f"emb://{FOLDER_ID}/text-search-doc/latest"
query_uri = f"emb://{FOLDER_ID}/text-search-query/latest"
embed_url = "https://llm.api.cloud.yandex.net:443/foundationModels/v1/textEmbedding"
headers = {"Content-Type": "application/json", "Authorization": f"Bearer {IAM_TOKEN}", "x-folder-id": f"{FOLDER_ID}"}
doc_texts = [
  """Александр Сергеевич Пушкин (26 мая [6 июня] 1799, Москва — 29 января [10 февраля] 1837, Санкт-Петербург) — русский поэт, драматург и прозаик, заложивший основы русского реалистического направления, литературный критик и теоретик литературы, историк, публицист, журналист.""",
  """Ромашка — род однолетних цветковых растений семейства астровые, или сложноцветные, по современной классификации объединяет около 70 видов невысоких пахучих трав, цветущих с первого года жизни."""
]
query_text = "когда день рождения Пушкина?"

def get_embedding(text: str, text_type: str = "doc") -> np.array:
    query_data = {
        "modelUri": doc_uri if text_type == "doc" else query_uri,
        "text": text,
    }

    return np.array(
        requests.post(embed_url, json=query_data, headers=headers).json()["embedding"]
    )

query_embedding = get_embedding(query_text, text_type="query")
docs_embedding = [get_embedding(doc_text) for doc_text in doc_texts]

# Вычисляем косинусное расстояние
dist = cdist(query_embedding[None, :], docs_embedding, metric="cosine")

# Вычисляем косинусное сходство
sim = 1 - dist

# most similar doc text
print(doc_texts[np.argmax(sim)])

Где:

  • <идентификатор_каталога> — идентификатор каталога Yandex Cloud.
  • <IAM-токен> — IAM-токен аккаунта для аутентификации в API.

Результат выполнения:

Александр Сергеевич Пушкин (26 мая [6 июня] 1799, Москва — 29 января [10 февраля] 1837, Санкт-Петербург) — русский поэт, драматург и прозаик, заложивший основы русского реалистического направления, литературный критик и теоретик литературы, историк, публицист, журналист.

Примеры использования

  • Использовать эмбеддинги в поиске по базе знаний

См. также

  • Примеры работы с ML SDK на GitHub

Была ли статья полезна?

Предыдущая
Модели
Следующая
Датасеты
Проект Яндекса
© 2025 ООО «Яндекс.Облако»