ym88659208ym87991671
Векторное представление текста | Документация для разработчиков

Векторное представление текста

Обновлено 11 апреля 2025

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

Векторное представление текста (эмбеддинг) используется для:

  • улучшения качества поиска — эмбеддинги позволяют оценивать сходство между текстовыми запросами на основе расстояния между соответствующими векторами. Это позволяет улучшить качество поиска и релевантность результатов;
  • уменьшения размерности данных — с помощью эмбеддингов вы можете представить текстовые запросы в виде числовых векторов, что позволяет снизить размерность данных и ускорить их обработку;
  • обеспечения универсальности — эмбеддинги можно использовать для различных задач обработки естественного языка, таких как Retrieval Augmented Generation (RAG), классификация текстов, кластеризация и других.

Для преобразования строк в эмбеддинги в GigaChat API есть метод POST /embeddings. Вы можете использовать одну из двух моделей: Embeddings или EmbeddingsGigaR. Для выбора модели передайте ее название в поле model.

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

Подробнее в разделе Тарифы и оплата.

Пример запроса на создание эмбеддинга:

curl https://gigachat.devices.sberbank.ru/api/v1/embeddings \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <токен доступа>' \
--data '{
"model": "Embeddings",
"input": [
"Расскажи о современных технологиях",
"Какие новинки в мире IT?"
]
}'

Параметры запроса:

model
string
required

Название модели, которая будет использована для создания эмбеддинга.

Возможные значения:

  • Embeddings — базовая модель, доступная по умолчанию для векторного представления текстов;
  • EmbeddingsGigaR — продвинутая модель с большим размером контекста.

Запросы тарифицируются одинаково, независимо от использованной модели.

Для улучшения результатов при работе с моделью EmbeddingsGigaR следуйте рекомендациям в разделе Векторное представление текста.

input
string[]
required

Строка или массив строк, которые будут использованы для генерации эмбеддинга.

Пример ответа:

{
"object": "list",
"data": [
{
"object": "embedding",
"embedding": [
0.0023064255,
-0.009327292,
...
-0.0028842222
],
"index": 0
}
],
"model": "Embeddings"
}

Параметры ответа:

object
string
required

По умолчанию: list

Формат структуры данных.

