Embeddings
Эмбеддинги — это обученные векторы, которые располагают похожие тексты, изображения или объекты рядом друг с другом. Рассматриваются их создание, сравнение и поиск в больших масштабах.
Эмбеддинг — это обучаемый вектор чисел, представляющий объект, например слово, изображение, товар или пользователя, так что объекты со схожим смыслом или содержанием получают близкие векторы. Расстояние в этом векторном пространстве становится мерой сходства, позволяя программному обеспечению выполнять поиск, кластеризацию, давать рекомендации и классифицировать объекты, сравнивая векторы, а не исходные пиксели или строки. Эмбеддинги также служат рабочим представлением внутри нейронных сетей: большая языковая модель (LLM) преобразует каждый токен в эмбеддинг до первого слоя трансформера, а модель компьютерного зрения преобразует изображение в векторы признаков с помощью своей базовой сети. Эмбеддинги для поиска обычно имеют от нескольких сотен до нескольких тысяч измерений — намного меньше, чем количество значений в исходных данных.
Как создаются эмбеддинги#
Эмбеддинги формируются двумя типами обучаемых компонентов:
- Таблицы поиска: Для дискретных элементов, таких как токены, идентификаторы товаров или пользователей, слой эмбеддингов хранит по одной обучаемой строке на элемент, а поиск элемента возвращает его строку.
nn.Embeddingв PyTorch — такая таблица. Изначально её строки заполнены случайными значениями, а затем обновляются с помощью обратного распространения ошибки вместе с остальными параметрами модели, поэтому элементы, играющие сходные роли в задаче обучения, постепенно получают похожие векторы. - Энкодеры: Для изображений, аудио и произвольного текста сеть преобразует весь вход в один вектор, часто объединяя карты признаков CNN или считывая выходные токены трансформера. Энкодеры, обученные для такой задачи, как классификация, попутно создают полезные эмбеддинги, а энкодеры, обученные с помощью контрастивного обучения, напрямую формируют пространство эмбеддингов. Так работает CLIP: он помещает изображения и их подписи в общее пространство.
Word2vec, опубликованный Томасом Миколовым и его коллегами из Google в 2013 году, показал, насколько много структуры усваивает такое обучение. В его векторах слов vector("King") − vector("Man") + vector("Woman") оказывается ближе всего к vector("Queen"), а выпущенные разработчиками предобученные векторы Google News охватывают 3 миллиона слов и фраз в 300 измерениях.
Сравнение эмбеддингов#
Косинусное сходство сравнивает направления двух векторов и принимает значения от −1 до 1. Скалярное произведение также учитывает их длины, а евклидово расстояние измеряет расстояние по прямой между ними. Во многих системах эмбеддинги нормализуют до единичной длины: тогда косинусное сходство и скалярное произведение становятся одинаковыми, а соседи ранжируются в том же порядке, что и по евклидову расстоянию. Модели YOLO26 создают эмбеддинги изображений с помощью embed(): этот режим пропускает голову предсказаний и возвращает по одному вектору на изображение, усредняя выход предпоследнего слоя модели:
import torch.nn.functional as F
from ultralytics import YOLO
from ultralytics.utils import ASSETS
# Load a YOLO26 classification model trained on ImageNet
model = YOLO("yolo26n-cls.pt")
# embed() returns one pooled feature vector per image instead of predictions
bus, zidane = model.embed([ASSETS / "bus.jpg", ASSETS / "zidane.jpg"])
print(f"Embedding length: {bus.shape[0]}")
# Higher cosine similarity means the model sees more similar content
print(f"Cosine similarity: {F.cosine_similarity(bus, zidane, dim=0).item():.3f}")Для YOLO26n-cls эмбеддинг — это 256-мерный вектор, результат пулинга блока внимания в конце бэкбона; вторая строка выводит косинусное сходство двух встроенных образцов фотографий. Запуск такого же сравнения со сохранёнными эмбеддингами всей коллекции позволяет поиску изображений по сходству ранжировать результаты.
Поиск эмбеддингов в больших масштабах#
Сравнивать запрос по очереди с миллионами сохранённых векторов слишком медленно, поэтому векторные базы данных строят индексы приближённого поиска ближайших соседей, например графовые индексы HNSW или инвертированные файловые индексы. Они находят близкие совпадения, проверяя лишь малую часть коллекции. Эмбеддинги коллекции вычисляются один раз, а каждый запрос кодируется во время поиска тем же энкодером; если выполняется поиск изображений по тексту — парным текстовым энкодером:
Хранение влияет на проектирование не меньше, чем точность. Обучение представлений Матрешки формирует эмбеддинги, начальные измерения которых полезны сами по себе, поэтому векторы можно усекать для экономии места; векторное квантование сжимает каждый вектор до нескольких байт. Гибридный поиск сочетает сходство эмбеддингов с поиском по ключевым словам.
Применение#
- Семантический поиск и генерация с дополненной выборкой (RAG): Текстовые эмбеддинги находят фрагменты по смыслу, поэтому запрос о «страховых случаях с автомобилями» также находит документы, в которых говорится об «автостраховом полисе», а RAG передаёт найденные фрагменты большой языковой модели в качестве контекста.
- Рекомендательные системы: Пользователи и объекты представляются в одном пространстве, а ближайшие к вектору пользователя объекты становятся кандидатами для рекомендации.
- Классификация с нулевым количеством примеров: Модели с общим пространством изображений и текста классифицируют изображение, сравнивая его эмбеддинг с эмбеддингами названий классов, записанных текстом.
- Повторная идентификация объектов: Эмбеддинги внешнего вида связывают одного и того же человека или автомобиль между камерами и разрывами в траектории.
- Исследование набора данных: проекция эмбеддингов в двумерное пространство с помощью t-SNE или UMAP выявляет кластеры, почти дубликаты и выбросы в наборе данных, как это делает панель «Кластеризация» для наборов данных Ultralytics Platform.
Эмбеддинги и смежные понятия#
- Латентное пространство: Векторное пространство, в котором расположены эмбеддинги. Термины «латентное представление» и «эмбеддинг» часто используют как синонимы.
- Извлечение признаков: Любой процесс преобразования исходных данных в признаки. Эмбеддинг — это обученный вектор признаков, в котором расстояния между векторами несут смысл.
- Токенизация: Разбивает текст на токены и сопоставляет каждому целочисленный идентификатор. Затем слой эмбеддингов преобразует каждый идентификатор в вектор.
- Унитарное кодирование: Представляет элемент i словаря вектором из нулей с единицей в позиции i, поэтому любые два элемента равноудалены, а кодирование не передаёт информацию о сходстве. Умножение унитарного вектора на матрицу весов таблицы эмбеддингов выбирает ровно одну строку — именно такой результат возвращает поиск эмбеддинга, но без выполнения умножения.










