文搜视频、图搜视频、视频搜视频——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 的广告素材管理实践

相关推荐
Devlive 开源社区13 小时前
一口气新增三家云——七牛云 Kodo、AWS S3、Cloudflare R2;并支持应用内自动检测与一键升级
云计算·aws
云服务器代理商1 天前
AWS Bedrock 指南:模型接入、Knowledge Base RAG、Agents 与计费方式
云计算·aws·亚马逊云服务器·aws bedrock·aws代理·亚马逊云代理商
望江东浪2 天前
Vector 选型与实战:vs OTel / Logstash / Fluentd 全维对比,及统一日志与指标管道的 AWS ECS 落地
云计算·aws
威联通网络存储7 天前
基于TS-h3087XU-RP的大型成套空分设备DCS历史趋势数据治理
aws
A小辣椒22 天前
AWS Clould Support Engineer就职面试题
aws
亚林瓜子24 天前
AWS WAF中如何放行某个触发了托管规则的接口
aws·waf
悠悠121381 个月前
AWS DevOps Agent 体验一周后,我决定把 oncall 手机调成静音了
云计算·aws·devops
yyuuuzz1 个月前
独立站运营的几个技术层面常见问题
大数据·运维·服务器·网络·数据库·aws
yyuuuzz1 个月前
游戏云服务器推荐的技术选择思路
大数据·运维·服务器·游戏·云计算·aws
kernelcraft1 个月前
Boto3:Python 操作 AWS 的官方 SDK
开发语言·python·其他·aws