[머신러닝 시스템 설계] 3 유튜브 동영상 검색

2026. 4. 25. 15:17·인공지능(AI)/머신러닝(ML)
본 게시글은 알렉스 쉬, 알리 아미니안(최종일 옮김)의 "가상면접 사례로 배우는 머신러닝 시스템 설계 기초"를 읽고 정리한 내용에, 개인적인 이해를 추가한 글입니다.

 

Overview

머신러닝 시스템 설계 문제에서는 단순히 모델을 만드는 것이 아니라, end-to-end 관점에서 문제를 어떻게 정의하고 풀어가는지가 중요합니다.

 

이번 글에서는 그 중 하나인 유튜브 동영상 검색 시스템을 예시로,
텍스트 쿼리를 기반으로 관련 동영상을 찾는 ML 시스템 설계 관점에서 정리해보겠습니다.

 

 

1️⃣ 요구사항 명확화


문제: 사용자 검색어에 따라, 관련 있는 유튜브 영상을 추천하시오.

쇼미더머니 + 랩신두 키워드로 검색하면 -> 쇼미 12에 출연한 라프산두의 하이라이트가 나온다

 

사용자의 텍스트 쿼리를 입력으로 받아, 관련있는 유튜브 동영상을 반환하는 검색 시스템을 만들어야 합니다.

즉, 아래와 같은 시스템을 설계하는 것이 목표입니다.

  • 입력: 텍스트 쿼리
  • 출력: 관련 동영상 리스트(ranking된 결과)

 

고려해야 할 포인트들

아래의 목표를 고려하여 사용자과 관심있어 할 유용한 동영상 검색 시스템을 설계하는 것이 최종 목표입니다.

비즈니스 목표 관련있는 동영상을 제공하여 조회수를 높이는 것
시스템 기능 텍스트 쿼리 기반으로 관련 동영상을 검색하는 것
데이터 모델 학습을 위한 천만 개의 <동영상, 텍스트 쿼리> 쌍으로 구성된 데이터 셋이 있음.
제약 조건 영어만 지원, 개인화 없음
시스템 규모 대규모 사용자
성능 요구사항 정확도 vs latency trade-off 고려

 

 

2️⃣ ML 문제로 구조화


비즈니스 문제를 ML 문제로 재정의해봅시다. 

ML 목표로 재정의: 텍스트 쿼리와 동영상 간의 관련도를 기반으로 ranking 하는 문제

 

시스템 입출력 정의:

이 경우, I/O는 다음 처럼 생각할 수 있습니다:

  • Input: 텍스트 쿼리 → Output: 관련도 순으로 정렬된 동영상 리스트

 

이 시스템은 단순 classification이 아니라, 관련도가 높은 동영상을 출력하는 Ranking 문제 (Information Retrieval) 입니다.

 

적합한 ML 접근 방식 선택:

동영상과 텍스트 쿼리간의 관련성을 결정하기 위해서는 시각적 콘텐츠와, 동영상 텍스트 데이터를 모두 활용해야 합니다. 즉, 텍스트/시각 검색이 모두 이루어져야 합니다.

개략적인 검색 시스템의 개요

 

1. 시각 검색 (Visual Search)

먼저, 텍스트 쿼리와 동영상의 시각적 콘텐츠 간 유사성에 따라 동영상의 순위를 매기는 시각 검색이 필요합니다.

 

일반적으로 표현 학습(Represantation Learning)을 사용하여 시각적 콘텐츠를 처리하며, 이를 동영상 검색하는데 사용합니다.

이 때, 텍스트와 동영상은 각각의 개별 인코더를 사용해 인코딩을 해야 하며, 둘 간의 유사도 점수는 개별 인코더를 통과해서 나온 값인 동영상, 텍스트 임베딩 값의 dot product를 사용하여 계산합니다. 이 값은 유사도 값이 되며, 이를 기준으로 동영상의 순위를 매깁니다.

 

