
튜토리얼
불투명한 비디오에서 수익성 높은 순간으로: TwelveLabs를 활용한 맥락 광고 엔진 구축

네이선 체
본 튜토리얼에서는 Twelve Labs의 Pegasus 1.5를 사용한 구조화된 장면 인텔리전스, Marengo 3.0을 활용한 멀티모달 시맨틱 임베딩, 그리고 Databricks Delta Lake 기반의 엔터프라이즈 분석 시스템을 결합하여 컨텍스트 기반 광고 엔진을 구축하는 과정을 살펴봅니다. 본 엔진은 단순한 메타데이터에 의존하는 대신 비디오 자체의 실제 맥락을 정확히 이해하여 광고를 게재하며, IAB 3.1 분류 체계를 완벽히 준수하고 FreeWheel과 호환 가능한 페이로드를 생성합니다.
본 튜토리얼에서는 Twelve Labs의 Pegasus 1.5를 사용한 구조화된 장면 인텔리전스, Marengo 3.0을 활용한 멀티모달 시맨틱 임베딩, 그리고 Databricks Delta Lake 기반의 엔터프라이즈 분석 시스템을 결합하여 컨텍스트 기반 광고 엔진을 구축하는 과정을 살펴봅니다. 본 엔진은 단순한 메타데이터에 의존하는 대신 비디오 자체의 실제 맥락을 정확히 이해하여 광고를 게재하며, IAB 3.1 분류 체계를 완벽히 준수하고 FreeWheel과 호환 가능한 페이로드를 생성합니다.

목차
No headings found on page
뉴스레터 구독하기
뉴스레터 구독하기
영상 이해 분야의 최신 기술 업데이트, 튜토리얼 및 인사이트를 받아보세요.
영상 이해 분야의 최신 기술 업데이트, 튜토리얼 및 인사이트를 받아보세요.
AI로 영상을 검색하고, 분석하고, 탐색하세요.
2026. 5. 19.
14분
링크 복사하기
요약 (TLDR)
대부분의 CTV/FAST 플랫폼은 화면에서 실제로 무슨 일이 일어나고 있는지 확인하지 않은 채 광고 송출 결정을 내립니다. 이 튜토리얼에서는 정형화된 장면 인텔리전스를 위해 TwelveLabs Pegasus 1.5를, 멀티모달 임베딩을 위해 Marengo 3.0을, 엔터프라이즈 분석을 위해 Databricks Delta Lake를 사용하는 프로덕션 등급의 문맥 맞춤형(Contextual) 광고 엔진 구축 과정을 안내합니다. 이를 통해 오래된 메타데이터가 아닌 실제 비디오 이해를 기반으로 광고가 배치되며, IAB 3.1 분류 체계를 완벽히 준수하고 FreeWheel과 호환되는 페이로드를 생성할 수 있습니다.
구축할 결과물: 비디오 콘텐츠를 쿼리 가능한 컨텍스트로 변환하고, 의미론적 유사성 및 브랜드 안전성 규칙을 기반으로 광고와 장면을 매칭하며, 최적의 광고 삽입 시점(Break Point)을 식별하고, 다운스트림 분석을 위해 의사결정 데이터를 Databricks로 내보내는 파이프라인 전체를 구축합니다.
소개
대부분의 광고 의사결정 스택은 비디오를 불투명한 덩어리(Blob)로 취급합니다. 이들은 메타데이터, 콘텐츠 라벨 또는 과거 시청자 세그먼트에 의존해 광고 배치 결정을 내립니다. 비디오 자체만을 제외한 모든 것에 의존하는 셈입니다.
이러한 방식은 대략적인 타겟팅에는 잘 작동합니다. 키워드 매칭을 통해 원하는 범주에 근접할 수는 있습니다. 하지만 다음 세 가지 시나리오를 고려하지 못하기 때문에 상당한 수익 기회를 놓치게 됩니다.
타이밍: 장면 전환을 고려하지 않고 배치된 광고는 시청 흐름을 끊어 이탈을 유발합니다.
컨텍스트 (문맥): 시스템이 화면에서 실제로 무슨 일이 일어나고 있는지 파악하지 못할 때 브랜드 안전성 오류가 발생합니다. 예를 들어, 알코올 광고가 중독 치료 과정을 묘사하는 장면 중에 노출되어서는 안 됩니다.
깊이: 표면적인 인구통계학적 타겟팅은 가구 소득, 시청 기기, 실시간 참여 신호와 같은 미묘한 차이를 포착하지 못합니다.
이 튜토리얼은 비디오를 블랙박스가 아닌 쿼리 가능한 정형 데이터로 취급하는 문맥 맞춤형 광고 엔진을 구축하여 이 세 가지 문제를 모두 해결합니다. 이 엔진은 다음과 같은 기술을 결합합니다.
감정, 톤, 출연진, 주변 환경 및 GARM 정렬 안전 신호 등 상세한 장면 이해를 위한 TwelveLabs Pegasus 1.5
장면과 광고 크리에이티브 간의 유사도 측정을 지원하는 멀티모달 의미론적 임베딩을 위한 TwelveLabs Marengo 3.0
엔터프라이즈급 스토리지 및 검색을 위한 Databricks Delta Lake + Mosaic AI Vector Search
기존 광고 서버와 직접 연동하기 위한 FreeWheel/OpenRTB 호환 페이로드 생성

그림 1: 비디오 인벤토리 내 인텔리전트 장면 추출
목표는 실제 비디오 콘텐츠에 기반한 데이터를 바탕으로 "브랜드 안전성과 캠페인 제약 조건을 준수하면서, 이 특정 장면에서, 이 시청자층을 대상으로, 이 광고 시간에 어떤 광고를 송출해야 하는가?"라는 질문에 답하는 것입니다.
완성된 애플리케이션의 데모 영상은 다음과 같습니다.

사전 준비 사항
시작하기 전에 다음 항목이 필요합니다.
Node.js 18+ 및 npm/yarn/pnpm
두 개의 인덱스가 포함된 TwelveLabs API 키:
콘텐츠 비디오용
TL_INDEX_ID광고 크리에이티브용
TL_AD_INDEX_ID
TwelveLabs로 대용량 비디오 파일을 전송하기 위한 Vercel Blob 토큰 (
BLOB_READ_WRITE_TOKEN)IAB 3.1 분류 체계 매핑 중 저지연 텍스트 임베딩을 위한 OpenAI API 키 (선택 사항)
DATABRICKS_TOKEN,DATABRICKS_HOST,DATABRICKS_HTTP_PATH및 선택적으로DATABRICKS_CATALOG와DATABRICKS_SCHEMA가 설정된 Databricks 작업 공간 (선택 사항)
프로젝트를 클론하고 실행하세요:
>> git clone https://github.com/nathanchess/twelvelabs-context-ad-engine.git >> cd contextual-ad-engine >> npm install >> cp .env.example .env.local >> npm
아키텍처 개요

그림 2: 문맥 맞춤형 광고 엔진 백엔드 아키텍처 (LucidChart)
이 아키텍처는 상호 보완적인 역할을 하는 두 가지 TwelveLabs 모델을 활용합니다.
Marengo 3.0은 인코더 역할을 합니다. 비디오를 검색 가능한 512차원 벡터 임베딩으로 변환하여 제품, 기분, 환경 및 특정 시점을 쿼리할 수 있도록 만듭니다. 이를 통해 광고 크리에이티브와 콘텐츠 장면 간의 의미론적 매칭이 가능해집니다.
Pegasus 1.5는 추론 모델입니다. 각 장면에 대한 정형 메타데이터(타겟 고객층, 브랜드 안전성 플래그, 감정 상태, 타겟팅 제안 등)를 생성합니다. 구조화된 출력(Structured Outputs)을 지원하므로 다운스트림 시스템이 일관되게 파싱할 수 있는 JSON을 생성합니다.
두 모델의 고유한 흐름과 생성된 메타데이터를 결합해, 기술 아키텍처 다이어그램 오른쪽에 표시된 **단일 결정론적 계산**(사용자-광고 매치 점수 x 장면-광고 매치 점수)을 수행합니다. 이를 통해 사전에 수동 작성된 텍스트 메타데이터 대신 **실제 비디오 이해에 기반한 장면 단위의 의사결정**을 통해 광고를 추천할 수 있습니다.
이 방식을 통해 광고 엔진은 각 비디오 세그먼트를 다음과 같은 실시간 컨텍스트 신호로 처리할 수 있습니다.
톤 (Tone)
감정 (Sentiment)
주변 환경 (Environment)
브랜드 안전성 (Brand Safety)
이 접근 방식은 몇 주 전에 라벨링된 오래된 메타데이터가 아니라 실제로 비디오 내에서 일어나고 있는 상황을 기반으로 광고 결정을 내립니다. 기본 기술에 대한 더 자세한 배경은 TwelveLabs 플랫폼 개요 및 TwelveLabs Research에서 발간한 자료를 참조하세요.
핵심 광고 결정 및 배치 로직
핵심 의사결정 로직은 두 신호를 단일 점수로 결합합니다.
totalScore = adAffinity * sceneFit
여기서 adAffinity는 광고가 시청자 프로필(인구통계, 관심사, 정책 제약 조건 등)에 얼마나 잘 맞는지 측정하고, sceneFit은 광고 크리에이티브가 현재 장면에 얼마나 적합한지(의미론적 유사도 + 안전성 + 톤 + 환경)를 측정합니다.
광고 추천 파이프라인은 네 개의 가중 신호를 결합하여 sceneFit을 계산합니다.
sceneFit = suitableMatch * 0.15 + // Pegasus 적합 카테고리(suitable_categories) 중첩 점수 environmentFit * 0.15 + // 환경-카테고리 연관성 점수 toneCompat * 0.10 + // 감정 및 톤 호환성 점수 contextMatch * 0.60 // Marengo 의미론적 코사인 유사도 점수
가중치 설정에는 뚜렷한 의도가 있습니다. CTV/OTT 비즈니스에서 가상 높은 CPM 상승률은 대개 의미론적 맥락의 품질(Semantic Context Quality)에서 발생하므로, Marengo 3.0이 점수의 가장 큰 부분을 주도합니다. 나머지 신호는 정책 및 콘텐츠 안전 팀에 완벽한 제어 기능을 제공하기 위한 든든한 가이드라인 역할을 해줍니다.
1단계: 구조화된 광고 메타데이터 생성 (Pegasus + IAB + FreeWheel)
이 단계에서는 Pegasus 1.5를 사용하여 비디오 콘텐츠로부터 구조화된 장면 분석 결과를 추출하고, 이를 IAB 3.1 분류 체계로 표준화한 후, 광고 서버 연동을 위해 FreeWheel 호환 키-값 쌍을 생성합니다.
1.1 - 구조화된 출력(Structured Output)으로 Pegasus 1.5 실행
/api/analyze 엔드포인트는 다음 세 가지 작업을 처리합니다.
프론트엔드로부터 프롬프트 수신 (
/videos또는/ads페이지에서 제공)중복 처리를 방지하기 위해 Vercel Blob 캐시 확인
구조화된 출력 형식을 적용해 Pegasus 1.5를 호출하고 결과 저장
const tl_client = new TwelveLabs({ apiKey: process.env.TL_API_KEY }); const result = await tl_client.analyze({ videoId, prompt, temperature: 0.2, response_format }, { timeoutInSeconds: 90 });
결과물은 후속 시스템에서 판단의 근거로 사용할 수 있는 시간 순 정렬 메타데이터(장면 경계, 감정, 환경, 출연진, 안전 플래그 등)입니다. 이는 기존의 취약한 키워드 기반 타겟팅을 확실한 비디오 분석 기반 모델로 대체합니다.
1.2 - 임베딩 KNN ID 매칭을 통한 IAB 3.1 표준화
광고 서버와 원활히 연동하려면 Pegasus의 분석 결과가 IAB Content Taxonomy 3.1과 매핑되어야 합니다. 파이프라인은 텍스트 임베딩과 표준 IAB ID에 대한 k-최근접 이웃(KNN) 매칭을 사용합니다.

