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

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

Обновлено 14 ноября 2024

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

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

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

Для преобразования строк в эмбеддинги в GigaChat API есть метод POST /embeddings. Запрос выполняется к модели Embeddings ("model": "Embeddings") и авторизуется с помощью токена доступа. Для работы с моделью и создания эмбеддингов вы также можете использовать GigaChain.

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

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

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

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

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

model
required
string
Default: "Embeddings"

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

input
required
Array of strings

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

{
  • "model": "Embeddings",
  • "input": [
    ]
}

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

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

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

object
required
string
Default: "list"

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

required
Array of objects[ items ]
model
string
Default: "Embeddings"

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

{
  • "object": "list",
  • "data": [
    ],
  • "model": "Embeddings"
}

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

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

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

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

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

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

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

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

pip install langchain langchain-community 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'})]

Cмотрите также

ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.