2. 텍스트 검색 (Text-based Search)

다음으로, 텍스트 쿼리가 들어오면 텍스트 검색어와 가장 유사한 제목/설명/태그 등을 가진 동영상을 검색할 수 있도록 합니다. 이 때는 따로 모델을 사용하지 않고 아래와 같이 구축된 DB 테이블에서 검색하는 방식을 사용할 수 있습니다.

 

동영상 ID TITLE TAG
1 우리 집 강아지 실내에서 놀기 개, 실내, 놀이
2 중학교 수영 대회 수영장, 어린이
3 일본에 있을 때 촬영한 영상 보기 여행, 일본, 브이로그
4 스포츠카 속도 비교 자동차, 경주, 속도
5 내 원격 작업 설정 컴퓨터, 마우스, 대화
6 어젯밤 우리 집에서 개들이 파티를 즐긴 방법 고양이, 개, 가족

 

 

텍스트 기반 검색 구성요소를 생성하는 대표적인 기법으로 Elastic Search에 Inverted Index가 있습니다.

 

일반적으로 아는 인덱스(Forwad Index)는 "doc ID-내용"을 매핑하여, 특정 'term'이 있는 문서를 찾고 싶다면, 문서 전체를 linear search(O(n)) 하며 특정 'term'이 있는지 찾아야 합니다. 

 

반대로 역 인덱스(Inverted Index)는 "특정 단어-[doc ID List]"를 매핑하여, 특정 'term'이 있는 문서를 찾고 싶다면 term을 키값으로, 문서 ID를 바로 찾을 수 있기 때문에 (O(1)) 훨씬 빠른 속도로 원하는 결과값을 찾을 수 있습니다.

 

추가적인 내용은 다음 자료를 참고하시면 좋습니다: https://esbook.kimjmin.net/06-text-analysis/6.1-indexing-data

 

 

 

3️⃣ 데이터 준비


ML 모델 성능을 결정짓는 가장 중요한 단계 중 하나입니다.

데이터 준비 프로세스


데이터 준비 단계는 크게 (1) 데이터 엔지니어링, (2) 피처 엔지니어링으로 나눌 수 있습니다.

(1) 데이터 엔지니어링

데이터를 수집하고, 저장하고, 검색하고, 처리하는 전체 파이프라인을 설계하는 단계입니다.
이 문제에서는 이미 다음과 같은 데이터가 존재한다고 가정하기 때문에, 수집 및 정제 과정은 별도로 다루지 않겠습니다.
  • 동영상 데이터 (raw video)
  • 텍스트 쿼리
  • 동영상 메타데이터 (제목, 설명, 태그)
  • <동영상, 텍스트 쿼리> 매칭 데이터 (학습용)

 


(2) 피처 엔지니어링

모델 학습을 위해서는 text, video 같은 비정형 데이터를 수치 벡터 형태로 변환하는 과정이 필수적입니다.

1. Text 데이터 처리

 
텍스트 데이터 전처리를 위한 workflow는 다음과 같습니다. raw text에 해당하는 값은 소문자 변환, 불필요한 공백 제거, 어간 추출 등의 정규화 과정은 거치고, 토큰화를 진행한 후, lookup table, hashing trick 방법등을 통해 ID로 변환하는 과정을 거쳐 숫자 벡터 값을 얻을 수 있습니다.
  • text → [정규화 → 토큰화 → ID 변환] → 숫자 벡터
  • ex: text = "A person is walking in Montreal"
    • 정규화: "a person walk in montreal"
    • 토큰화: ["a", "person", "walk", "in", "montreal"]
    • ID 변환: [33, 28, 4, 16, 99]


2. Video 데이터 처리

동영상 전처리를 위한 workflow는 다음과 같습니다.
  • video → [프레임 디코딩 → 샘플 프레임 → 크기 조정 → 스케일리, 정규화와 색상 모드 보정 ] → 프레임 단위의 .npy