이 방식은 검증된 IAB 3.1 행들의 폐쇄형 참조 테이블을 유지합니다.
export const IAB_ALLOWED_ROWS = [ { tier1: "Alcohol", tier2: "Spirits", code: "1005" }, { tier1: "Alcohol", tier2: "Beer", code: "1003" }, { tier1: "Consumer Packaged Goods", tier2: "General Food", tier3: "Snacks", code: "1169" }, { tier1: "Finance and Insurance", tier2: "Stocks and Investments", code: "1338" }, { tier1: "Vehicles", tier2: "Automotive Ownership", tier3: "New Vehicle Ownership", code: "1536" }, // ... ] as const;
각 행은 인덱스 생성 시점에 한 번 임베딩됩니다. 런타임에 모델로부터 추출된 후보 레이블이 임베딩되어 KNN을 통해 가장 가까운 표준 IAB 행들과 매칭된 다음, 유사도 임계치에 맞게 필터링되고 중복이 제거됩니다.
export function normalizeIabWithKnnPolicy( rawInput: unknown, categoryKey?: string ): IabPolicyResult { const rawItems = Array.isArray(rawInput) ? rawInput : []; // 1) 모델 출력에서 후보 텍스트 임베딩 추출 const embeddedCandidates = embedCandidateLabels(rawItems); // 2) 표준 IAB 3.1 임베딩 인덱스에 대해 KNN 검색 실행 const knnMatches = queryIabKnnIndex(embeddedCandidates, { k: 5 }); // 3) 유사도 임계치를 넘는 정책 호환 매치만 유지 const normalizedItems = dedupeAndSort( applyIabMatchPolicy(knnMatches).filter( (item): item is IabTaxonomyItem => Boolean(item) ) ); const high = normalizedItems.filter((item) => item.confidence >= IAB_HIGH_CONFIDENCE); const medium = normalizedItems.filter((item) => item.confidence >= IAB_MEDIUM_CONFIDENCE); let effectiveItems: IabTaxonomyItem[] = []; let fallbackApplied = false; let fallbackReason: string | null = null; if (high.length > 0) { effectiveItems = high; } else if (medium.length > 0) { effectiveItems = medium; fallbackReason = "신뢰도가 높은 Tier-2/3 매칭 항목이 없습니다. 중간 신뢰도의 Tier-1 대역을 사용합니다."; } else { const fallback = (categoryKey && FALLBACK_BY_CATEGORY_KEY[categoryKey]) || []; effectiveItems = fallback; fallbackApplied = true; fallbackReason = fallback.length ? "중간 신뢰도의 KNN 검색 결과가 없습니다. 결정론적 카테고리별 대체 장치(Fallback)를 적용했습니다." : "중간 신뢰도의 KNN 검색 결과 및 카테고리 대체 장치 매핑을 찾지 못했습니다."; } const effectiveTier1 = [...new Set(effectiveItems.map((item) => item.tier1))]; const effectiveTier2 = high.length > 0 ? [...new Set(effectiveItems.map((item) => item.tier2))] : []; const effectiveTier3 = high.length > 0 ? [...new Set(effectiveItems.map((item) => item.tier3).filter((tier3): tier3 is string => Boolean(tier3)))] : []; const effectiveIabIds = high.length > 0 ? [...new Set(effectiveItems.map((item) => item.iabId).filter(Boolean))] : []; const averageConfidence = normalizedItems.length > 0 ? normalizedItems.reduce((sum, item) => sum + item.confidence, 0) / normalizedItems.length : 0; return { normalizedItems, effectiveTier1, effectiveTier2, effectiveTier3, effectiveIabIds, averageConfidence, fallbackApplied, fallbackReason, }; }
이 파이프라인은 다음과 같이 작동합니다.
모델이 생성한 카테고리 구문을 임베딩합니다.
표준 IAB 3.1 행 임베딩에 대해 KNN 유사도 검색을 실행합니다.
검색된 대상을 유효한 IAB 분류 체계 행/ID로 제한하여 매칭시킵니다.
중복을 제거하고 신뢰도에 따라 매칭 순위 목록을 정렬합니다.
효과적인 타겟팅 필드로써 높은 신뢰도를 갖는 데이터를 우선 노출시킵니다.
신뢰도가 너무 낮은 경우 결정론적으로 구성된 대체 장치(Fallback) 정책을 적용합니다.
이는 실제 서비스 환경에서 매우 중요합니다. 분류 명칭을 AI가 임의로 지어내는 환각(Hallucination) 현상을 차단하고, 엄격하고 유효한 IAB 3.1 ID를 보장하면서도, 동시에 임베딩 기반 검색의 강점인 언어적 뉘앙스를 고스란히 살려냅니다.
1.3 - 정형화된 메타데이터로부터 FreeWheel KVP 페이로드 생성

IAB 및 컨텍스트 신호 분석이 완료되면, 엔진은 타겟 광고 송출을 연동하기 위해 FreeWheel 전용 키-값 쌍(KVP)을 생성합니다.
const freewheelPayload = { ad_server: "Freewheel", endpoint: "https://ads.freewheel.tv/ad/p/1", generated_kvps: { vw_brand: toBrand(parsed.company), vw_ctx_inc: includeContexts.join(","), vw_ctx_exc: excludeContexts.join(","), vw_garm_floor: "strict", vw_duration: String(duration), vw_ad_title: parsed.proposedTitle || "untitled", vw_iab_t1: policy.effectiveTier1.join(","), vw_iab_t2: policy.effectiveTier2.join(","), vw_iab_t3: policy.effectiveTier3.join(","), vw_iab_codes: policy.effectiveCodes.join(","), vw_iab_conf: policy.averageConfidence.toFixed(3), }, };
핵심 필드는 다음과 같습니다.
vw_ctx_inc는 타겟팅 대상 시나리오와 Pegasus 권장 컨텍스트를 결합합니다.vw_ctx_exc는 캠페인 제외 조건, Pegasus 제외어, GARM 플래그를 결합합니다.vw_iab_*필드는 엄격히 정형화 및 유효성이 확인된 클래스로만 구성됩니다.
이 단계는 AI 기반의 분석 결과를 기존의 광고 운영(Ad Ops) 워크플로우에 결합하는 다리 역할을 합니다. TwelveLabs는 맥락 분석 인텔리전스를 제공하고, 이를 사후 정책 표준화로 거름으로써 안전하고 투명한 동작을 보장하며, 최종적으로 FreeWheel/OpenRTB 매핑을 통해 실제 상용화 적용이 가능하게 만듭니다.
2단계: Marengo를 활용한 멀티모달 임베딩 구축
콘텐츠 장면과 광고 영상 모두 Marengo 3.0을 이용해 동일한 512차원 임베딩 공간에 매핑됩니다. 이를 통해 단순 텍스트 키워드 중첩을 뛰어넘어, 비디오와 광고 크리에이티브 사이의 실질적인 시맨틱 일치(Semantic Matching)를 가능하게 해줍니다.
export function cosineSimilarity(vecA: number[], vecB: number[]): number { let dot = 0, normA = 0, normB = 0; const len = Math.min(vecA.length, vecB.length); for (let i = 0; i < len; i++) { dot += vecA[i] * vecB[i]; normA += vecA[i] * vecA[i]; normB += vecB[i] * vecB[i]; } if (normA === 0 || normB === 0) return 0; return dot / (Math.sqrt(normA) * Math.sqrt(normB)); }

이 임베딩 벡터의 분포 상태는 현재 데모 애플리케이션의 'Metadata View'에서 실제 지도로 시각화되어 제공되며, 의미론적으로 유사한 장면들이 가깝게 군집화(Clustering)되는 원리를 확인할 수 있습니다.
광고 후보 간의 순위 가용 폭을 넓히기 위해, 엔진은 예상된 코사인 값을 표준화하고 비선형 부스팅 기법(Power Transform)을 거치게 설계되었습니다. 이 보정 과정을 통해 0.7과 0.8 사이의 미세한 점수 차이를 유의미하게 벌려주며, 상위 추천 목록을 더욱 명확하게 구분할 수 있도록 돕습니다.
3단계: 최적의 광고 삽입 지점 분석
최적의 광고를 매칭하기 전에, 엔진은 비디오 콘텐츠 내에서 광고를 삽입하기 가장 편안하고 타격을 주지 않는 최적의 기점(Monetization Break Point)을 찾습니다. Pegasus 1.5는 영상의 전반적인 맥락을 흐름에 따라 쪼개 분석하여 다음 요소를 판별합니다.
세그먼트 이후 전환 안정 점수
시청 몰입 차단 우려 제로율
긴장 및 감정 이완 구간 검측
자연스러운 페이드 등 전환 유형에 대한 가선값
현재 운용 모드별 비즈니스 가치 승수 (Strict, Balanced, Revenue_max)

이후 설정된 최소 광고 송출 주기 조건을 대입하여, 탐욕적(Greedy) 시간순 배치 연산을 진행해 최종 광고 타임라인을 확정합니다.
이는 대단히 고차원적인 작업입니다. 아무리 의미 매칭률이 높은 최적의 광고라 하더라도, 배우가 대사를 읊는 중간이나 긴장감이 절정인 극적 클라이맥스에 불쑥 광고가 송입된다면 오히려 이탈을 자초하기 때문입니다.
4단계: 안전 장벽 및 다양성 제약 기반 광고 필터링 및 랭킹
최적의 광고 시간 식별, 임베딩 수립, 상세 속성 정리가 마침내 끝나면 추천 목록 생성에 힘을 싣습니다. 그러나 단순 수치 정렬로는 실서비스 광고를 지탱할 수 없습니다. 완벽한 비즈니스를 마크하기 위해 다음과 같은 두 개의 검증 필터 관문이 들어갑니다.
1. 브랜드 신용 보호를 위한 하드 게이팅
정식 점수 등재에 들어가기 전에 일차적으로 광고는 다음 제한 정책을 통과해야 합니다.
유저 자격 및 전달 타겟 카테고리 자격 체크
부정적인 중첩 맥락 감지 및 차단
GARM 명시 규제 범주 제외 (음주, 사행성 행위, 과격 묘사)
세부 안전 모드별 기준 검수
2. 다중 광고 구간 간 카테고리 입체화 (제한적 다양성 구현)
비공개 설정과 브랜드 보전이 최선이어도, 차 애호가라고 해서 방송 내내 매 광고마다 스포츠카 광고만 계속 나오기를 바라지는 않습니다. 엔진은 다음을 준수합니다.
동일한 광고의 연속 반복 노출 제한 한도 설정
업종 카테고리별 중첩 노출 상한선 지정
최적 조건 후보가 제약에 걸려 배제될 경우를 위한 차순위(Fallback) 선택 로직 탑재

그 결과, **높은 유사도 점수**를 받으면서도 기존 **레거시 방송 시스템처럼 자연스럽고 완성도 있는** 맞춤형 광고 편성이 완성됩니다.
5단계: 전사 성능 공유를 위한 Databricks 연동
이 서비스 아키텍처는 산출 정보(상세 메타데이터, 고유 임베딩, 결정 이력 정보 등)를 지속적으로 기업 핵심 자산 플랫폼으로 환원할 때 가장 강력한 시너지를 가집니다. 엔진은 원활한 대시보드 표현 및 ML 가공을 위해 이 모든 정합 데이터들을 Databricks Delta 테이블에 깔끔히 적재해 줍니다.
각 사의 사용 주체인 Databricks 업무 테이블 환경명에 맞게 즉석에서 생성된 쿼리를 사용하실 수 있습니다.
CREATE OR REPLACE VIEW ad_metadata_premium_spirits_vec AS SELECT creative_id, campaign_name, from_json(marengo_embedding_json, 'array<double>') AS embedding FROM main.default.ad_metadata_premium_spirits WHERE vector_sync_status = 'embedded_marengo_clip_avg'
데이터를 Databricks에 연결하여 적재하면 다음과 같은 이점이 발생합니다.
대용량 시맨틱 매칭 검색을 지원하는 Mosaic AI Vector Search Indexing 자원 결성
광고 매칭 결정을 낱낱이 소명할 수 있는 완벽한 투명성의 품질 검증 감사 체계(QA Audit Loop) 확보
새로운 광고 소재 제작 및 경쟁사 정보 파악을 위한 멀티모달 유사 영상 수집 및 검색 기능
전통 비즈니스 인텔리전스(BI) 환경과 어우러지는 AI 지원 매칭 성과 예측 연동
전사적 도입을 검토하는 기획/기술 팀에게 이 부분은 TwelveLabs와 Databricks의 조합이 선사하는 가장 가치 있는 이정표입니다. **비디오 분석 모델의 강점인 인공지능 성능과 뛰어난 안정성의 기업용 데이터 거버넌스 인프라가 매끄럽게 만나는 접점**이기 때문입니다.
컨텍스트 광고 시장에서 TwelveLabs가 필요한 이유
우리가 이번 글에서 설계하고 구성해 본 문맥 광고 매칭 모듈은 과거의 무의미한 단순 정적 분류 수준을 넘어갑니다. 흐릿한 정적 메타데이터 정보망에서 탈피해, 실시간 라이브 영상의 맥락에 온전히 동참하는 광고 매치 생태계를 형성해 드립니다.
TwelveLabs는 최첨단 AI 기초 역량을 토대로 제품의 밑거름을 닦아 드립니다.
자연어 기반으로 장면의 질감까지 분석해 안전 규격까지 포착하는 정형 인텔리전스 Pegasus 1.5
문맥 탐색과 미세 뉘앙스를 담은 시각 기반 복합 벡터 공간 매칭을 실현하는 SDK Marengo 3.0
기존 레거시 광고 기술 체계와 위화감 없이 곧바로 데이터 교환이 편리한 완전한 API 주도형 설계 방식
TwelveLabs는 파악조차 힘들던 무거운 동영상 스토리지 데이터를 풍부한 비즈니스 쿼리와 수익 흐름을 창출하는 핵심 디지털 자산으로 재탄생시킵니다.
지금 시작하세요
Playground: TwelveLabs 시작하기 (Home)
API Reference: 개발 가이드 및 소개 (Introduction | TwelveLabs)
Product Overview: TwelveLabs 비디오 AI 플랫폼: 검색, 분석, 임베딩
Sales | Enterprise: 엔터프라이즈 도입 상담 문의
Architecture Diagram: https://lucid.app/lucidchart/ef8d11e1-3f00-4bf0-b411-ab8e3bb3606b/edit?viewport_loc=515%2C-1146%2C5419%2C2654%2C0_0&invitationId=inv_09de1972-142b-4369-9df4-f91eb3f5a949
Source Code: nathanchess/twelvelabs-context-ad-engine: TwelveLabs 멀티모달 및 Databricks가 연계된 문맥 맞춤형 광고 매칭 엔진 GitHub 소스 코드
Deployed Application: 실제 운영 애플리케이션 체험 — TwelveLabs
요약 (TLDR)
대부분의 CTV/FAST 플랫폼은 화면에서 실제로 무슨 일이 일어나고 있는지 확인하지 않은 채 광고 송출 결정을 내립니다. 이 튜토리얼에서는 정형화된 장면 인텔리전스를 위해 TwelveLabs Pegasus 1.5를, 멀티모달 임베딩을 위해 Marengo 3.0을, 엔터프라이즈 분석을 위해 Databricks Delta Lake를 사용하는 프로덕션 등급의 문맥 맞춤형(Contextual) 광고 엔진 구축 과정을 안내합니다. 이를 통해 오래된 메타데이터가 아닌 실제 비디오 이해를 기반으로 광고가 배치되며, IAB 3.1 분류 체계를 완벽히 준수하고 FreeWheel과 호환되는 페이로드를 생성할 수 있습니다.
구축할 결과물: 비디오 콘텐츠를 쿼리 가능한 컨텍스트로 변환하고, 의미론적 유사성 및 브랜드 안전성 규칙을 기반으로 광고와 장면을 매칭하며, 최적의 광고 삽입 시점(Break Point)을 식별하고, 다운스트림 분석을 위해 의사결정 데이터를 Databricks로 내보내는 파이프라인 전체를 구축합니다.
소개
대부분의 광고 의사결정 스택은 비디오를 불투명한 덩어리(Blob)로 취급합니다. 이들은 메타데이터, 콘텐츠 라벨 또는 과거 시청자 세그먼트에 의존해 광고 배치 결정을 내립니다. 비디오 자체만을 제외한 모든 것에 의존하는 셈입니다.
이러한 방식은 대략적인 타겟팅에는 잘 작동합니다. 키워드 매칭을 통해 원하는 범주에 근접할 수는 있습니다. 하지만 다음 세 가지 시나리오를 고려하지 못하기 때문에 상당한 수익 기회를 놓치게 됩니다.
타이밍: 장면 전환을 고려하지 않고 배치된 광고는 시청 흐름을 끊어 이탈을 유발합니다.
컨텍스트 (문맥): 시스템이 화면에서 실제로 무슨 일이 일어나고 있는지 파악하지 못할 때 브랜드 안전성 오류가 발생합니다. 예를 들어, 알코올 광고가 중독 치료 과정을 묘사하는 장면 중에 노출되어서는 안 됩니다.
깊이: 표면적인 인구통계학적 타겟팅은 가구 소득, 시청 기기, 실시간 참여 신호와 같은 미묘한 차이를 포착하지 못합니다.
이 튜토리얼은 비디오를 블랙박스가 아닌 쿼리 가능한 정형 데이터로 취급하는 문맥 맞춤형 광고 엔진을 구축하여 이 세 가지 문제를 모두 해결합니다. 이 엔진은 다음과 같은 기술을 결합합니다.
감정, 톤, 출연진, 주변 환경 및 GARM 정렬 안전 신호 등 상세한 장면 이해를 위한 TwelveLabs Pegasus 1.5
장면과 광고 크리에이티브 간의 유사도 측정을 지원하는 멀티모달 의미론적 임베딩을 위한 TwelveLabs Marengo 3.0
엔터프라이즈급 스토리지 및 검색을 위한 Databricks Delta Lake + Mosaic AI Vector Search
기존 광고 서버와 직접 연동하기 위한 FreeWheel/OpenRTB 호환 페이로드 생성

그림 1: 비디오 인벤토리 내 인텔리전트 장면 추출
목표는 실제 비디오 콘텐츠에 기반한 데이터를 바탕으로 "브랜드 안전성과 캠페인 제약 조건을 준수하면서, 이 특정 장면에서, 이 시청자층을 대상으로, 이 광고 시간에 어떤 광고를 송출해야 하는가?"라는 질문에 답하는 것입니다.
완성된 애플리케이션의 데모 영상은 다음과 같습니다.

사전 준비 사항
시작하기 전에 다음 항목이 필요합니다.
Node.js 18+ 및 npm/yarn/pnpm
두 개의 인덱스가 포함된 TwelveLabs API 키:
콘텐츠 비디오용
TL_INDEX_ID광고 크리에이티브용
TL_AD_INDEX_ID
TwelveLabs로 대용량 비디오 파일을 전송하기 위한 Vercel Blob 토큰 (
BLOB_READ_WRITE_TOKEN)IAB 3.1 분류 체계 매핑 중 저지연 텍스트 임베딩을 위한 OpenAI API 키 (선택 사항)
DATABRICKS_TOKEN,DATABRICKS_HOST,DATABRICKS_HTTP_PATH및 선택적으로DATABRICKS_CATALOG와DATABRICKS_SCHEMA가 설정된 Databricks 작업 공간 (선택 사항)
프로젝트를 클론하고 실행하세요:
>> git clone https://github.com/nathanchess/twelvelabs-context-ad-engine.git >> cd contextual-ad-engine >> npm install >> cp .env.example .env.local >> npm
아키텍처 개요

그림 2: 문맥 맞춤형 광고 엔진 백엔드 아키텍처 (LucidChart)
이 아키텍처는 상호 보완적인 역할을 하는 두 가지 TwelveLabs 모델을 활용합니다.
Marengo 3.0은 인코더 역할을 합니다. 비디오를 검색 가능한 512차원 벡터 임베딩으로 변환하여 제품, 기분, 환경 및 특정 시점을 쿼리할 수 있도록 만듭니다. 이를 통해 광고 크리에이티브와 콘텐츠 장면 간의 의미론적 매칭이 가능해집니다.
Pegasus 1.5는 추론 모델입니다. 각 장면에 대한 정형 메타데이터(타겟 고객층, 브랜드 안전성 플래그, 감정 상태, 타겟팅 제안 등)를 생성합니다. 구조화된 출력(Structured Outputs)을 지원하므로 다운스트림 시스템이 일관되게 파싱할 수 있는 JSON을 생성합니다.
두 모델의 고유한 흐름과 생성된 메타데이터를 결합해, 기술 아키텍처 다이어그램 오른쪽에 표시된 **단일 결정론적 계산**(사용자-광고 매치 점수 x 장면-광고 매치 점수)을 수행합니다. 이를 통해 사전에 수동 작성된 텍스트 메타데이터 대신 **실제 비디오 이해에 기반한 장면 단위의 의사결정**을 통해 광고를 추천할 수 있습니다.
이 방식을 통해 광고 엔진은 각 비디오 세그먼트를 다음과 같은 실시간 컨텍스트 신호로 처리할 수 있습니다.
톤 (Tone)
감정 (Sentiment)
주변 환경 (Environment)
브랜드 안전성 (Brand Safety)
이 접근 방식은 몇 주 전에 라벨링된 오래된 메타데이터가 아니라 실제로 비디오 내에서 일어나고 있는 상황을 기반으로 광고 결정을 내립니다. 기본 기술에 대한 더 자세한 배경은 TwelveLabs 플랫폼 개요 및 TwelveLabs Research에서 발간한 자료를 참조하세요.
핵심 광고 결정 및 배치 로직
핵심 의사결정 로직은 두 신호를 단일 점수로 결합합니다.
totalScore = adAffinity * sceneFit
여기서 adAffinity는 광고가 시청자 프로필(인구통계, 관심사, 정책 제약 조건 등)에 얼마나 잘 맞는지 측정하고, sceneFit은 광고 크리에이티브가 현재 장면에 얼마나 적합한지(의미론적 유사도 + 안전성 + 톤 + 환경)를 측정합니다.
광고 추천 파이프라인은 네 개의 가중 신호를 결합하여 sceneFit을 계산합니다.
sceneFit = suitableMatch * 0.15 + // Pegasus 적합 카테고리(suitable_categories) 중첩 점수 environmentFit * 0.15 + // 환경-카테고리 연관성 점수 toneCompat * 0.10 + // 감정 및 톤 호환성 점수 contextMatch * 0.60 // Marengo 의미론적 코사인 유사도 점수
가중치 설정에는 뚜렷한 의도가 있습니다. CTV/OTT 비즈니스에서 가상 높은 CPM 상승률은 대개 의미론적 맥락의 품질(Semantic Context Quality)에서 발생하므로, Marengo 3.0이 점수의 가장 큰 부분을 주도합니다. 나머지 신호는 정책 및 콘텐츠 안전 팀에 완벽한 제어 기능을 제공하기 위한 든든한 가이드라인 역할을 해줍니다.
1단계: 구조화된 광고 메타데이터 생성 (Pegasus + IAB + FreeWheel)
이 단계에서는 Pegasus 1.5를 사용하여 비디오 콘텐츠로부터 구조화된 장면 분석 결과를 추출하고, 이를 IAB 3.1 분류 체계로 표준화한 후, 광고 서버 연동을 위해 FreeWheel 호환 키-값 쌍을 생성합니다.
1.1 - 구조화된 출력(Structured Output)으로 Pegasus 1.5 실행
/api/analyze 엔드포인트는 다음 세 가지 작업을 처리합니다.
프론트엔드로부터 프롬프트 수신 (
/videos또는/ads페이지에서 제공)중복 처리를 방지하기 위해 Vercel Blob 캐시 확인
구조화된 출력 형식을 적용해 Pegasus 1.5를 호출하고 결과 저장
const tl_client = new TwelveLabs({ apiKey: process.env.TL_API_KEY }); const result = await tl_client.analyze({ videoId, prompt, temperature: 0.2, response_format }, { timeoutInSeconds: 90 });
결과물은 후속 시스템에서 판단의 근거로 사용할 수 있는 시간 순 정렬 메타데이터(장면 경계, 감정, 환경, 출연진, 안전 플래그 등)입니다. 이는 기존의 취약한 키워드 기반 타겟팅을 확실한 비디오 분석 기반 모델로 대체합니다.
1.2 - 임베딩 KNN ID 매칭을 통한 IAB 3.1 표준화
광고 서버와 원활히 연동하려면 Pegasus의 분석 결과가 IAB Content Taxonomy 3.1과 매핑되어야 합니다. 파이프라인은 텍스트 임베딩과 표준 IAB ID에 대한 k-최근접 이웃(KNN) 매칭을 사용합니다.

이 방식은 검증된 IAB 3.1 행들의 폐쇄형 참조 테이블을 유지합니다.
export const IAB_ALLOWED_ROWS = [ { tier1: "Alcohol", tier2: "Spirits", code: "1005" }, { tier1: "Alcohol", tier2: "Beer", code: "1003" }, { tier1: "Consumer Packaged Goods", tier2: "General Food", tier3: "Snacks", code: "1169" }, { tier1: "Finance and Insurance", tier2: "Stocks and Investments", code: "1338" }, { tier1: "Vehicles", tier2: "Automotive Ownership", tier3: "New Vehicle Ownership", code: "1536" }, // ... ] as const;
각 행은 인덱스 생성 시점에 한 번 임베딩됩니다. 런타임에 모델로부터 추출된 후보 레이블이 임베딩되어 KNN을 통해 가장 가까운 표준 IAB 행들과 매칭된 다음, 유사도 임계치에 맞게 필터링되고 중복이 제거됩니다.
export function normalizeIabWithKnnPolicy( rawInput: unknown, categoryKey?: string ): IabPolicyResult { const rawItems = Array.isArray(rawInput) ? rawInput : []; // 1) 모델 출력에서 후보 텍스트 임베딩 추출 const embeddedCandidates = embedCandidateLabels(rawItems); // 2) 표준 IAB 3.1 임베딩 인덱스에 대해 KNN 검색 실행 const knnMatches = queryIabKnnIndex(embeddedCandidates, { k: 5 }); // 3) 유사도 임계치를 넘는 정책 호환 매치만 유지 const normalizedItems = dedupeAndSort( applyIabMatchPolicy(knnMatches).filter( (item): item is IabTaxonomyItem => Boolean(item) ) ); const high = normalizedItems.filter((item) => item.confidence >= IAB_HIGH_CONFIDENCE); const medium = normalizedItems.filter((item) => item.confidence >= IAB_MEDIUM_CONFIDENCE); let effectiveItems: IabTaxonomyItem[] = []; let fallbackApplied = false; let fallbackReason: string | null = null; if (high.length > 0) { effectiveItems = high; } else if (medium.length > 0) { effectiveItems = medium; fallbackReason = "신뢰도가 높은 Tier-2/3 매칭 항목이 없습니다. 중간 신뢰도의 Tier-1 대역을 사용합니다."; } else { const fallback = (categoryKey && FALLBACK_BY_CATEGORY_KEY[categoryKey]) || []; effectiveItems = fallback; fallbackApplied = true; fallbackReason = fallback.length ? "중간 신뢰도의 KNN 검색 결과가 없습니다. 결정론적 카테고리별 대체 장치(Fallback)를 적용했습니다." : "중간 신뢰도의 KNN 검색 결과 및 카테고리 대체 장치 매핑을 찾지 못했습니다."; } const effectiveTier1 = [...new Set(effectiveItems.map((item) => item.tier1))]; const effectiveTier2 = high.length > 0 ? [...new Set(effectiveItems.map((item) => item.tier2))] : []; const effectiveTier3 = high.length > 0 ? [...new Set(effectiveItems.map((item) => item.tier3).filter((tier3): tier3 is string => Boolean(tier3)))] : []; const effectiveIabIds = high.length > 0 ? [...new Set(effectiveItems.map((item) => item.iabId).filter(Boolean))] : []; const averageConfidence = normalizedItems.length > 0 ? normalizedItems.reduce((sum, item) => sum + item.confidence, 0) / normalizedItems.length : 0; return { normalizedItems, effectiveTier1, effectiveTier2, effectiveTier3, effectiveIabIds, averageConfidence, fallbackApplied, fallbackReason, }; }
이 파이프라인은 다음과 같이 작동합니다.
모델이 생성한 카테고리 구문을 임베딩합니다.
표준 IAB 3.1 행 임베딩에 대해 KNN 유사도 검색을 실행합니다.
검색된 대상을 유효한 IAB 분류 체계 행/ID로 제한하여 매칭시킵니다.
중복을 제거하고 신뢰도에 따라 매칭 순위 목록을 정렬합니다.
효과적인 타겟팅 필드로써 높은 신뢰도를 갖는 데이터를 우선 노출시킵니다.
신뢰도가 너무 낮은 경우 결정론적으로 구성된 대체 장치(Fallback) 정책을 적용합니다.
이는 실제 서비스 환경에서 매우 중요합니다. 분류 명칭을 AI가 임의로 지어내는 환각(Hallucination) 현상을 차단하고, 엄격하고 유효한 IAB 3.1 ID를 보장하면서도, 동시에 임베딩 기반 검색의 강점인 언어적 뉘앙스를 고스란히 살려냅니다.
1.3 - 정형화된 메타데이터로부터 FreeWheel KVP 페이로드 생성

IAB 및 컨텍스트 신호 분석이 완료되면, 엔진은 타겟 광고 송출을 연동하기 위해 FreeWheel 전용 키-값 쌍(KVP)을 생성합니다.
const freewheelPayload = { ad_server: "Freewheel", endpoint: "https://ads.freewheel.tv/ad/p/1", generated_kvps: { vw_brand: toBrand(parsed.company), vw_ctx_inc: includeContexts.join(","), vw_ctx_exc: excludeContexts.join(","), vw_garm_floor: "strict", vw_duration: String(duration), vw_ad_title: parsed.proposedTitle || "untitled", vw_iab_t1: policy.effectiveTier1.join(","), vw_iab_t2: policy.effectiveTier2.join(","), vw_iab_t3: policy.effectiveTier3.join(","), vw_iab_codes: policy.effectiveCodes.join(","), vw_iab_conf: policy.averageConfidence.toFixed(3), }, };
핵심 필드는 다음과 같습니다.
vw_ctx_inc는 타겟팅 대상 시나리오와 Pegasus 권장 컨텍스트를 결합합니다.vw_ctx_exc는 캠페인 제외 조건, Pegasus 제외어, GARM 플래그를 결합합니다.vw_iab_*필드는 엄격히 정형화 및 유효성이 확인된 클래스로만 구성됩니다.
이 단계는 AI 기반의 분석 결과를 기존의 광고 운영(Ad Ops) 워크플로우에 결합하는 다리 역할을 합니다. TwelveLabs는 맥락 분석 인텔리전스를 제공하고, 이를 사후 정책 표준화로 거름으로써 안전하고 투명한 동작을 보장하며, 최종적으로 FreeWheel/OpenRTB 매핑을 통해 실제 상용화 적용이 가능하게 만듭니다.
2단계: Marengo를 활용한 멀티모달 임베딩 구축
콘텐츠 장면과 광고 영상 모두 Marengo 3.0을 이용해 동일한 512차원 임베딩 공간에 매핑됩니다. 이를 통해 단순 텍스트 키워드 중첩을 뛰어넘어, 비디오와 광고 크리에이티브 사이의 실질적인 시맨틱 일치(Semantic Matching)를 가능하게 해줍니다.
export function cosineSimilarity(vecA: number[], vecB: number[]): number { let dot = 0, normA = 0, normB = 0; const len = Math.min(vecA.length, vecB.length); for (let i = 0; i < len; i++) { dot += vecA[i] * vecB[i]; normA += vecA[i] * vecA[i]; normB += vecB[i] * vecB[i]; } if (normA === 0 || normB === 0) return 0; return dot / (Math.sqrt(normA) * Math.sqrt(normB)); }

이 임베딩 벡터의 분포 상태는 현재 데모 애플리케이션의 'Metadata View'에서 실제 지도로 시각화되어 제공되며, 의미론적으로 유사한 장면들이 가깝게 군집화(Clustering)되는 원리를 확인할 수 있습니다.
광고 후보 간의 순위 가용 폭을 넓히기 위해, 엔진은 예상된 코사인 값을 표준화하고 비선형 부스팅 기법(Power Transform)을 거치게 설계되었습니다. 이 보정 과정을 통해 0.7과 0.8 사이의 미세한 점수 차이를 유의미하게 벌려주며, 상위 추천 목록을 더욱 명확하게 구분할 수 있도록 돕습니다.
3단계: 최적의 광고 삽입 지점 분석
최적의 광고를 매칭하기 전에, 엔진은 비디오 콘텐츠 내에서 광고를 삽입하기 가장 편안하고 타격을 주지 않는 최적의 기점(Monetization Break Point)을 찾습니다. Pegasus 1.5는 영상의 전반적인 맥락을 흐름에 따라 쪼개 분석하여 다음 요소를 판별합니다.
세그먼트 이후 전환 안정 점수
시청 몰입 차단 우려 제로율
긴장 및 감정 이완 구간 검측
자연스러운 페이드 등 전환 유형에 대한 가선값
현재 운용 모드별 비즈니스 가치 승수 (Strict, Balanced, Revenue_max)

이후 설정된 최소 광고 송출 주기 조건을 대입하여, 탐욕적(Greedy) 시간순 배치 연산을 진행해 최종 광고 타임라인을 확정합니다.
이는 대단히 고차원적인 작업입니다. 아무리 의미 매칭률이 높은 최적의 광고라 하더라도, 배우가 대사를 읊는 중간이나 긴장감이 절정인 극적 클라이맥스에 불쑥 광고가 송입된다면 오히려 이탈을 자초하기 때문입니다.
4단계: 안전 장벽 및 다양성 제약 기반 광고 필터링 및 랭킹
최적의 광고 시간 식별, 임베딩 수립, 상세 속성 정리가 마침내 끝나면 추천 목록 생성에 힘을 싣습니다. 그러나 단순 수치 정렬로는 실서비스 광고를 지탱할 수 없습니다. 완벽한 비즈니스를 마크하기 위해 다음과 같은 두 개의 검증 필터 관문이 들어갑니다.
1. 브랜드 신용 보호를 위한 하드 게이팅
정식 점수 등재에 들어가기 전에 일차적으로 광고는 다음 제한 정책을 통과해야 합니다.
유저 자격 및 전달 타겟 카테고리 자격 체크
부정적인 중첩 맥락 감지 및 차단
GARM 명시 규제 범주 제외 (음주, 사행성 행위, 과격 묘사)
세부 안전 모드별 기준 검수
2. 다중 광고 구간 간 카테고리 입체화 (제한적 다양성 구현)
비공개 설정과 브랜드 보전이 최선이어도, 차 애호가라고 해서 방송 내내 매 광고마다 스포츠카 광고만 계속 나오기를 바라지는 않습니다. 엔진은 다음을 준수합니다.
동일한 광고의 연속 반복 노출 제한 한도 설정
업종 카테고리별 중첩 노출 상한선 지정
최적 조건 후보가 제약에 걸려 배제될 경우를 위한 차순위(Fallback) 선택 로직 탑재

그 결과, **높은 유사도 점수**를 받으면서도 기존 **레거시 방송 시스템처럼 자연스럽고 완성도 있는** 맞춤형 광고 편성이 완성됩니다.
5단계: 전사 성능 공유를 위한 Databricks 연동
이 서비스 아키텍처는 산출 정보(상세 메타데이터, 고유 임베딩, 결정 이력 정보 등)를 지속적으로 기업 핵심 자산 플랫폼으로 환원할 때 가장 강력한 시너지를 가집니다. 엔진은 원활한 대시보드 표현 및 ML 가공을 위해 이 모든 정합 데이터들을 Databricks Delta 테이블에 깔끔히 적재해 줍니다.
각 사의 사용 주체인 Databricks 업무 테이블 환경명에 맞게 즉석에서 생성된 쿼리를 사용하실 수 있습니다.
CREATE OR REPLACE VIEW ad_metadata_premium_spirits_vec AS SELECT creative_id, campaign_name, from_json(marengo_embedding_json, 'array<double>') AS embedding FROM main.default.ad_metadata_premium_spirits WHERE vector_sync_status = 'embedded_marengo_clip_avg'
데이터를 Databricks에 연결하여 적재하면 다음과 같은 이점이 발생합니다.
대용량 시맨틱 매칭 검색을 지원하는 Mosaic AI Vector Search Indexing 자원 결성
광고 매칭 결정을 낱낱이 소명할 수 있는 완벽한 투명성의 품질 검증 감사 체계(QA Audit Loop) 확보
새로운 광고 소재 제작 및 경쟁사 정보 파악을 위한 멀티모달 유사 영상 수집 및 검색 기능
전통 비즈니스 인텔리전스(BI) 환경과 어우러지는 AI 지원 매칭 성과 예측 연동
전사적 도입을 검토하는 기획/기술 팀에게 이 부분은 TwelveLabs와 Databricks의 조합이 선사하는 가장 가치 있는 이정표입니다. **비디오 분석 모델의 강점인 인공지능 성능과 뛰어난 안정성의 기업용 데이터 거버넌스 인프라가 매끄럽게 만나는 접점**이기 때문입니다.
컨텍스트 광고 시장에서 TwelveLabs가 필요한 이유
우리가 이번 글에서 설계하고 구성해 본 문맥 광고 매칭 모듈은 과거의 무의미한 단순 정적 분류 수준을 넘어갑니다. 흐릿한 정적 메타데이터 정보망에서 탈피해, 실시간 라이브 영상의 맥락에 온전히 동참하는 광고 매치 생태계를 형성해 드립니다.
TwelveLabs는 최첨단 AI 기초 역량을 토대로 제품의 밑거름을 닦아 드립니다.
자연어 기반으로 장면의 질감까지 분석해 안전 규격까지 포착하는 정형 인텔리전스 Pegasus 1.5
문맥 탐색과 미세 뉘앙스를 담은 시각 기반 복합 벡터 공간 매칭을 실현하는 SDK Marengo 3.0
기존 레거시 광고 기술 체계와 위화감 없이 곧바로 데이터 교환이 편리한 완전한 API 주도형 설계 방식
TwelveLabs는 파악조차 힘들던 무거운 동영상 스토리지 데이터를 풍부한 비즈니스 쿼리와 수익 흐름을 창출하는 핵심 디지털 자산으로 재탄생시킵니다.
지금 시작하세요
Playground: TwelveLabs 시작하기 (Home)
API Reference: 개발 가이드 및 소개 (Introduction | TwelveLabs)
Product Overview: TwelveLabs 비디오 AI 플랫폼: 검색, 분석, 임베딩
Sales | Enterprise: 엔터프라이즈 도입 상담 문의
Architecture Diagram: https://lucid.app/lucidchart/ef8d11e1-3f00-4bf0-b411-ab8e3bb3606b/edit?viewport_loc=515%2C-1146%2C5419%2C2654%2C0_0&invitationId=inv_09de1972-142b-4369-9df4-f91eb3f5a949
Source Code: nathanchess/twelvelabs-context-ad-engine: TwelveLabs 멀티모달 및 Databricks가 연계된 문맥 맞춤형 광고 매칭 엔진 GitHub 소스 코드
Deployed Application: 실제 운영 애플리케이션 체험 — TwelveLabs
요약 (TLDR)
대부분의 CTV/FAST 플랫폼은 화면에서 실제로 무슨 일이 일어나고 있는지 확인하지 않은 채 광고 송출 결정을 내립니다. 이 튜토리얼에서는 정형화된 장면 인텔리전스를 위해 TwelveLabs Pegasus 1.5를, 멀티모달 임베딩을 위해 Marengo 3.0을, 엔터프라이즈 분석을 위해 Databricks Delta Lake를 사용하는 프로덕션 등급의 문맥 맞춤형(Contextual) 광고 엔진 구축 과정을 안내합니다. 이를 통해 오래된 메타데이터가 아닌 실제 비디오 이해를 기반으로 광고가 배치되며, IAB 3.1 분류 체계를 완벽히 준수하고 FreeWheel과 호환되는 페이로드를 생성할 수 있습니다.
구축할 결과물: 비디오 콘텐츠를 쿼리 가능한 컨텍스트로 변환하고, 의미론적 유사성 및 브랜드 안전성 규칙을 기반으로 광고와 장면을 매칭하며, 최적의 광고 삽입 시점(Break Point)을 식별하고, 다운스트림 분석을 위해 의사결정 데이터를 Databricks로 내보내는 파이프라인 전체를 구축합니다.
소개
대부분의 광고 의사결정 스택은 비디오를 불투명한 덩어리(Blob)로 취급합니다. 이들은 메타데이터, 콘텐츠 라벨 또는 과거 시청자 세그먼트에 의존해 광고 배치 결정을 내립니다. 비디오 자체만을 제외한 모든 것에 의존하는 셈입니다.
이러한 방식은 대략적인 타겟팅에는 잘 작동합니다. 키워드 매칭을 통해 원하는 범주에 근접할 수는 있습니다. 하지만 다음 세 가지 시나리오를 고려하지 못하기 때문에 상당한 수익 기회를 놓치게 됩니다.
타이밍: 장면 전환을 고려하지 않고 배치된 광고는 시청 흐름을 끊어 이탈을 유발합니다.
컨텍스트 (문맥): 시스템이 화면에서 실제로 무슨 일이 일어나고 있는지 파악하지 못할 때 브랜드 안전성 오류가 발생합니다. 예를 들어, 알코올 광고가 중독 치료 과정을 묘사하는 장면 중에 노출되어서는 안 됩니다.
깊이: 표면적인 인구통계학적 타겟팅은 가구 소득, 시청 기기, 실시간 참여 신호와 같은 미묘한 차이를 포착하지 못합니다.
이 튜토리얼은 비디오를 블랙박스가 아닌 쿼리 가능한 정형 데이터로 취급하는 문맥 맞춤형 광고 엔진을 구축하여 이 세 가지 문제를 모두 해결합니다. 이 엔진은 다음과 같은 기술을 결합합니다.
감정, 톤, 출연진, 주변 환경 및 GARM 정렬 안전 신호 등 상세한 장면 이해를 위한 TwelveLabs Pegasus 1.5
장면과 광고 크리에이티브 간의 유사도 측정을 지원하는 멀티모달 의미론적 임베딩을 위한 TwelveLabs Marengo 3.0
엔터프라이즈급 스토리지 및 검색을 위한 Databricks Delta Lake + Mosaic AI Vector Search
기존 광고 서버와 직접 연동하기 위한 FreeWheel/OpenRTB 호환 페이로드 생성

그림 1: 비디오 인벤토리 내 인텔리전트 장면 추출
목표는 실제 비디오 콘텐츠에 기반한 데이터를 바탕으로 "브랜드 안전성과 캠페인 제약 조건을 준수하면서, 이 특정 장면에서, 이 시청자층을 대상으로, 이 광고 시간에 어떤 광고를 송출해야 하는가?"라는 질문에 답하는 것입니다.
완성된 애플리케이션의 데모 영상은 다음과 같습니다.

사전 준비 사항
시작하기 전에 다음 항목이 필요합니다.
Node.js 18+ 및 npm/yarn/pnpm
두 개의 인덱스가 포함된 TwelveLabs API 키:
콘텐츠 비디오용
TL_INDEX_ID광고 크리에이티브용
TL_AD_INDEX_ID
TwelveLabs로 대용량 비디오 파일을 전송하기 위한 Vercel Blob 토큰 (
BLOB_READ_WRITE_TOKEN)IAB 3.1 분류 체계 매핑 중 저지연 텍스트 임베딩을 위한 OpenAI API 키 (선택 사항)
DATABRICKS_TOKEN,DATABRICKS_HOST,DATABRICKS_HTTP_PATH및 선택적으로DATABRICKS_CATALOG와DATABRICKS_SCHEMA가 설정된 Databricks 작업 공간 (선택 사항)
프로젝트를 클론하고 실행하세요:
>> git clone https://github.com/nathanchess/twelvelabs-context-ad-engine.git >> cd contextual-ad-engine >> npm install >> cp .env.example .env.local >> npm
아키텍처 개요

그림 2: 문맥 맞춤형 광고 엔진 백엔드 아키텍처 (LucidChart)
이 아키텍처는 상호 보완적인 역할을 하는 두 가지 TwelveLabs 모델을 활용합니다.
Marengo 3.0은 인코더 역할을 합니다. 비디오를 검색 가능한 512차원 벡터 임베딩으로 변환하여 제품, 기분, 환경 및 특정 시점을 쿼리할 수 있도록 만듭니다. 이를 통해 광고 크리에이티브와 콘텐츠 장면 간의 의미론적 매칭이 가능해집니다.
Pegasus 1.5는 추론 모델입니다. 각 장면에 대한 정형 메타데이터(타겟 고객층, 브랜드 안전성 플래그, 감정 상태, 타겟팅 제안 등)를 생성합니다. 구조화된 출력(Structured Outputs)을 지원하므로 다운스트림 시스템이 일관되게 파싱할 수 있는 JSON을 생성합니다.
두 모델의 고유한 흐름과 생성된 메타데이터를 결합해, 기술 아키텍처 다이어그램 오른쪽에 표시된 **단일 결정론적 계산**(사용자-광고 매치 점수 x 장면-광고 매치 점수)을 수행합니다. 이를 통해 사전에 수동 작성된 텍스트 메타데이터 대신 **실제 비디오 이해에 기반한 장면 단위의 의사결정**을 통해 광고를 추천할 수 있습니다.
이 방식을 통해 광고 엔진은 각 비디오 세그먼트를 다음과 같은 실시간 컨텍스트 신호로 처리할 수 있습니다.
톤 (Tone)
감정 (Sentiment)
주변 환경 (Environment)
브랜드 안전성 (Brand Safety)
이 접근 방식은 몇 주 전에 라벨링된 오래된 메타데이터가 아니라 실제로 비디오 내에서 일어나고 있는 상황을 기반으로 광고 결정을 내립니다. 기본 기술에 대한 더 자세한 배경은 TwelveLabs 플랫폼 개요 및 TwelveLabs Research에서 발간한 자료를 참조하세요.
핵심 광고 결정 및 배치 로직
핵심 의사결정 로직은 두 신호를 단일 점수로 결합합니다.
totalScore = adAffinity * sceneFit
여기서 adAffinity는 광고가 시청자 프로필(인구통계, 관심사, 정책 제약 조건 등)에 얼마나 잘 맞는지 측정하고, sceneFit은 광고 크리에이티브가 현재 장면에 얼마나 적합한지(의미론적 유사도 + 안전성 + 톤 + 환경)를 측정합니다.
광고 추천 파이프라인은 네 개의 가중 신호를 결합하여 sceneFit을 계산합니다.
sceneFit = suitableMatch * 0.15 + // Pegasus 적합 카테고리(suitable_categories) 중첩 점수 environmentFit * 0.15 + // 환경-카테고리 연관성 점수 toneCompat * 0.10 + // 감정 및 톤 호환성 점수 contextMatch * 0.60 // Marengo 의미론적 코사인 유사도 점수
가중치 설정에는 뚜렷한 의도가 있습니다. CTV/OTT 비즈니스에서 가상 높은 CPM 상승률은 대개 의미론적 맥락의 품질(Semantic Context Quality)에서 발생하므로, Marengo 3.0이 점수의 가장 큰 부분을 주도합니다. 나머지 신호는 정책 및 콘텐츠 안전 팀에 완벽한 제어 기능을 제공하기 위한 든든한 가이드라인 역할을 해줍니다.
1단계: 구조화된 광고 메타데이터 생성 (Pegasus + IAB + FreeWheel)
이 단계에서는 Pegasus 1.5를 사용하여 비디오 콘텐츠로부터 구조화된 장면 분석 결과를 추출하고, 이를 IAB 3.1 분류 체계로 표준화한 후, 광고 서버 연동을 위해 FreeWheel 호환 키-값 쌍을 생성합니다.
1.1 - 구조화된 출력(Structured Output)으로 Pegasus 1.5 실행
/api/analyze 엔드포인트는 다음 세 가지 작업을 처리합니다.
프론트엔드로부터 프롬프트 수신 (
/videos또는/ads페이지에서 제공)중복 처리를 방지하기 위해 Vercel Blob 캐시 확인
구조화된 출력 형식을 적용해 Pegasus 1.5를 호출하고 결과 저장
const tl_client = new TwelveLabs({ apiKey: process.env.TL_API_KEY }); const result = await tl_client.analyze({ videoId, prompt, temperature: 0.2, response_format }, { timeoutInSeconds: 90 });
결과물은 후속 시스템에서 판단의 근거로 사용할 수 있는 시간 순 정렬 메타데이터(장면 경계, 감정, 환경, 출연진, 안전 플래그 등)입니다. 이는 기존의 취약한 키워드 기반 타겟팅을 확실한 비디오 분석 기반 모델로 대체합니다.
1.2 - 임베딩 KNN ID 매칭을 통한 IAB 3.1 표준화
광고 서버와 원활히 연동하려면 Pegasus의 분석 결과가 IAB Content Taxonomy 3.1과 매핑되어야 합니다. 파이프라인은 텍스트 임베딩과 표준 IAB ID에 대한 k-최근접 이웃(KNN) 매칭을 사용합니다.

이 방식은 검증된 IAB 3.1 행들의 폐쇄형 참조 테이블을 유지합니다.
export const IAB_ALLOWED_ROWS = [ { tier1: "Alcohol", tier2: "Spirits", code: "1005" }, { tier1: "Alcohol", tier2: "Beer", code: "1003" }, { tier1: "Consumer Packaged Goods", tier2: "General Food", tier3: "Snacks", code: "1169" }, { tier1: "Finance and Insurance", tier2: "Stocks and Investments", code: "1338" }, { tier1: "Vehicles", tier2: "Automotive Ownership", tier3: "New Vehicle Ownership", code: "1536" }, // ... ] as const;
각 행은 인덱스 생성 시점에 한 번 임베딩됩니다. 런타임에 모델로부터 추출된 후보 레이블이 임베딩되어 KNN을 통해 가장 가까운 표준 IAB 행들과 매칭된 다음, 유사도 임계치에 맞게 필터링되고 중복이 제거됩니다.
export function normalizeIabWithKnnPolicy( rawInput: unknown, categoryKey?: string ): IabPolicyResult { const rawItems = Array.isArray(rawInput) ? rawInput : []; // 1) 모델 출력에서 후보 텍스트 임베딩 추출 const embeddedCandidates = embedCandidateLabels(rawItems); // 2) 표준 IAB 3.1 임베딩 인덱스에 대해 KNN 검색 실행 const knnMatches = queryIabKnnIndex(embeddedCandidates, { k: 5 }); // 3) 유사도 임계치를 넘는 정책 호환 매치만 유지 const normalizedItems = dedupeAndSort( applyIabMatchPolicy(knnMatches).filter( (item): item is IabTaxonomyItem => Boolean(item) ) ); const high = normalizedItems.filter((item) => item.confidence >= IAB_HIGH_CONFIDENCE); const medium = normalizedItems.filter((item) => item.confidence >= IAB_MEDIUM_CONFIDENCE); let effectiveItems: IabTaxonomyItem[] = []; let fallbackApplied = false; let fallbackReason: string | null = null; if (high.length > 0) { effectiveItems = high; } else if (medium.length > 0) { effectiveItems = medium; fallbackReason = "신뢰도가 높은 Tier-2/3 매칭 항목이 없습니다. 중간 신뢰도의 Tier-1 대역을 사용합니다."; } else { const fallback = (categoryKey && FALLBACK_BY_CATEGORY_KEY[categoryKey]) || []; effectiveItems = fallback; fallbackApplied = true; fallbackReason = fallback.length ? "중간 신뢰도의 KNN 검색 결과가 없습니다. 결정론적 카테고리별 대체 장치(Fallback)를 적용했습니다." : "중간 신뢰도의 KNN 검색 결과 및 카테고리 대체 장치 매핑을 찾지 못했습니다."; } const effectiveTier1 = [...new Set(effectiveItems.map((item) => item.tier1))]; const effectiveTier2 = high.length > 0 ? [...new Set(effectiveItems.map((item) => item.tier2))] : []; const effectiveTier3 = high.length > 0 ? [...new Set(effectiveItems.map((item) => item.tier3).filter((tier3): tier3 is string => Boolean(tier3)))] : []; const effectiveIabIds = high.length > 0 ? [...new Set(effectiveItems.map((item) => item.iabId).filter(Boolean))] : []; const averageConfidence = normalizedItems.length > 0 ? normalizedItems.reduce((sum, item) => sum + item.confidence, 0) / normalizedItems.length : 0; return { normalizedItems, effectiveTier1, effectiveTier2, effectiveTier3, effectiveIabIds, averageConfidence, fallbackApplied, fallbackReason, }; }
이 파이프라인은 다음과 같이 작동합니다.
모델이 생성한 카테고리 구문을 임베딩합니다.
표준 IAB 3.1 행 임베딩에 대해 KNN 유사도 검색을 실행합니다.
검색된 대상을 유효한 IAB 분류 체계 행/ID로 제한하여 매칭시킵니다.
중복을 제거하고 신뢰도에 따라 매칭 순위 목록을 정렬합니다.
효과적인 타겟팅 필드로써 높은 신뢰도를 갖는 데이터를 우선 노출시킵니다.
신뢰도가 너무 낮은 경우 결정론적으로 구성된 대체 장치(Fallback) 정책을 적용합니다.
이는 실제 서비스 환경에서 매우 중요합니다. 분류 명칭을 AI가 임의로 지어내는 환각(Hallucination) 현상을 차단하고, 엄격하고 유효한 IAB 3.1 ID를 보장하면서도, 동시에 임베딩 기반 검색의 강점인 언어적 뉘앙스를 고스란히 살려냅니다.
1.3 - 정형화된 메타데이터로부터 FreeWheel KVP 페이로드 생성

IAB 및 컨텍스트 신호 분석이 완료되면, 엔진은 타겟 광고 송출을 연동하기 위해 FreeWheel 전용 키-값 쌍(KVP)을 생성합니다.
const freewheelPayload = { ad_server: "Freewheel", endpoint: "https://ads.freewheel.tv/ad/p/1", generated_kvps: { vw_brand: toBrand(parsed.company), vw_ctx_inc: includeContexts.join(","), vw_ctx_exc: excludeContexts.join(","), vw_garm_floor: "strict", vw_duration: String(duration), vw_ad_title: parsed.proposedTitle || "untitled", vw_iab_t1: policy.effectiveTier1.join(","), vw_iab_t2: policy.effectiveTier2.join(","), vw_iab_t3: policy.effectiveTier3.join(","), vw_iab_codes: policy.effectiveCodes.join(","), vw_iab_conf: policy.averageConfidence.toFixed(3), }, };
핵심 필드는 다음과 같습니다.
vw_ctx_inc는 타겟팅 대상 시나리오와 Pegasus 권장 컨텍스트를 결합합니다.vw_ctx_exc는 캠페인 제외 조건, Pegasus 제외어, GARM 플래그를 결합합니다.vw_iab_*필드는 엄격히 정형화 및 유효성이 확인된 클래스로만 구성됩니다.
이 단계는 AI 기반의 분석 결과를 기존의 광고 운영(Ad Ops) 워크플로우에 결합하는 다리 역할을 합니다. TwelveLabs는 맥락 분석 인텔리전스를 제공하고, 이를 사후 정책 표준화로 거름으로써 안전하고 투명한 동작을 보장하며, 최종적으로 FreeWheel/OpenRTB 매핑을 통해 실제 상용화 적용이 가능하게 만듭니다.
2단계: Marengo를 활용한 멀티모달 임베딩 구축
콘텐츠 장면과 광고 영상 모두 Marengo 3.0을 이용해 동일한 512차원 임베딩 공간에 매핑됩니다. 이를 통해 단순 텍스트 키워드 중첩을 뛰어넘어, 비디오와 광고 크리에이티브 사이의 실질적인 시맨틱 일치(Semantic Matching)를 가능하게 해줍니다.
export function cosineSimilarity(vecA: number[], vecB: number[]): number { let dot = 0, normA = 0, normB = 0; const len = Math.min(vecA.length, vecB.length); for (let i = 0; i < len; i++) { dot += vecA[i] * vecB[i]; normA += vecA[i] * vecA[i]; normB += vecB[i] * vecB[i]; } if (normA === 0 || normB === 0) return 0; return dot / (Math.sqrt(normA) * Math.sqrt(normB)); }

이 임베딩 벡터의 분포 상태는 현재 데모 애플리케이션의 'Metadata View'에서 실제 지도로 시각화되어 제공되며, 의미론적으로 유사한 장면들이 가깝게 군집화(Clustering)되는 원리를 확인할 수 있습니다.
광고 후보 간의 순위 가용 폭을 넓히기 위해, 엔진은 예상된 코사인 값을 표준화하고 비선형 부스팅 기법(Power Transform)을 거치게 설계되었습니다. 이 보정 과정을 통해 0.7과 0.8 사이의 미세한 점수 차이를 유의미하게 벌려주며, 상위 추천 목록을 더욱 명확하게 구분할 수 있도록 돕습니다.
3단계: 최적의 광고 삽입 지점 분석
최적의 광고를 매칭하기 전에, 엔진은 비디오 콘텐츠 내에서 광고를 삽입하기 가장 편안하고 타격을 주지 않는 최적의 기점(Monetization Break Point)을 찾습니다. Pegasus 1.5는 영상의 전반적인 맥락을 흐름에 따라 쪼개 분석하여 다음 요소를 판별합니다.
세그먼트 이후 전환 안정 점수
시청 몰입 차단 우려 제로율
긴장 및 감정 이완 구간 검측
자연스러운 페이드 등 전환 유형에 대한 가선값
현재 운용 모드별 비즈니스 가치 승수 (Strict, Balanced, Revenue_max)

이후 설정된 최소 광고 송출 주기 조건을 대입하여, 탐욕적(Greedy) 시간순 배치 연산을 진행해 최종 광고 타임라인을 확정합니다.
이는 대단히 고차원적인 작업입니다. 아무리 의미 매칭률이 높은 최적의 광고라 하더라도, 배우가 대사를 읊는 중간이나 긴장감이 절정인 극적 클라이맥스에 불쑥 광고가 송입된다면 오히려 이탈을 자초하기 때문입니다.
4단계: 안전 장벽 및 다양성 제약 기반 광고 필터링 및 랭킹
최적의 광고 시간 식별, 임베딩 수립, 상세 속성 정리가 마침내 끝나면 추천 목록 생성에 힘을 싣습니다. 그러나 단순 수치 정렬로는 실서비스 광고를 지탱할 수 없습니다. 완벽한 비즈니스를 마크하기 위해 다음과 같은 두 개의 검증 필터 관문이 들어갑니다.
1. 브랜드 신용 보호를 위한 하드 게이팅
정식 점수 등재에 들어가기 전에 일차적으로 광고는 다음 제한 정책을 통과해야 합니다.
유저 자격 및 전달 타겟 카테고리 자격 체크
부정적인 중첩 맥락 감지 및 차단
GARM 명시 규제 범주 제외 (음주, 사행성 행위, 과격 묘사)
세부 안전 모드별 기준 검수
2. 다중 광고 구간 간 카테고리 입체화 (제한적 다양성 구현)
비공개 설정과 브랜드 보전이 최선이어도, 차 애호가라고 해서 방송 내내 매 광고마다 스포츠카 광고만 계속 나오기를 바라지는 않습니다. 엔진은 다음을 준수합니다.
동일한 광고의 연속 반복 노출 제한 한도 설정
업종 카테고리별 중첩 노출 상한선 지정
최적 조건 후보가 제약에 걸려 배제될 경우를 위한 차순위(Fallback) 선택 로직 탑재

그 결과, **높은 유사도 점수**를 받으면서도 기존 **레거시 방송 시스템처럼 자연스럽고 완성도 있는** 맞춤형 광고 편성이 완성됩니다.
5단계: 전사 성능 공유를 위한 Databricks 연동
이 서비스 아키텍처는 산출 정보(상세 메타데이터, 고유 임베딩, 결정 이력 정보 등)를 지속적으로 기업 핵심 자산 플랫폼으로 환원할 때 가장 강력한 시너지를 가집니다. 엔진은 원활한 대시보드 표현 및 ML 가공을 위해 이 모든 정합 데이터들을 Databricks Delta 테이블에 깔끔히 적재해 줍니다.
각 사의 사용 주체인 Databricks 업무 테이블 환경명에 맞게 즉석에서 생성된 쿼리를 사용하실 수 있습니다.
CREATE OR REPLACE VIEW ad_metadata_premium_spirits_vec AS SELECT creative_id, campaign_name, from_json(marengo_embedding_json, 'array<double>') AS embedding FROM main.default.ad_metadata_premium_spirits WHERE vector_sync_status = 'embedded_marengo_clip_avg'
데이터를 Databricks에 연결하여 적재하면 다음과 같은 이점이 발생합니다.
대용량 시맨틱 매칭 검색을 지원하는 Mosaic AI Vector Search Indexing 자원 결성
광고 매칭 결정을 낱낱이 소명할 수 있는 완벽한 투명성의 품질 검증 감사 체계(QA Audit Loop) 확보
새로운 광고 소재 제작 및 경쟁사 정보 파악을 위한 멀티모달 유사 영상 수집 및 검색 기능
전통 비즈니스 인텔리전스(BI) 환경과 어우러지는 AI 지원 매칭 성과 예측 연동
전사적 도입을 검토하는 기획/기술 팀에게 이 부분은 TwelveLabs와 Databricks의 조합이 선사하는 가장 가치 있는 이정표입니다. **비디오 분석 모델의 강점인 인공지능 성능과 뛰어난 안정성의 기업용 데이터 거버넌스 인프라가 매끄럽게 만나는 접점**이기 때문입니다.
컨텍스트 광고 시장에서 TwelveLabs가 필요한 이유
우리가 이번 글에서 설계하고 구성해 본 문맥 광고 매칭 모듈은 과거의 무의미한 단순 정적 분류 수준을 넘어갑니다. 흐릿한 정적 메타데이터 정보망에서 탈피해, 실시간 라이브 영상의 맥락에 온전히 동참하는 광고 매치 생태계를 형성해 드립니다.
TwelveLabs는 최첨단 AI 기초 역량을 토대로 제품의 밑거름을 닦아 드립니다.
자연어 기반으로 장면의 질감까지 분석해 안전 규격까지 포착하는 정형 인텔리전스 Pegasus 1.5
문맥 탐색과 미세 뉘앙스를 담은 시각 기반 복합 벡터 공간 매칭을 실현하는 SDK Marengo 3.0
기존 레거시 광고 기술 체계와 위화감 없이 곧바로 데이터 교환이 편리한 완전한 API 주도형 설계 방식
TwelveLabs는 파악조차 힘들던 무거운 동영상 스토리지 데이터를 풍부한 비즈니스 쿼리와 수익 흐름을 창출하는 핵심 디지털 자산으로 재탄생시킵니다.
지금 시작하세요
Playground: TwelveLabs 시작하기 (Home)
API Reference: 개발 가이드 및 소개 (Introduction | TwelveLabs)
Product Overview: TwelveLabs 비디오 AI 플랫폼: 검색, 분석, 임베딩
Sales | Enterprise: 엔터프라이즈 도입 상담 문의
Architecture Diagram: https://lucid.app/lucidchart/ef8d11e1-3f00-4bf0-b411-ab8e3bb3606b/edit?viewport_loc=515%2C-1146%2C5419%2C2654%2C0_0&invitationId=inv_09de1972-142b-4369-9df4-f91eb3f5a949
Source Code: nathanchess/twelvelabs-context-ad-engine: TwelveLabs 멀티모달 및 Databricks가 연계된 문맥 맞춤형 광고 매칭 엔진 GitHub 소스 코드
Deployed Application: 실제 운영 애플리케이션 체험 — TwelveLabs




