핵심 요약
대규모 비디오 데이터에서 원하는 장면을 찾는 것은 전통적으로 수동 태깅에 의존해왔으나, Amazon Nova 멀티모달 임베딩을 통해 이를 자동화할 수 있다. 본 아키텍처는 비디오를 15초 단위로 분할하여 오디오-비주얼 통합 임베딩을 생성하고, OpenSearch의 k-NN 인덱스와 텍스트 인덱스를 병행 사용하여 검색 정확도를 높인다. 약 79만 개의 비디오를 처리하는 실험을 통해 41시간의 처리 시간과 합리적인 운영 비용을 입증했다. 이를 통해 기업은 대규모 미디어 자산에 대해 텍스트-비디오, 비디오-비디오 및 하이브리드 검색 기능을 즉시 도입할 수 있다.
배경
AWS 계정 및 Amazon Bedrock Nova 모델 접근 권한, Python 3.9 이상 및 AWS CLI 설정, Amazon OpenSearch Service 도메인 (r6g.large 이상 권장), 비디오 저장을 위한 Amazon S3 버킷
대상 독자
대규모 미디어 자산을 관리하고 자연어 기반 비디오 검색 시스템을 구축하려는 ML 엔지니어 및 솔루션 아키텍트
의미 / 영향
이 아키텍처는 수동 태깅에 의존하던 기존 비디오 검색의 한계를 극복하고, 대규모 영상 데이터에 대한 자동화된 시맨틱 검색을 가능하게 한다. 특히 Nova 모델의 비용 효율적인 배치 처리와 OpenSearch의 하이브리드 검색 기능을 결합하여 기업용 미디어 데이터 레이크 구축의 실질적인 표준을 제시한다.
섹션별 상세
response = bedrock.start_async_invoke(
modelId="amazon.nova-2-multimodal-embeddings-v1:0",
modelInput={
"taskType": "SEGMENTED_EMBEDDING",
"segmentedEmbeddingParams": {
"embeddingPurpose": "GENERIC_INDEX",
"embeddingDimension": 1024,
"video": {
"format": "mp4",
"embeddingMode": "AUDIO_VIDEO_COMBINED",
"source": {"s3Location": {"uri": video_s3_uri}},
"segmentationConfig": {"durationSeconds": 15}
}
}
},
outputDataConfig={"s3OutputDataConfig": {"s3Uri": output_s3_uri}}
)Amazon Bedrock Nova 모델을 사용하여 비디오 임베딩 생성을 비동기로 시작하는 코드

knn_index_body = {
"settings": {
"index.knn": True,
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"video_id": {"type": "keyword"},
"segment_index": {"type": "integer"},
"timestamp": {"type": "float"},
"embedding": {
"type": "knn_vector",
"dimension": 1024,
"method": {
"name": "hnsw",
"space_type": "cosinesimilarity",
"engine": "faiss"
}
},
"s3_uri": {"type": "keyword"}
}
}
}
opensearch_client.indices.create(index="video-embeddings-knn", body=knn_index_body)OpenSearch에서 벡터 검색을 위한 k-NN 인덱스를 생성하는 코드
def search_hybrid(query_text, opensearch_client, k=10, vector_weight=0.7, text_weight=0.3):
query_embedding = generate_query_embedding(query_text)
knn_response = opensearch_client.search(
index="video-embeddings-knn",
body={"query": {"knn": {"embedding": {"vector": query_embedding, "k": 20}}}, "size": 20}
)
text_response = opensearch_client.search(
index="video-embeddings-text",
body={"query": {"match": {"tags": query_text}}, "size": 20}
)
// ...(중략)
for hit in knn_hits:
combined[key]['combined_score'] = hit['_score'] * vector_weight
for hit in text_hits:
combined[key]['combined_score'] += hit['_score'] * text_weight
return sorted(combined.values(), key=lambda x: x['combined_score'], reverse=True)[:k]벡터 유사도와 텍스트 매칭 점수를 결합하여 하이브리드 검색을 수행하는 로직

실무 Takeaway
- 비디오 임베딩 시 1024차원을 선택하여 저장 비용을 66% 절감하면서도 검색 정확도를 유지하는 최적화가 가능하다.
- 벡터 검색(k-NN)과 키워드 검색(BM25)을 0.7:0.3 비율로 결합한 하이브리드 방식을 적용하여 검색 결과의 정밀도를 높일 수 있다.
- Bedrock 비동기 API의 할당량 제한을 극복하기 위해 작업 큐와 폴링 메커니즘을 포함한 오케스트레이터를 구축하여 대규모 데이터를 안정적으로 처리한다.
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.