Embeddings
Embeddings — это численные представления текстовых строк, измеряющие их взаимосвязь. Текстовые эмбеддинги измеряют степень схожести текстовых строк и часто используются для следующих задач:
- Поиск (результаты сортируются по релевантности запросу)
- Кластеризация (группировка текстовых строк по схожести)
- Рекомендации (рекомендация элементов с похожими текстовыми строками)
- Обна ружение аномалий (поиск элементов, значительно отличающихся от других)
- Измерение разнообразия (анализ распределения схожести)
- Классификация (классификация текстовых строк на основе их схожести с метками)
Эмбеддинг представляет собой вектор (список) чисел. Расстояние между двумя векторами измеряет степень их схожести: небольшое расстояние указывает на высокую степень схожести, а большое расстояние — на низкую.
Создание эмбеддингов для одного и нескольких текстовых объектов
- Python (Langchain)
- Python (OpenAI клиент)
- cURL
#pip install langchain-compressa - если у вас еще нет этого пакета
from langchain_compressa import CompressaEmbeddings
embeddings = CompressaEmbeddings(
model="Compressa-Embedding",
base_url="https://compressa-api.mil-team.ru/v1", # при локальном запуске замените на ваш url, например http://localhost:8080/api/v1
api_key="Ваш_API_ключ_Compressa", # при локальном запуске вы можете не требовать ключ или создать свой
model_kwargs={"encoding_format": 'float'},
tiktoken_enabled=False,
tiktoken_model_name="Salesforce/SFR-Embedding-Mistral",
)
# Создание embedding для одного запроса
query_embedding = embeddings.embed_query("Как приготовить борщ?")
# Создание embeddings для нескольких документов
docs_embeddings = embeddings.embed_documents([
"Борщ - это традиционный славянский суп",
"Для приготовления борща нужна свекла",
"Борщ обычно подают со сметаной",
"В борщ часто добавляют мясо",
"Борщ имеет характерный красный цвет"
])
# from openai import OpenAI - если у вас еще нет этого пакета
client = OpenAI(
api_key = "Ваш_API_ключ_Compressa", # при локальном запуске вы можете не требовать ключ или создать свой
base_url = "https://compressa-api.mil-team.ru/v1" # при локальном запуске замените на ваш url, например http://localhost:8080/api/v1
)
# Создание embedding для одного запроса
embedding = client.embeddings.create(
model="Compressa-Embedding",
input="Как приготовить борщ?",
encoding_format="float",
)
# Создание embeddings для нескольких документов
docs = [
"Борщ - это традиционный славянский суп",
"Для приготовления борща нужна свекла",
"Борщ обычно подают со сметаной",
"В борщ часто добавляют мясо",
"Борщ имеет характерный красный цвет"
]
embeddings = client.embeddings.create(
model="Compressa-Embedding",
input=docs,
encoding_format="float",
)
# при локальном запуске замените на ваш url, например http://localhost:8080/api/v1/embeddings
# при локальном запуске вы можете не требовать API ключ или создать свой
curl -X 'POST' \
'https://compressa-api.mil-team.ru/v1/embeddings' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer Ваш_API_ключ_Compressa' \
-d '{
"model": "Compressa-Embedding",
"input": "запрос на эмбединг"
}'
Также в Python библиотеке Compressa доступно асинхронное создание embeddings
#pip install langchain-compressa - если у вас еще нет этого пакета
import os
from langchain_compressa import CompressaEmbeddings
embeddings = CompressaEmbeddings(
model="Compressa-Embedding",
base_url="https://compressa-api.mil-team.ru/v1", # при локальном запуске замените на ваш url, например http://localhost:8080/api/v1
api_key="Ваш_API_ключ_Compressa", # при локальном запуске вы можете не требовать ключ или создать свой
model_kwargs={"encoding_format": 'float'},
tiktoken_enabled=False,
tiktoken_model_name="Salesforce/SFR-Embedding-Mistral",
)
# Создание embedding для одного запроса
await embeddings.aembed_query("Как приготовить борщ?")
# Создание embeddings для нескольких документов
await embeddings.aembed_documents([
"Борщ - это традиционный славянский суп",
"Для приготовления борща нужна свекла",
"Борщ обычно подают со сметаной",
"В борщ часто добавляют мясо",
"Борщ имеет характерный красный цвет"
])
Если вы хотите глубже погрузиться в Embeddings и понять, как технически устроен семантический поиск - посмотрите наше практическое руководство.