文搜视频、图搜视频、视频搜视频——Nova Multimodal Embeddings 多模态素材搜索实战

上周帮朋友的游戏团队看素材管理方案,他们的痛点让我很有共鸣:库里十万条广告视频,找一个"角色被手指弹飞"的片段,翻了半小时没找到,最后重新拍了一条。

刚好看到 JoyCastle(乐堡互娱)跟亚马逊云科技合作的案例,用 Amazon Nova Multimodal Embeddings 解决了这个问题。拆解一下方案。

素材库变成"素材沼泽"

做过游戏广告投放的都知道,素材是命根子。JoyCastle 作为一家全球化移动游戏公司,日下载量超百万,全球玩家过亿。每月新增数千条广告视频,库里已经堆了超过十万条素材。

问题来了:找素材比做素材还慢。

传统的管理方式就是人工打标签+关键词搜索。标签是运营同事一条一条手动标的,标准不统一,搜索也只能匹配关键词。你搜"角色被手指弹飞",系统直接懵了------因为没人打过这种标签。

更要命的是跨模态检索。创意同事手里有一张参考图,想找风格类似的视频片段,传统系统压根不支持。结果就是大量优质素材沉在文件夹里,团队宁可重新拍也不愿意翻找。

Amazon Nova Multimodal Embeddings:统一向量空间

JoyCastle 跟亚马逊云科技游戏行业解决方案团队合作,基于 Amazon Nova Multimodal Embeddings 搭了一套智能素材管理系统。

核心思路:把文本、图片、视频、音频全部映射到同一个语义向量空间,实现跨模态语义搜索。

跟传统方案对比一下:

对比维度 人工标签+关键词 LLM自动打标 Nova Multimodal Embeddings
标注成本 高(纯人工) 中(需定义Prompt) 低(无需标注)
搜索灵活性 受限于预定义标签 受限于预定义Prompt 支持任意自然语言查询
跨模态搜索 不支持 不支持 原生支持文本↔图片↔视频↔音频
实时性 依赖标签完整性 批处理,延迟高 毫秒级向量检索
可扩展性 线性增长 推理成本高 一次Embedding,长期复用

Nova Multimodal Embeddings 有个杀手级特性:视频智能分段(Segmented Embedding)。它能自动把长视频切成 1-30 秒的片段,每个片段独立生成向量。这跟广告素材的使用方式天然匹配------创意团队要的从来不是整条视频,而是其中某个 5 秒的精彩片段。

架构拆解

整个系统基于亚马逊云科技的 GMM(Gaming Material Manager)方案,核心组件:

  • Amazon Bedrock:提供 Nova Multimodal Embeddings 模型访问,支持同步和异步调用
  • Amazon OpenSearch Service:向量数据库,HNSW 索引 + 毫秒级 KNN 检索
  • Amazon Lambda:无服务器计算,处理 Embedding 生成和搜索请求
  • Amazon S3:存储原始素材文件
  • Amazon SQS + DynamoDB:异步任务编排与状态追踪

两条核心工作流:

素材入库:素材上传 S3 → Lambda 触发 → Bedrock 生成 Embedding → 存入 OpenSearch

素材检索:用户输入(文本/图片/视频/音频)→ Bedrock 生成查询向量 → OpenSearch KNN 搜索 → 返回相似素材+时间戳

向量维度怎么选

Nova Multimodal Embeddings 基于 Matryoshka Representation Learning(MRL)训练,提供四种维度:

维度 英文精度 中文精度 适用场景
3072 89.3 78.2 对检索质量要求极高的核心场景
1024 85.7 68.3 大多数业务场景(推荐)
384 --- --- 大规模部署、延迟敏感
256 --- --- 成本优化极端场景

JoyCastle 的实践建议:广告素材场景用 SEGMENTED_EMBEDDING 模式 + 5 秒分段长度 + 1024 维度,精度和成本平衡点刚刚好。

多模态搜索怎么用

系统支持这些搜索方式:

  • 文搜视频/图片/音频:输入"角色被手指弹飞的画面",语义匹配而非关键词匹配
  • 以图搜图/视频:上传参考图,找视觉风格相似的素材
  • 以视频搜视频:上传一段片段,找内容或风格相近的其他素材
  • 以音搜索:通过音频特征检索相似素材

所有模态映射到统一向量空间------"赛车"这个文本描述会在语义空间中跟包含赛车画面的视频自然靠近。

搜索结果精确到视频片段级别,返回具体的起止时间戳和相似度评分。支持 AUDIO_VIDEO_COMBINED 模式,同时理解画面内容和音频信息。

实测效果