data object[]required
  • Array [
  • object
    string
    required

    По умолчанию: embedding

    Тип объекта.

    embedding
    float[]
    required

    Массив чисел, представляющий значения эмбеддинга для предоставленного текста.

    index
    integer
    required

    Индекс, соответствующий индексу текста, полученного в массиве input запроса.

    usage objectrequired
    prompt_tokens
    number

    Количество токенов в строке, для которой сгенерирован эмбеддинг.

  • ]
  • model
    string

    Название модели, которая используется для вычисления эмбеддинга.

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

    Поиск по неструктурированному тексту — один из наиболее распространенных сценариев использования эмбеддингов. Для этого:

    1. Создайте векторное представление текста, по которому будет выполняться поиск.
    2. Сохраните эмбеддинг в векторной базе данных.
    3. Выполните запрос к базе.

    Ниже показан простой пример реализации поиска по эмбеддингу, реализованный на Python с помощью LangChain, партнерского пакета langchain-gigachat и векторного хранилища Chroma.

    Пример демонстрирует поиск по документам — экземплярам LangChain-класса Document, который представляет единицу текста и связанные с ним метаданные. Класс имеет два атрибута:

    • page_content — строку, представляющую содержимое;
    • metadata — словарь, содержащий произвольные метаданные.

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

    Для запуска примера установите зависимости:

    pip install langchain-gigachat langchain-chroma

    Создайте несколько документов и сохраните их в векторном хранилище:

    from langchain_core.documents import Document
    from langchain_chroma import Chroma
    from langchain_gigachat.embeddings import GigaChatEmbeddings

    # Список документов, по которым будет выполняться поиск
    documents = [
    Document(
    page_content="Собаки — отличные компаньоны, которые известны своей преданностью и дружелюбием.",
    metadata={"source": "mammal-pets-doc"},
    ),
    Document(
    page_content="Кошки — независимые животные, которым нужно собственное пространство.",
    metadata={"source": "mammal-pets-doc"},
    ),
    Document(
    page_content="Золотые рыбки — отличные домашние животные для начинающих. За ними достаточно просто ухаживать.",
    metadata={"source": "fish-pets-doc"},
    ),
    Document(
    page_content="Попугаи — умные птицы, которые способны имитировать человеческую речь.",
    metadata={"source": "bird-pets-doc"},
    ),
    Document(
    page_content="Кролики — социальные животные, которым нужно много места, чтобы прыгать.",
    metadata={"source": "mammal-pets-doc"},
    ),
    ]

    # Создайте векторное хранилище и передайте в него список документов и модель для создания векторного представления
    vectorstore = Chroma.from_documents(
    documents,
    embedding = GigaChatEmbeddings(
    credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", verify_ssl_certs=False
    ),
    )

    Теперь вы можете использовать методы vectorstore для выполнения поиска по документам.

    Поиск по документам на основе схожести с текстовым запросом:

    vectorstore.similarity_search("кошка")

    Результат поиска:

    [Document(page_content='Кошки — независимые животные, которым нужно собственное пространство.', metadata={'source': 'mammal-pets-doc'}),
    Document(page_content='Собаки — отличные компаньоны, которые известны своей преданностью и дружелюбием.', metadata={'source': 'mammal-pets-doc'}),
    Document(page_content='Кролики — социальные животные, которым нужно много места, чтобы прыгать.', metadata={'source': 'mammal-pets-doc'}),
    Document(page_content='Попугаи — умные птицы, которые способны имитировать человеческую речь.', metadata={'source': 'bird-pets-doc'})]

    Оценка схожести запроса и содержимого хранилища:

    # Оценка зависит от выбранного векторного хранилища.
    # Chroma возвращает метрику расстояния, которая должна варьироваться обратно пропорционально схожести.

    vectorstore.similarity_search_with_score("кошка")

    Результат оценки:

    [(Document(page_content='Кошки — независимые животные, которым нужно собственное пространство.', metadata={'source': 'mammal-pets-doc'}),
    218.2356719970703),
    (Document(page_content='Собаки — отличные компаньоны, которые известны своей преданностью и дружелюбием.', metadata={'source': 'mammal-pets-doc'}),
    319.75384521484375),
    (Document(page_content='Кролики — социальные животные, которым нужно много места, чтобы прыгать.', metadata={'source': 'mammal-pets-doc'}),
    349.84930419921875),
    (Document(page_content='Попугаи — умные птицы, которые способны имитировать человеческую речь.', metadata={'source': 'bird-pets-doc'}),
    352.6993103027344)]

    Поиск документов на основе схожести с запросом, представленным в виде вектора:

    embedding = GigaChatEmbeddings(
    credentials="ключ_авторизации", scope="GIGACHAT_API_PERS", verify_ssl_certs=False
    )

    embedded_query = embedding.embed_query("кошка")

    vectorstore.similarity_search_by_vector(embedded_query)

    Результат поиска:

    [Document(page_content='Кошки — независимые животные, которым нужно собственное пространство.', metadata={'source': 'mammal-pets-doc'}),
    Document(page_content='Собаки — отличные компаньоны, которые известны своей преданностью и дружелюбием.', metadata={'source': 'mammal-pets-doc'}),
    Document(page_content='Кролики — социальные животные, которым нужно много места, чтобы прыгать.', metadata={'source': 'mammal-pets-doc'}),
    Document(page_content='Попугаи — умные птицы, которые способны имитировать человеческую речь.', metadata={'source': 'bird-pets-doc'})]

    Работа с эмбеддингами, созданными с помощью EmbeddingsGigaR

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

    При создании эмбеддингов документов (например, для поиска по ним) инструкции добавлять не нужно.

    Пример добавления текстовой инструкции при извлечении данных:

    Использование инструкций в симметричных задачах

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

    Примеры инструкций для симметричных задач:

    • "Классифицируй отзыв на товар как положительный, отрицательный или нейтральный \nотзыв: {query}"
    • "Дано предложение, необходимо найти его парафраз \nпредложение: {query}"
    • "Классифицируй чувствительную тему по запросу \nзапрос: {query}"
    • "Given a text, retrieve semantically similar text \ntext: {query}"
    • "Retrieve semantically similar text \ntext: {query}"

    Использование инструкций в retrieval-задачах

    Типичным примером retrieval-задачи является RAG.

    При решении таких задач использование инструкций перед запросами повысит качество поиска релевантных документов или извлечение ответов из сохраненного текста.

    Примеры инструкций для retrieval-задач:

    • "Дан вопрос, необходимо найти абзац текста с ответом \nвопрос: {query}"
    • "Given the question, find a paragraph with the answer \nquestion: {query}"
    ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей. Вы можете запретить сохранение cookie в настройках своего браузера.