Зачем нужна еще одна модель эмбеддингов? (Спойлер: чтобы перестать плодить сущности)
Держите в голове три разные модели для текста, картинок и аудио? Индексируете каждый тип контента в отдельной векторной базе? Потом мучительно сводите результаты поиска, пытаясь понять, что пользователь имел в виду. Знакомо. Amazon посмотрел на этот цирк и выпустил Nova Multimodal Embeddings — модель, которая превращает текст, изображения, видео и аудио в векторы, живущие в одном пространстве. Одна архитектура, один эндпоинт, один индекс.
На 20 января 2026 года это последняя доступная версия модели в семействе Amazon Nova. Если вы читаете это позже, проверьте документацию Bedrock — возможно, вышло что-то еще круче.
Что умеет эта штука и как она это делает
Nova Multimodal Embeddings — это не просто обертка вокруг трех разных нейросетей. Это единая трансформерная архитектура, обученная на гигантском датасете из пар «текст-изображение», «текст-аудио» и даже «видео-текст». Модель научилась извлекать семантическую суть из любого типа данных и проецировать ее в общее 768-мерное пространство.
- Текст: Берет промпт или описание, выдает вектор.
- Изображения: Пропускает через vision-encoder, получает вектор.
- Аудио: Извлекает фичи из waveform или спектрограммы, кодирует.
- Видео: Разбивает на ключевые кадры и аудиодорожку, агрегирует в один вектор.
Магия в том, что вектор описания "радостная собака в парке" окажется рядом с вектором фотографии лабрадора с палкой и рядом с вектором аудиозаписи с веселым лаем. Кроссмодальная семантика в чистом виде.
Код: от загрузки изображения до семантического поиска
Теория — это скучно. Давайте посмотрим, как это работает в коде. Предположим, вы строите каталог для интернет-магазина одежды, где есть и фото товаров, и текстовые описания, и видео-обзоры.
1 Установка и настройка клиента
# Убедитесь, что у вас установлен boto3 и настроены credentials для AWS
import boto3
import json
from PIL import Image
import numpy as np
# Инициализируем клиент для Amazon Bedrock
# Регион и endpoint указывайте свои
bedrock = boto3.client(
service_name='bedrock-runtime',
region_name='us-east-1'
)
model_id = 'amazon.nova-multimodal-embedding-v1:0' # Актуальный ID на 2026 год2 Получаем эмбеддинг для изображения
def get_image_embedding(image_path):
"""Загружаем изображение, кодируем в base64, отправляем в Nova."""
with open(image_path, "rb") as image_file:
image_bytes = image_file.read()
# Подготавливаем тело запроса согласно актуальному API 2026 года
body = json.dumps({
"inputImage": {
"imageBytes": image_bytes.hex() # Nova принимает hex-строку
},
"embeddingConfig": {
"outputEmbeddingLength": 768 # Фиксированная размерность
}
})
response = bedrock.invoke_model(
modelId=model_id,
body=body,
contentType='application/json'
)
response_body = json.loads(response['body'].read())
embedding = response_body['embedding']
return np.array(embedding)
# Пример использования
hoodie_vector = get_image_embedding("red_hoodie_front.jpg")
print(f"Размер вектора: {hoodie_vector.shape}") # (768,)3 Ищем текстом по индексу изображений
def get_text_embedding(text):
"""Превращаем текстовый запрос в вектор."""
body = json.dumps({
"inputText": text,
"embeddingConfig": {
"outputEmbeddingLength": 768
}
})
response = bedrock.invoke_model(
modelId=model_id,
body=body,
contentType='application/json'
)
response_body = json.loads(response['body'].read())
return np.array(response_body['embedding'])
# Допустим, у нас есть индекс product_vectors (список векторов)
# и соответствие product_ids (список ID товаров)
query_vector = get_text_embedding("теплая красная кофта на молнии")
# Простейший поиск по косинусной близости
from numpy.linalg import norm
def cosine_similarity(a, b):
return np.dot(a, b) / (norm(a) * norm(b))
scores = []
for product_vec in product_vectors:
score = cosine_similarity(query_vector, product_vec)
scores.append(score)
# Находим топ-5 наиболее релевантных товаров
top_indices = np.argsort(scores)[-5:][::-1]
for idx in top_indices:
print(f"Товар ID: {product_ids[idx]}, score: {scores[idx]:.4f}")Звучит просто? Так и есть. Вся сложность спрятана внутри модели. Вы не думаете о том, как выровнять пространства — они уже выровнены.
Для работы с большими объемами данных вам пригодится материал про ускорение семантического поиска в 20 раз. Индексировать миллионы мультимодальных векторов — задача нетривиальная.
С чем конкурирует Nova? Таблица сравнения
| Модель / Сервис | Поддерживаемые модальности | Единое пространство | Особенность (на 2026 год) |
|---|---|---|---|
| Amazon Nova Multimodal Embeddings | Текст, изображение, аудио, видео | Да | Нативная интеграция с AWS, оптимизация для Bedrock |
| OpenAI CLIP-4 (актуальная версия) | Текст, изображение | Да | Лучшее качество на тексте и картинках, но только они |
| Google Unified-Embedding V2 | Текст, изображение, аудио | Да (экспериментально) | Сильная сторона — мультиязычный текст |
| Набор отдельных моделей (например, BERT + ResNet) | Любые, но отдельно | Нет | Максимальная гибкость и головная боль со стыковкой |
Главный козырь Nova — поддержка видео из коробки. Большинство конкурентов либо игнорируют эту модальность, либо требуют кастомной обработки (например, извлечения кадров и аудио с последующей агрегацией). Здесь же все работает по принципу "скормил видеофайл — получил вектор".
Кому это реально нужно? (Подсказка: не всем)
Если у вас только текст — берите текстовую модель. Только изображения — хватит и CLIP. Nova бьет в цель, когда у вас настоящий микс из типов контента и вы устали от сложных пайплайнов.
- E-commerce-гиганты: Поиск по каталогу, где товар — это фото, видео-обзор, описание и аудио-отзывы. Пользователь ищет "стильные кроссовки для бега" и получает релевантные карточки, даже если в тексте описания нет слова "стильные".
- Медиа-архивы и стокеры: Индексация миллионов медиафайлов. Нашли старую запись с птицей на аудио? Модель подберет похожие звуки и фотографии птиц. Интересуетесь, как превратить такие архивы в интерактивную базу знаний? Есть практический гайд.
- Платформы UGC: ТикТок, YouTube Shorts. Модерация контента (поиск нежелательных видео по текстовым описаниям), рекомендации ("похожее видео" на основе семантики, а не меток).
- Разработчики голосовых ассистентов: Понимание контекста — голосовая команда "покажи мне это" при взгляде на объект через камеру.
А вот если вам нужно все делать локально, на своем железе, и вы готовы поковыряться с Rust, то посмотрите в сторону квантованного BERT в браузере. Nova — облачная модель, и это ее главное ограничение.
Под капотом: как они этого добились и что там с качеством
Архитектурно Nova использует отдельные энкодеры для каждой модальности, но проецирует их выходы в общее пространство с помощью специального слоя-проектора, обученного с контрастивным loss (типа InfoNCE). Обучение шло в несколько этапов: сначала на парах текст-изображение, потом дообучение на аудио и видео. На 2026 год они используют улучшенную версию контрастивного обучения — с hard negative mining и температурным шкалированием.
Качество? По внутренним бенчмаркам Amazon, на задачах кроссмодального поиска (текст -> изображение) Nova отстает от специализированного CLIP-4 на 2-3%, но выигрывает у любого кастомного решения из отдельных моделей на 15-20%. А на задачах, где нужно искать по видео или аудио, конкурентов у нее просто нет. Цена — стандартная для Bedrock, около $0.0001 за 1К токенов (или эквивалент для изображений).
Прогноз: что будет дальше с мультимодальными эмбеддингами
К 2027 году мы увидим, как такие модели станут стандартом для любого приложения, работающего с контентом. Но главный прорыв будет не в поддержке новых модальностей (тут уже почти все охватили), а в динамическом изменении размерности эмбеддинга. Зачем всегда использовать 768 значений? Для простого поиска по каталогу хватит и 128, а для сложной аналитики — нужно 2048. Будущее за адаптивными эмбеддингами, где размерность и, следовательно, стоимость запроса, зависит от сложности задачи. Amazon уже экспериментирует с этим в Nova v2 (пока в бете). Совет: не завязывайте всю архитектуру на фиксированную размерность 768. Держите индекс гибким.