Эмбеддинги на пальцах: почему AI понимает смысл, а не слова

29 мая 2026 г. · 7 мин чтения · Максим Космов

Эмбеддинги на пальцах: почему AI понимает смысл, а не слова
Содержание

Когда AI отвечает на вопрос «найди похожие документы» или правильно понимает что «автомобиль» и «машина» - это одно и то же, за этим стоит технология под названием эмбеддинги. Это фундаментальная концепция, которая объясняет почему языковые модели понимают смысл, а не просто ищут буквенные совпадения.

Объясним через аналогии, без единой формулы.

Проблема: компьютер не понимает слова

Компьютер от природы работает с числами. Текст для него - это просто последовательность символов. Если написать «кот» и «кошка», компьютер видит две разные строки. Он не знает, что это почти одно и то же животное. Он не знает, что «банк» в предложении про деньги и вклады и «банк» в предложении про рыбалку и берег - это разные слова.

Старый подход к поиску - ключевые слова. Ищете «автомобиль» - находите документы со словом «автомобиль». Документы со словом «машина» или «авто» не попадают, даже если они по смыслу точнее. Это неудобно и неточно.

Эмбеддинги решают эту проблему. Идея: перевести каждое слово (или целый текст) в набор чисел так, чтобы близкие по смыслу слова получали близкие наборы чисел.

Аналогия: карта городов

Представьте карту России. Москва и Санкт-Петербург находятся близко друг к другу. Владивосток - далеко. Если вы укажете координаты двух точек, можно посчитать расстояние между ними.

Эмбеддинг - это то же самое, только не для городов, а для слов. Каждое слово получает свои «координаты» в многомерном пространстве. Только не 2 координаты (широта и долгота), а 768 или 1536 чисел.

На этой «карте слов»:

  • «кот», «кошка», «котёнок» стоят рядом
  • «собака», «пёс», «щенок» стоят рядом, но немного в стороне от кошек
  • «автомобиль», «машина», «авто», «транспорт» - в своей группе
  • «банк» в контексте денег стоит рядом с «кредит», «вклад», «процент»
  • «банка» в контексте рыбалки стоит рядом с «рыба», «река», «берег»

Один и тот же текст в разных контекстах получает разные координаты. Это называется контекстными эмбеддингами - современная модель учитывает окружение слова.

Как получаются эти числа

Модели для создания эмбеддингов обучают на огромных объёмах текста. Алгоритм учится предсказывать: если встречается слово «кот», рядом с ним часто встречаются «мяукать», «молоко», «мурчать», «шерсть». Если встречается «собака» - «гавкать», «поводок», «хозяин». Слова с похожим окружением получают похожие векторы.

Когда модель видела миллиарды предложений, она «поняла» что кот и кошка появляются в одинаковых контекстах. Их векторы оказываются близко.

Интересный побочный эффект этого обучения: модели находят аналогии. Классический пример: вектор(«король») - вектор(«мужчина») + вектор(«женщина») = примерно вектор(«королева»). Модель не была этому обучена явно - это свойство возникло само из структуры языка.

Как работает семантический поиск

Допустим, у вас есть база из 10 000 документов. Пользователь пишет «как настроить автоматическую резервную копию». Классический поиск ищет документы с этими конкретными словами. Семантический поиск работает иначе.

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

В результате находятся документы со словами «бэкап», «резервирование данных», «автоматическое сохранение», «backup script» - даже если там нет слова «резервная копия». Потому что их смысл близок.

Именно так работает RAG (Retrieval-Augmented Generation) - технология подключения своей базы знаний к языковой модели. О ней отдельный гайд.

Расстояние между векторами: как мерить близость

Когда векторы готовы, нужно уметь сравнивать их. Самый распространённый способ - косинусное сходство. Звучит страшно, но идея простая: это угол между двумя стрелками.

Представьте два вектора как стрелки из центра координат. Если они смотрят в одну сторону (угол маленький) - сходство высокое, близко к 1. Если смотрят в разные стороны - сходство низкое, близко к 0 или даже -1.

Для поиска похожих документов берут всю базу, считают косинусное сходство каждого документа с запросом, сортируют по убыванию и берут топ-5 или топ-10.

Практические применения

Семантический поиск - самое распространённое применение. Базы знаний, FAQ, внутренние документы компании. Пользователь спрашивает своими словами - система находит нужный документ даже если он написан другими словами.

Кластеризация текстов. Если у вас 5000 отзывов о продукте, эмбеддинги помогут автоматически сгруппировать их по темам: доставка, качество, упаковка, сервис. Не нужно задавать темы вручную - алгоритм сам найдёт группы близких по смыслу отзывов.

