📝 LLM и AI

Эмбеддинги: координаты текста в пространстве смыслов

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
83
🌳
Уровень
Продвинутый
🐦 💼 ✈️

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

Аналогия

Представь пространство с координатами. Каждое слово — точка:
- «кот» и «кошка» — почти в одном месте
- «кот» и «автомобиль» — далеко друг от друга
- «Python» и «программирование» — рядом

Эмбеддинг — это и есть координаты в таком пространстве, только с сотнями измерений.

Как ChromaDB создаёт эмбеддинги

ChromaDB автоматически создаёт эмбеддинги при add() через встроенную модель all-MiniLM-L6-v2:

import chromadb

collection = chromadb.PersistentClient("./db").get_or_create_collection("docs")

# ChromaDB сам считает эмбеддинги для каждого текста
collection.add(
    documents=["Python — язык программирования", "Кот сидит на диване"],
    ids=["doc_0", "doc_1"]
)

# При поиске вопрос тоже превращается в эмбеддинг
results = collection.query(
    query_texts=["Как начать программировать?"],
    n_results=1
)
# Вернёт "Python — язык программирования" как ближайший по смыслу

Косинусное расстояние

ChromaDB использует косинусное расстояние (0 до 2):

distance = 0.0  → тексты идентичны
distance = 0.3  → очень похожи (релевантность ~70%)
distance = 0.7  → слабая связь
distance = 2.0  → противоположные по смыслу
results = collection.query(query_texts=["вопрос"], n_results=5, include=["distances"])
for dist in results["distances"][0]:
    relevance = 1 - dist
    print(f"Релевантность: {relevance:.1%}")

Почему не обычный поиск по словам?

Вопрос: "Как написать функцию?"
Текст:  "def позволяет объявить подпрограмму в Python"

При поиске по словам — нет совпадений. При семантическом поиске — высокая релевантность, потому что смыслы близки.

Ограничения встроенной модели ChromaDB

  • Модель all-MiniLM-L6-v2 — английский лучше, чем русский
  • Для лучшего качества на русском: OpenAI text-embedding-3-small или text-embedding-ada-002
# Пример с OpenAI эмбеддингами (для справки)
import chromadb
from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction

ef = OpenAIEmbeddingFunction(api_key="sk-...", model_name="text-embedding-3-small")
collection = client.get_or_create_collection("docs", embedding_function=ef)

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

Что такое ORM

ORM (Object-Relational Mapping) — технология, позволяющая работать с базой данных через объекты Python вместо SQL.

📅 30.06.2026 👁️ 131
📝

httpx: современный HTTP-клиент для Python

httpx — HTTP-клиент нового поколения. Интерфейс похож на requests, но с поддержкой async/await из коробки.

📅 30.06.2026 👁️ 108
📝

AI-агенты: ReAct loop и автономные действия

Чат-бот отвечает на вопросы. Агент — действует: вызывает инструменты, получает реальные данные и использует их...

📅 30.06.2026 👁️ 100

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!