Amazon Nova Multimodal Embeddings: обзор и примеры кода для 2026 | AiManual
AiManual Logo Ai / Manual.
20 Янв 2026 Инструмент

Кроссмодальный поиск на практике: как работает Amazon Nova Multimodal Embeddings и примеры кода

Разбираем Amazon Nova Multimodal Embeddings — единую модель для текста, изображений, видео и аудио. Примеры кода, сравнение с альтернативами и кто выиграет от в

Зачем нужна еще одна модель эмбеддингов? (Спойлер: чтобы перестать плодить сущности)

Держите в голове три разные модели для текста, картинок и аудио? Индексируете каждый тип контента в отдельной векторной базе? Потом мучительно сводите результаты поиска, пытаясь понять, что пользователь имел в виду. Знакомо. Amazon посмотрел на этот цирк и выпустил Nova Multimodal Embeddings — модель, которая превращает текст, изображения, видео и аудио в векторы, живущие в одном пространстве. Одна архитектура, один эндпоинт, один индекс.

На 20 января 2026 года это последняя доступная версия модели в семействе Amazon Nova. Если вы читаете это позже, проверьте документацию Bedrock — возможно, вышло что-то еще круче.

Что умеет эта штука и как она это делает

Nova Multimodal Embeddings — это не просто обертка вокруг трех разных нейросетей. Это единая трансформерная архитектура, обученная на гигантском датасете из пар «текст-изображение», «текст-аудио» и даже «видео-текст». Модель научилась извлекать семантическую суть из любого типа данных и проецировать ее в общее 768-мерное пространство.

  • Текст: Берет промпт или описание, выдает вектор.
  • Изображения: Пропускает через vision-encoder, получает вектор.
  • Аудио: Извлекает фичи из waveform или спектрограммы, кодирует.
  • Видео: Разбивает на ключевые кадры и аудиодорожку, агрегирует в один вектор.

Магия в том, что вектор описания "радостная собака в парке" окажется рядом с вектором фотографии лабрадора с палкой и рядом с вектором аудиозаписи с веселым лаем. Кроссмодальная семантика в чистом виде.

💡
Если вам нужно перевести эмбеддинги из одной модели в другую, чтобы не переиндексировать все с нуля, посмотрите на EmbeddingAdapters. Это может спасти бюджет на облачных запросах.

Код: от загрузки изображения до семантического поиска

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

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К токенов (или эквивалент для изображений).

💡
Если у вас нет размеченных данных для обучения, но есть много сырых — техники Self-Supervised Learning помогут получить эмбеддинги, адаптированные под вашу предметную область. Потом их можно дообучить или использовать как есть.

Прогноз: что будет дальше с мультимодальными эмбеддингами

К 2027 году мы увидим, как такие модели станут стандартом для любого приложения, работающего с контентом. Но главный прорыв будет не в поддержке новых модальностей (тут уже почти все охватили), а в динамическом изменении размерности эмбеддинга. Зачем всегда использовать 768 значений? Для простого поиска по каталогу хватит и 128, а для сложной аналитики — нужно 2048. Будущее за адаптивными эмбеддингами, где размерность и, следовательно, стоимость запроса, зависит от сложности задачи. Amazon уже экспериментирует с этим в Nova v2 (пока в бете). Совет: не завязывайте всю архитектуру на фиксированную размерность 768. Держите индекс гибким.