Рекомендации. Netflix, Spotify, маркетплейсы используют похожий принцип. Контент, который вам понравился, переводится в вектор. Система ищет другой контент с близкими векторами.

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

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

Какие модели создают эмбеддинги

Для создания эмбеддингов существуют специализированные модели - они отличаются от разговорных языковых моделей вроде ChatGPT или Claude.

OpenAI text-embedding-3-small - дешёвый и быстрый вариант для большинства задач. Стоит около $0.02 за миллион токенов. Для базы в 10 000 документов по страницу каждый - это доли цента.

OpenAI text-embedding-3-large - более мощный, лучше понимает нюансы, но дороже.

sentence-transformers - открытые модели, которые можно запустить локально без оплаты API. Модели типа paraphrase-multilingual-MiniLM хорошо работают с русским языком.

Для русскоязычного контента отдельно хорошо работают модели от Сбера (ruBERT, sberbank-ai/sbert_large_nlu_ru) и модели от E5 серии с поддержкой русского.

Векторные базы данных: где хранить эмбеддинги

Обычная реляционная база данных плохо подходит для поиска по векторам - она не умеет быстро считать расстояния между тысячами векторов одновременно.

Для этого существуют специализированные векторные базы данных: Qdrant, Weaviate, Chroma, Pinecone, pgvector (расширение для PostgreSQL).

Для небольших проектов (до нескольких сотен тысяч документов) подходит Chroma или pgvector - простые в настройке. Для больших объёмов - Qdrant или Pinecone.

AnythingLLM, который разбирается в отдельном гайде, использует встроенную векторную базу под капотом - вы этого не видите, но именно эмбеддинги позволяют ему находить нужные куски из ваших загруженных документов.

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

Первые модели эмбеддингов (Word2Vec, GloVe) создавали вектор для каждого отдельного слова. Одно слово - один фиксированный вектор. Это работало, но плохо справлялось с многозначными словами: «банк» всегда имел один вектор, независимо от контекста.

Современные модели создают контекстные эмбеддинги. Одно и то же слово в разных предложениях получает разные векторы - потому что модель учитывает всё окружение. «Банк» рядом с «кредит» и «вклад» получит вектор из «финансовой» области, рядом с «рыба» и «река» - из «природной».

Ещё более полезны эмбеддинги для предложений и абзацев. Модели вроде sentence-transformers создают один вектор для целого куска текста - учитывая смысл всего предложения целиком, а не сумму отдельных слов.

Для поиска по документам обычно используют «chunking» - документ разбивается на куски по 200-500 слов, каждый кусок получает свой вектор. При поиске сравниваются векторы запроса с векторами кусков, а не с векторами всего документа.

Главное ограничение: «проклятие размерности»

Чем больше размерность вектора (чисел в наборе) - тем точнее можно передать смысл, но тем медленнее работает поиск. При 1 миллионе документов даже оптимизированный поиск занимает время.

Решают это через индексирование: векторная база строит специальный индекс (HNSW или IVF), который позволяет находить ближайших соседей примерно, но очень быстро. Точность немного теряется, скорость вырастает в сотни раз.

Для большинства практических задач приближённый поиск достаточно точен.

Многоязычные эмбеддинги и русский язык

Отдельная тема - качество эмбеддингов для русского языка. Ранние модели (Word2Vec, GloVe) обучались преимущественно на английском. Качество для других языков было посредственным.

Современные многоязычные модели обучены на сотнях языков одновременно. Модель paraphrase-multilingual-MiniLM-L12-v2 от sentence-transformers поддерживает более 50 языков включая русский и показывает хорошие результаты на русскоязычных задачах.

Для задач исключительно на русском языке лучше использовать специализированные русскоязычные модели. rubert-tiny2 - компактная модель хорошо работающая на русском, размером около 100 MB. Для более сложных задач - модели из серии sbert_large от Сбера.

Проверить качество эмбеддингов для конкретной задачи можно через простой тест: берёте 20-30 пар «запрос - ожидаемый результат», считаете похожесть и смотрите попадает ли нужный документ в топ-3 результатов.

Итог: когда что использовать

Эмбеддинги нужны когда:

  • нужен поиск «по смыслу», а не по ключевым словам
  • нужно автоматически группировать тексты по темам
  • нужно найти похожие документы в большой базе
  • нужно добавить своё хранилище знаний к языковой модели (RAG)

Не нужны эмбеддинги когда достаточно точного поиска по ключевым словам или когда данных мало (до нескольких сотен документов) - тут справится обычный полнотекстовый поиск.

Понимание эмбеддингов открывает дорогу к более глубокому пониманию RAG, семантического поиска и того, как языковые модели «думают» о тексте.

Разборы свежих AI-новостей - в канале AI Компас.

Больше гайдов - guides.kosmoslab.dev/guides.

Читайте дальше