동영상 전처리 워크플로우

 

 

 

 

 

 4️⃣ 모델 개발


text, video 데이터를 모두 처리해야 되기 때문에, 개별 인코더를 사용해 각각을 임베딩(embedding)으로 변환하는 과정이 필요합니다. 즉, 텍스트와 동영상을 동일한 벡터 공간으로 매핑한 뒤, 두 벡터 간의 유사도를 계산하여 검색을 수행하는 구조를 사용합니다.


(1) 텍스트 인코더

텍스트 인코더는 입력된 쿼리를 벡터 형태로 변환하는 역할을 하며, 크게 통계적 방법과 머신러닝 기반 방법으로 나눌 수 있습니다.

 

통계적 방법

  • BoW(Bag of Words)는 문장 내 각 단어의 등장 빈도를 기반으로 벡터를 생성하는 방식으로, 구현이 간단하고 직관적이라는 장점이 있습니다. 하지만 단어의 순서를 고려하지 않기 때문에 문맥을 이해하지 못하고, 벡터가 희소(sparse)해지는 문제가 있습니다. 예를 들어, “watch TV after work”와 “work after watch TV”는 의미가 다르지만 동일한 BoW 표현을 갖게 됩니다. 자세한 내용은 다음 게시글에서 확인할 수 있습니다: https://codingsmu.tistory.com/98
 

[NLP] 단어 표현 방법 : Bag-of-Word Model(Bow)

Bag-of-Word(BoW) Model 기계학습 알고리즘(MLA)을 자연어 처리 테스크에 사용할 때, 입력값인 텍스트는 그 자체로는 사용할 수 없다. 이산적인(discrete)한 텍스트 즉, 문자열을 연속적인(continuous) 모델이

codingsmu.tistory.com

 

  • TF-IDF는 이러한 BoW의 단점을 일부 보완하기 위해 등장한 방법으로, 단어의 빈도뿐만 아니라 해당 단어가 전체 문서에서 얼마나 중요한지를 반영합니다. 자주 등장하지만 의미가 약한 단어(예: the, a 등 관사)의 가중치는 낮추고, 특정 문서에서만 자주 등장하는 단어의 가중치는 높이는 방식입니다. 하지만 이 역시 단어의 순서를 고려하지 못하기 때문에 문맥을 이해하는 데 한계가 있습니다.

머신러닝 기반 방법

이러한 한계를 극복하기 위해 실제 서비스에서는 머신러닝 기반 방법이 주로 사용됩니다. 주로 모델을 사용하여 문장을 단어 임베딩으로 변환하고, 두 임베딩 사이의 거리로 유사도를 계산하는 방법을 사용합니다.

  • Word2Vec은 단어 주변의 문맥 정보를 활용하여 의미적으로 유사한 단어들을 가까운 벡터 공간에 위치시킵니다. Word2Vec은 주변 단어로 중심 단어를 예측하는 CBOW 방식과, 중심 단어로 주변 단어를 예측하는 Skip-gram 방식으로 학습됩니다. 자세한 내용은 다음 게시글에서 확인할 수 있습니다: https://codingsmu.tistory.com/100
 

[NLP] 워드투벡터(Word2Vec)

Word2Vec Model Word2Vec는 단어 간 유사도를 반영할 수 있도록 단어의 의미를 벡터화할 수 있는 방법이다. Word2Vec의 주요 아이디어는 "비슷한 분포를 가진 단어라면 비슷한 의미를 가질 것"이다 즉, 자

codingsmu.tistory.com

 

  • Transformer 기반의 모델을 활용하는 것이 최근 가장 널리 사용되는 방법입니다. 이 방식은 문장 전체의 문맥을 고려하여 단어 임베딩을 생성할 수 있기 때문에, 기존 방법들보다 훨씬 풍부한 의미 정보를 담을 수 있습니다. 특히 검색 시스템에서는 쿼리의 의미를 정확히 이해하는 것이 중요하기 때문에, 이러한 문맥 기반 임베딩 방식이 필수적으로 사용됩니다.

 

