Все уроки · 44
Путь 3 · Дорожная карта AI-инженера·Урок 11 из 33

Что такое эмбеддинги

Идея, на которой держатся семантический поиск и RAG: превращение текста в векторы чисел так, чтобы близкие по смыслу тексты оказывались рядом. И где эмбеддинги применяются в реальных продуктах.

УровеньНовичокВремя~12 мин

Текст как координаты

Вся идея в одном предложении: эмбеддинг присваивает каждому фрагменту текста набор координат на карте смыслов, причём похожие по смыслу тексты получают близкие координаты.

Если говорить технически: эмбеддинг — это способ превратить текст в список чисел (вектор), который передаёт его смысл.

Эмбеддинг передаёт именно смысл. Предложения «Как сбросить пароль?» и «Не могу войти в аккаунт» почти не имеют общих слов, но их эмбеддинги оказываются совсем рядом. А вот слова «password» и «passport», почти совпадающие по написанию, попадают в далёкие друг от друга места.

Это важно, потому что именно этот приём позволяет компьютеру искать по намерению, а не по написанию. На нём держатся «чат с вашими документами», рекомендации и поиск дубликатов — и он лежит в основе всех техник этого курса, которые идут дальше.

Картинка в голове

Представьте, что каждому фрагменту текста присвоено место на гигантской карте смыслов. Близкие по смыслу вещи стоят рядом, а разные по смыслу — далеко друг от друга. Всё остальное в этом уроке — подробности к этой единственной картинке.

Координаты с нуля

Если вы ни разу не встречали вектор, вот он в три шага и без математики:

  1. Одно число — это координата на прямой. «Температура: 23» помещает сегодняшний день где-то на прямой от холодного к горячему.
  2. Два числа — это координата на листе бумаги. Широта и долгота помещают город на карту. Города, которые находятся рядом на карте, похожи друг на друга единственным способом, который карта умеет измерять: расстоянием.
  3. Список чисел — это координата по стольким же направлениям. Эмбеддинг — тот же приём: 1536 чисел задают положение в пространстве с 1536 направлениями — карте смыслов, где «далеко друг от друга» означает «различаются по смыслу».

Представить 1536 направлений невозможно, и вам это никогда не понадобится. Единственный вопрос, который вы задаёте этим координатам, — «какие из них близки к этой?», и он работает одинаково и в 2 измерениях, и в 1536.

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

  • Вектор — мудрёное слово для «списка чисел». И всё. Эмбеддинг предложения — это вектор: несколько сотен чисел, описывающих, где это предложение «живёт» на карте.
  • Размерность — сколько чисел в списке. 1536-мерный вектор — это просто список из 1536 чисел. Чем больше размерность, тем больше места для оттенков смысла; на то, как вы этим пользуетесь, это не влияет.
  • Косинусное сходство (cosine similarity) — оценка «насколько эти два близки?», которую вычисляет векторный поиск, обычно от 0 до 1. Одна и та же мысль — оценка около 1. Несвязанные вещи — около 0. Сами вы её не считаете — это делает база данных, — но за любым утверждением «эти два текста связаны» стоит именно это число.

На практике вектор длинный: современные модели выдают от 384 до 3072 чисел на текст. Человек не может представить себе 1536-мерное пространство, но математике это безразлично: «расстояние» между векторами по-прежнему работает — и служит заменителем сходства по смыслу.

Посмотрите сами

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

Обращения в поддержку на карте смыслов
? сбросить пароль?
hover any item to see its closest neighbors — this is how semantic search finds related things
аккаунтыоплатадоставка

Обратите внимание, что произошло: запрос «сбросить пароль?» совпал по намерению с обращениями не помню пароль и аккаунт заблокирован. Поиск по ключевым словам вернул бы все обращения со словом «пароль» и пропустил бы всё остальное.

Наведите курсор на обращение об оплате и на обращение о доставке: соседями каждого оказываются другие обращения из его же группы. Эту кластеризацию никто не программировал — она сама получается из карты смыслов.

Вот весь продукт в одном действии: пользователь спрашивает своими словами, а вы возвращаете ближайшие точки на карте. Сделать то же для миллиона документов вместо двенадцати — уже задача хранения, и решают её векторные базы данных.

Как вектор выглядит в коде

Эти числа вы никогда не читаете — вы только сравниваете их. Но один раз увидеть вектор полезно: так идея запоминается лучше:

Получите реальный вектор
from openai import OpenAI
client = OpenAI()

text = "How do I reset my password?"
vector = client.embeddings.create(
  model="text-embedding-3-small", input=text
).data[0].embedding

print(len(vector))   # 1536 — по одной координате на каждое измерение
print(vector[:4])    # [0.0231, -0.0412, 0.0167, -0.0084]

# Другое предложение с тем же смыслом → почти те же числа
other = client.embeddings.create(
  model="text-embedding-3-small",
  input="I can't log in to my account",
).data[0].embedding

От того, какая модель выдала эти числа, зависит многое — этому посвящён следующий урок.

Почему близкие по смыслу тексты оказываются рядом?

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

Из этого следуют два полезных свойства:

  • Связанные тексты расположены рядом. Расстояние превращается в оценку сходства, по которой можно ранжировать.
  • Направление тоже несёт смысл. Известный пример: вектор от «король» к «королева» примерно такой же, как от «мужчина» к «женщина» — отношения сохраняются в виде геометрии.

Для чего используют эмбеддинги

На этой одной идее держится множество современных ИИ-продуктов:

Сценарий Как это работает
Семантический поиск Посчитайте эмбеддинги всех документов и запроса и верните ближайших соседей. Так находятся документы о «сбросе пароля», даже если в запросе написано «не могу войти»
Рекомендации Посчитайте эмбеддинги товаров или статей и рекомендуйте то, что лежит рядом с понравившимся пользователю
Поиск аномалий Посчитайте эмбеддинги событий: всё, что далеко от всех обычных кластеров, подозрительно — мошенничество, ошибки, выбросы
Классификация Посчитайте эмбеддинг текста и отнесите его к тому классу, чьи размеченные примеры лежат рядом, — обучать модель не нужно
RAG Посчитайте эмбеддинги базы знаний; когда приходит вопрос, возьмите ближайшие фрагменты и передайте их LLM как контекст

Последняя строка таблицы — генерация, дополненная поиском (retrieval-augmented generation), техника, которая стоит за «чатом с вашими данными», — работает на эмбеддингах. Ей посвящён отдельный урок, Что такое RAG, и на эмбеддингах держится всё остальное в этом курсе.

Несколько оговорок

  • Эмбеддинги создаёт модель, а у моделей есть предвзятость и слепые зоны. Редкие предметные области (юридический жаргон, узкоспециальное оборудование) могут кластеризоваться хуже.
  • Карта выше двумерная — для людей; реальные эмбеддинги живут в сотнях измерений, и некоторые важные для нас различия при этом сжимаются.
  • Разные модели выдают несовместимые векторы: сравнивать можно только эмбеддинги одной и той же модели. Как выбрать модель, рассказывает урок Модели эмбеддингов и провайдеры.

Одна модель — одно пространство

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

Проверьте себя

Что именно передаёт эмбеддинг?

У двух предложений нет ни одного общего слова. Где окажутся их эмбеддинги?

Что здесь называют «размерностью»?

Вы построили эмбеддинги документов моделью A, а запроса пользователя — моделью B. Что произойдёт?