基于 170 个游戏广告素材(130 条视频 + 40 张图片)测试:

  • 96.7% 召回成功率------目标内容被成功检索到
  • 73.3% 高精度召回------目标出现在 Top 2 结果中
  • 跨语言能力------中文查询 78.2 分,英文查询 89.3 分(3072 维度)

代码示例:快速上手

python 复制代码
import boto3
import json

# 初始化 Bedrock Runtime 客户端
bedrock = boto3.client('bedrock-runtime', region_name='us-east-1')

# 文本生成 Embedding
def get_text_embedding(text, dimension=1024):
    response = bedrock.invoke_model(
        modelId='amazon.nova-embed-multimodal-v1:0',
        body=json.dumps({
            "inputText": text,
            "embeddingConfig": {
                "outputEmbeddingLength": dimension
            }
        })
    )
    result = json.loads(response['body'].read())
    return result['embedding']

# 视频分段 Embedding(异步)
def get_video_segment_embedding(s3_uri, segment_seconds=5):
    response = bedrock.start_async_invoke(
        modelId='amazon.nova-embed-multimodal-v1:0',
        modelInput={
            "inputVideo": {"s3Uri": s3_uri},
            "embeddingConfig": {
                "outputEmbeddingLength": 1024,
                "videoEmbeddingConfig": {
                    "embeddingType": "SEGMENTED_EMBEDDING",
                    "segmentLengthInSec": segment_seconds
                }
            }
        },
        outputDataConfig={"s3OutputDataConfig": {"s3Uri": "s3://your-bucket/output/"}}
    )
    return response['invocationArn']

# 使用示例
embedding = get_text_embedding("角色被手指弹飞的画面")
print(f"向量维度: {len(embedding)}")
python 复制代码
# OpenSearch KNN 搜索
from opensearchpy import OpenSearch

client = OpenSearch(
    hosts=[{'host': 'your-domain.us-east-1.es.amazonaws.com', 'port': 443}],
    use_ssl=True
)

def search_similar(query_vector, top_k=10):
    body = {
        "size": top_k,
        "query": {
            "knn": {
                "embedding_vector": {
                    "vector": query_vector,
                    "k": top_k
                }
            }
        }
    }
    response = client.search(index="media-assets", body=body)
    return response['hits']['hits']

# 搜索与查询语义相似的素材
results = search_similar(embedding)
for hit in results:
    print(f"素材: {hit['_source']['filename']}, "
          f"相似度: {hit['_score']:.4f}, "
          f"时间段: {hit['_source'].get('start_time', 'N/A')}-{hit['_source'].get('end_time', 'N/A')}")

从搜索到全链路智能化

JoyCastle 跟亚马逊云科技正在推进下一步:

  1. 智能切分:结合投放效果数据(转化率、点击率),自动识别高效素材片段
  2. 自动拼接:用自然语言描述需求,系统自动完成检索→分析→去重→拼接
  3. 自动投放测试:打通广告创编模块,形成"检索→拼接→投放→反馈→优化"闭环

动手试试

完整源码和部署脚本已开源:

bash 复制代码
git clone https://github.com/aws-samples/nova-multimodal-embeddings-gmm
cd nova-multimodal-embeddings-gmm
# 按 README 部署

如果你的团队也在为素材管理头疼,这套方案值得试试。特别是游戏、电商、短视频这些素材密集型行业,多模态搜索带来的效率提升是质变级的。


参考:JoyCastle 素材资产智能化之路:基于 Amazon Nova Multimodal Embeddings 的广告素材管理实践

相关推荐
亚马逊云开发者3 小时前
3小时从零到生产:用Kiro IDE写Agent + AgentCore一键部署到云端
aws
亚马逊云开发者2 天前
都2026了,你的游戏服务器还在裸奔?聊聊用Player Gateway彻底隐藏IP的DDoS防护方案
aws
翼龙云_cloud2 天前
亚马逊云代理商:三步用 CloudWatch 高效监控 AWS Lambda 日志
云计算·aws·云服务器
zhojiew3 天前
关于AWS Direct Connect with Transit Gateway和Direct Connect Gateway
云计算·gateway·aws
观测云3 天前
AWS DevOps Agent 接入观测云最佳实践
aws·devops·可观测性·观测云
亚马逊云开发者5 天前
试了 8 种方式全失败后,我用双通道架构把 Kiro CLI 变成了 REST API
aws
亚马逊云开发者5 天前
两个 AI Agent 互相调用是什么体验?Kiro + OpenClaw 双协议实战,架构评审从 2 天干到 15 分钟
aws
亚马逊云开发者6 天前
更新个监控 Agent 要协调 200 个团队?Amazon ECS 托管守护进程终于把平台工程师从苦海里捞出来了
aws
亚马逊云开发者6 天前
5 个 Agent 协同处理金融业务,我用 Kiro + AgentCore 半天就部署上线了
aws