(2) 동영상 인코더

동영상 인코더는 영상 데이터를 벡터로 변환하는 역할을 합니다. 텍스트와 달리 동영상은 시간 축을 포함한 고차원 데이터이기 때문에 처리 방식이 더 복잡합니다. 동영상 인코딩 방식은 크게 동영상 전체를 처리하는 방법과 프레임 단위로 처리하는 방법으로 나눌 수 있습니다.

  • 동영상 수준 모델: 동영상 전체를 입력으로 사용하는 방식은 시간적 흐름까지 반영할 수 있다는 장점이 있지만, 계산 비용이 매우 크다는 단점이 있습니다.
  • 프레임 수준 모델: 반면, 프레임 단위 방식은 동영상을 여러 프레임으로 나눈 뒤 각 프레임을 독립적으로 처리하는 방식입니다. 일반적으로 일정 간격으로 프레임을 샘플링한 뒤, 각 프레임을 CNN이나 ViT(Vision Transformer) 모델에 입력하여 임베딩을 생성합니다. 이후 이 프레임 임베딩들을 평균(mean pooling)이나 최대값(max pooling) 등의 방식으로 집계하여 하나의 동영상 임베딩으로 변환합니다.

이 두 가지 방식 모두 계산 효율성이 높고 구현이 비교적 간단하지만, 시간적 정보(동작의 흐름)를 충분히 반영하지 못한다는 한계가 있습니다. 따라서 액션 인식과 같이 시간 정보가 중요한 경우에는 3D CNN이나 Transformer 기반의 시계열 모델을 추가로 사용하는 방법도 고려할 수 있습니다.

 

(3) 모델 학습

텍스트 인코더와 동영상 인코더를 학습하기 위해서는 두 임베딩 공간을 잘 정렬시키는 것이 중요합니다. 이를 위해 일반적으로 Contrastive Learning 방식이 사용됩니다.

{text, video} 데이터 셋의 모델 학습 방법

핵심 아이디어는 간단합니다. 정답 쌍은(positive pair)은 임베딩 공간에서 가깝게 만들고, 관련 없는 쌍(negative pair) 은 멀어지도록 학습하는 것입니다. 이러한 방식으로 학습하면, 모델은 자연스럽게 텍스트와 동영상 간의 의미적 관계를 학습하게 됩니다. 

 

 

5️⃣ 평가


모델 성능 평가는 크게 (1) 오프라인 평가, (2) 온라인 평가로 나눌 수 있습니다.

 

(1) 오프라인 평가

오프라인 평가는 수집된 데이터셋을 기반으로, 모델의 성능을 사전에 측정하는 단계입니다.

 

특히 이 문제는 단순히 맞고 틀림을 판단하는 classification이 아니라, 결과의 “순서”가 중요한 ranking 문제이기 때문에 이에 맞는 지표를 사용하는 것이 중요합니다. 대표적인 평가 지표는 다음과 같습니다.

  • Precision: 모델이 예측한 결과 중 실제로 관련 있는 비율
  • Recall: 실제 관련 있는 동영상 중 모델이 맞춘 비율

Precision과 Recall은 기본적인 지표이지만, 검색 시스템에서는 순서를 반영하지 못한다는 한계가 있습니다. 따라서 ranking 문제에서는 추가적인 지표가 필요합니다.

  • MRR (Mean Reciprocal Rank):
    첫 번째 정답이 얼마나 상위에 위치하는지를 평가하는 지표입니다.
    예를 들어, 정답이 1번째에 있으면 1, 3번째에 있으면 1/3의 값을 가지게 됩니다.
    즉, 사용자가 원하는 결과가 얼마나 빠르게 등장하는지를 측정합니다.
  • mAP (Mean Average Precision):
    여러 개의 정답이 존재할 때, 전체 ranking 품질을 종합적으로 평가하는 지표입니다.
    다양한 threshold에서 precision을 계산하고 평균을 내어, 모델의 전반적인 성능을 확인할 수 있습니다.

 

(2) 온라인 평가

오프라인 지표가 높다고 해서 실제 서비스에서도 좋은 성능을 보장하는 것은 아닙니다. 따라서 실제 사용자 환경에서의 성능을 측정하는 온라인 평가가 반드시 필요합니다. 온라인 평가는 주로 A/B 테스트를 통해 이루어지며, 실제 사용자 행동 데이터를 기반으로 시스템의 효과를 판단합니다. 대표적인 지표는 다음과 같습니다.

  • CTR (Click Through Rate):
    검색 결과로 노출된 동영상 중 실제로 클릭된 비율 → 사용자가 결과를 얼마나 매력적으로 느끼는지 판단 가능
  • Watch Time (시청 시간):
    사용자가 동영상을 얼마나 오래 시청했는지 → 단순 클릭이 아닌 실제 만족도를 반영
  • Completion Rate (시청 완료율):
    사용자가 영상을 끝까지 시청했는지 여부 → 콘텐츠의 품질 및 추천의 적합성을 평가
반응형

'인공지능(AI) > 머신러닝(ML)' 카테고리의 다른 글

[머신러닝 시스템 설계] 2 구글 스트리트 뷰 블러링 시스템  (0) 2026.04.19
[머신러닝 시스템 설계] 1 시각 검색 시스템  (0) 2026.04.10
머신러닝의 종류: 지도학습과 비지도학습  (0) 2022.10.12
앙상블(Ensemble) 기법  (1) 2022.07.15
[핸즈온 머신러닝] 5. 정규화  (0) 2021.12.05
'인공지능(AI)/머신러닝(ML)' 카테고리의 다른 글
  • [머신러닝 시스템 설계] 2 구글 스트리트 뷰 블러링 시스템
  • [머신러닝 시스템 설계] 1 시각 검색 시스템
  • 머신러닝의 종류: 지도학습과 비지도학습
  • 앙상블(Ensemble) 기법
계속지나가기
계속지나가기
NLP Engineer
  • 계속지나가기
    코딩스뮤
    계속지나가기
  • 전체
    오늘
    어제
    • 코딩스뮤:)
      • Algorithm
        • 백준 문제풀이
        • 프로그래머스 문제풀이
        • 알고리즘 이론
        • 자료구조
        • SW Expert Academy
      • 인공지능(AI)
        • LLMs
        • 자연어처리(NLP)
        • 컴퓨터비전(CV)
        • 딥러닝(DL)
        • 머신러닝(ML)
        • 인공지능기초수학
        • 선형대수학
      • 컴퓨터 세팅
      • Computer Science
        • 유닉스프로그래밍
        • 프로그래밍언어론
        • 디자인패턴
        • 클린코드
        • SW 영어
        • 리눅스
        • 논리회로
      • Server
        • Docker
  • 블로그 메뉴

    • 홈
    • Who Am I(CV)
    • 태그
  • 링크

    • 깃허브 주소
  • 공지사항

  • 인기 글

  • 태그

    DIP
    손실함수
    파이썬 클린코드
    SIFT
    결정경계
    선형회귀
    MaximumFlow
    ML
    DigitalImageProcessing
    LM
    ComputerVision
    패턴인식
    지도학습
    에지검출
    machinelearning
    디지털이미지처리
    f1-score
    경사하강법
    기계학습
    군집화
    networkflow
    알고리즘
    최대유량
    컴퓨터비전
    네트워크플로우
    비용함수
    머신러닝
    NLP
    언어모델
    비지도학습
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
계속지나가기
[머신러닝 시스템 설계] 3 유튜브 동영상 검색

티스토리툴바