이번 글에서는 머신러닝을 활용한 유튜브 동영상 검색 시스템을 설계합니다. 머신러닝 모델 개발/평가보다는 서빙 아키텍처에 대하여 주로 이야기합니다. 해당 내용은 '가상 면접 사례로 배우는 머신러닝 시스템 설계 기초' 4장 유튜브 동영상 검색을 참고하였고 개인 경험을 추가하였습니다.
목차
0. 유튜브 동영상 검색 시스템이란?
1. 요구사항 구체화
2. 머신러닝 작업으로 문제 구조화
2.1. 머신러닝 목표 정의
2.2. 시스템의 입력 및 출력
2.3. 적합한 머신러닝 유형 선택
2.3.1. 텍스트 검색
2.3.2. 시각 검색
3. 데이터 준비
3.1. 데이터 엔지니어링
3.2. 피처 엔지니어링
4. 모델 개발
5. 서빙
5.1. 예측 파이프라인
5.2. 동영상 인덱싱 파이프라인
5.3. 텍스트 인덱싱 파이프라인
0. 유튜브 동영상 검색 시스템이란?
유튜브 동영상 검색 시스템은 사용자가 입력한 키워드에 가장 적합한 동영상을 찾아주는 기술입니다. 이 시스템은 복잡한 머신러닝 알고리즘을 활용하여 동영상의 콘텐츠, 설명, 제목, 태그 등 다양한 데이터를 분석하고 인덱싱하여 사용자에게 최적화된 검색 결과를 제공합니다.
1. 요구사항 구체화
유튜브 동영상 검색 시스템을 설계하기 위해서 가상 면접의 형식을 빌려 설계를 구체화합니다.
입력 쿼리의 유형
- 질문: 입력 쿼리는 텍스트로만 가능한가요? 이미지, 동영상으로도 검색 가능한가요?
- 답변: 입력 쿼리는 텍스트만 가능합니다.
플랫폼의 콘텐츠 유형
- 질문: 플랫폼의 콘텐츠는 동영상 형태로만 제공되나요? 이미지나 오디오 파일도 지원하나요?
- 답변: 플랫폼은 동영상만 제공합니다.
동영상의 관련성 결정 요소
- 질문: 유튜브 검색 시스템은 매우 복잡합니다. 동영상의 관련성은 시각적 콘텐츠와 텍스트 데이터(제목, 설명 등)만으로도 결정된다고 가정해도 되나요?
- 답변: 네, 동영상의 관련성은 시각적 콘텐츠와 텍스트 데이터만으로 결정됩니다.
학습 데이터의 유무
- 질문: 사용할 수 있는 학습 데이터가 있나요?
- 답변: 예, 1000만 건의 데이터(동영상, 텍스트 쿼리)가 있다고 가정합니다.
다국어 지원 여부
- 질문: 검색 시스템에서 다국어를 지원해야 하나요?
- 답변: 간단하게 하기 위해 영어만 지원한다고 가정하겠습니다.
플랫폼에서 사용 가능한 동영상의 수
- 질문: 플랫폼에서 사용할 수 있는 동영상은 몇 개인가요?
- 답변: 10억 개입니다.
결과의 개인화 필요성
- 질문: 결과를 개인화해야 하나요? 과거 상호작용에 따라 사용자별로 결과의 순위를 다르게 매겨야 할까요?
- 답변: 개인화가 필수인 추천 시스템과는 달리, 검색 시스템에서는 반드시 개인화할 필요는 없습니다. 문제를 단순화하기 위해서 개인화는 고려하지 않습니다.
2. 머신러닝 작업으로 문제 구조화
2.1. 머신러닝 목표 정의
목표: 사용자가 검색하는 텍스트 쿼리와 유사한 동영상을 검색합니다. 텍스트와 관련성이 높은 동영상들을 식별하고 순위를 매기는 과정을 포함합니다.
2.2. 시스템의 입력 및 출력
입력: 텍스트 쿼리
출력: 텍스트 쿼리와 관련성이 높은 동영상 목록
2.3. 적합한 머신러닝 유형 선택
텍스트 쿼리와 동영상 간의 관련성을 결정하기 위해서는 동영상의 메타 데이터(제목, 태그, 설명)와 시각적 콘텐츠와 모두 사용할 수 있습니다.
텍스트 검색과 시각 검색 시스템의 결과를 합쳐서 동영상 목록 결과를 보여줄 수 있습니다.
2.3.1. 텍스트 검색
텍스트 검색 컴포넌트는 일반적으로 Elasticsearch를 사용합니다.
동영상 데이터는 텍스트 검색어와 가장 유사한 제목 또는 설명/태그를 가진 동영상을 찾을 수 있습니다.
역색인(inverted index)을 활용하여 주로 검색을 하고, ML을 위주로 검색하지 않기 때문에 별도 학습 비용은 발생하지 않습니다. (물론 ES를 활용한 유사도 검색을 사용할 수도 있겠지만 여기서 말하는 텍스트 검색은 일반적인 ES 검색을 말하고 있습니다.)
동영상 ID | 제목 | 태그 |
1 | 우리 집 강아시 실내에서 놀기 | 개, 실내, 놀이 |
2 | 중학교 수영 대회 | 수영장, 어린이 |
3 | 일본에 있을 때 촬영한 영상 보기 | 일본, 여행, 브이로그 |
4 | 스포츠카 속도 비교 | 자동차, 경주, 속도 |
… |
2.3.2. 시각 검색
시각 검색 컴포넌트는 텍스트 쿼리와 동영상의 시각적 콘텐츠 간의 유사성에 따라 동영상의 순위를 매기게 됩니다.
시각적 콘텐츠 간의 유사성을 비교하기 위해선 보통 머신러닝 모델을 사용하여 유사도 검색을 하게 됩니다.
머신러닝 모델은 2개의 벡터를 만들게 됩니다.
동영상 임베딩 벡터를 생성하는 동영상 인코더 / 텍스트 임베딩 벡터를 생성하는 텍스트 인코더
두 벡터 간의 유사도(e.g. 스칼라 곱)를 측정하여 계산합니다. 이를 토대로 동영상 순위를 매기게 됩니다.
3. 데이터 준비
3.1. 데이터 엔지니어링
모델 학습하고 평가하기 위해 주석이 달린 데이터 셋이 미리 제공되므로 별도 데이터 엔지니어링 수행할 필요가 없다는 전제가 있습니다. 만약 이 데이터가 없다면 아래와 같이 데이터 셋이 필요합니다.
동영상 명 | 쿼리 | 분할 유형 |
1234.mp4 | 수영장에서 수영하는 아이들! | 훈련 |
43121.mp4 | 졸업 축하 | 훈련 |
1123541.mp4 | 축구하는 청소년 모임 | 유효성 검사 |
66818234.mp4 | 텐서보드 작동 방식 | 유효성 검사 |
12957103.mp4 | 겨울철 자동차 여행 | 테스트 |
3.2. 피처 엔지니어링
머신러닝 모델을 사용할 때는 숫자를 입력값을 사용하기 때문에, 텍스트/동영상 같은 비정형 데이터를 수치로 변환해야 합니다.
3.2.1. 텍스트 데이터 수치화
텍스트는 일반적으로 3단계 (정규화, 토큰화, 토큰 ID) 를 통해 숫자 벡터로 표현됩니다.
3.2.1.1. 텍스트 정규화
텍스트 정규화는 단어와 문장의 일관성을 유지합니다.
예를 들어 dog, dogs, DOG! 등 철자 다르거나 구두점 , 소문자, 문장 부호 제거, 공백 다듬기 등을 처리하게 됩니다.
- 소문자: 모든 문자 소문자
- 문장 부호 제거: 텍스트에서 문장 부호 제거 (구두점은 마침표, 쉼표, 물음표, 느낌표)
- 공백 다듬기: 선행, 후행 및 여러 공백 다듬기
- 정규화 형식 KD(NKFD): 조합된 문자소를 단순한 조합으로 분해
- 악센트 제거: 단어에 표현된 악센트 표시 제거
- 형태소 분석 및 어간 추출: 관련 단어 형태 집한에 대한 표준 대표를 식별 (walking, walks, walked → walk)
3.2.1.2. 토큰화
토큰화는 텍스트 조각을 토큰이라는 작은 단위로 분해하는 절차입니다.
일반적으로 3가지 방법이 있습니다.
- 단어 토큰화: 특정 구분 기호에 따라 텍스트를 개별 단어로 분할
- e.g. i have an interview tomorrow → [i, have, an, interview, tomorrow]
- 서브워드 토큰화: 텍스트 하위 단어(n-gram)으로 분할
- 문자 토큰화: 텍스트를 문자 집합으로 분할
3.2.1.3. 토큰을 ID로 전환
토큰을 ID로 변환할 때 2가지 방법(룩업 테이블 / 해싱)이 있습니다.
룩업 테이블
각 고유 토큰을 ID에 매핑하여 1:! 룩업 테이블을 생성합니다.
동물 | 18 |
… | … |
예술 | 35 |
… | … |
자동차 | 128 |
해싱
피처 해싱(feature hashing) / 해싱 트릭(hashing trick)이라고도 하며 룩업 테이블을 유지하지 않고 해시 함수를 사용하여 ID를 가져오는 메모리 효율성이 좋은 방법입니다.
Feature Hashing: A Comprehensive Guide for NLP Enthusiasts
3.2.1.2. 동영상 데이터 준비
동영상 전처리 워크플로우는 아래와 같이 볼 수 있습니다.
동영상 -> 프레임 디코딩 -> 샘플 프레임 -> 크기 조정 -> 스케일링, 정규화와 색상모드 보정 -> frames.npy
4. 모델 개발
앞에서 이야기했지만 머신러닝 모델은 2개 / 텍스트 인코더 모델과 동영상 인코더 모델이 있습니다.
4.1. 텍스트 인코더 모델
통계적 방법: BoW(Bag of Words) / TF-IDF(Term Frequency Inverse Document Frequency))
ML 방법: 임베딩 계층 / 워드 투 벡터 / 트랜스 포머 기반 아키텍처)
이 있습니다.
4.2. 동영상 인코더 모델
동영상 인코더 모델을 구현할 때 전체 동영상 수준 모델 또는 프레임 수준 모델이 있습니다.
동영상 수준 모델은 전체 동영상 처리하여 임베딩 계산하기 때문에 계산 비용이 많이 발생합니다.
3차원 CNN, 트랜스 포머 기반으로 생성됩니다.
프레임 수준 모델은 동영상 수준 모델에 비해 계산 비용이 적기 때문에 훈련 및 서빙 속도가 빠릅니다. 단점은 동작이나 행동과 같은 동영상 전체적인 시간적 측면은 이해하지 못하는 단점이 있습니다.
모델 훈련이나 모델 평가 부분은 생략하겠습니다.
5. 서빙
동영상 검색 시스템 설계는 아래와 같습니다.
3가지 기능으로 나눠볼 수 있습니다.
1. 예측 파이프라인
2. 동영상 인덱싱 파이프라인
3. 텍스트 인덱싱 파이프라인
5.1. 예측 파이프라인
예측 파이프라인은 4가지 컴포넌트로 구성됩니다.
시각 검색 / 텍스트 검색 / 융합 계층 / 재순위화 서비스
5.1.1. 시각 검색
텍스트 쿼리를 인코딩하고 최근접 이웃 서비스를 사용하여 텍스트 임베딩과 가장 유사한 동영상 임베딩 찾습니다.
5.1.2. 텍스트 검색
Elastisearch 를 사용하여 텍스트 쿼리와 겹치는 제목,태그가 있는 동영상을 검색합니다. (일반적인 검색)
5.1.3. 융합 계층
서로 다른 두 개의 동영상 목록(시각 검색 / 텍스트 검색)들을 하나로 하나로 합치게 됩니다.
연관성 점수의 가중치 합계 기반으로 동영상 순위를 재조정하거나 추가 모델을 추가하여 동영상 순위 재조정할 수도 있지만, 추가 모델 사용하면 비용/시간이 발생하기에 의사결정이 필요합니다.
5.1.4. 재순위화 서비스
비즈니스 수준의 로직이나 정책을 반영하여 최종 결과를 재순위화합니다. 예를 들어, 부적절한 결과의 필터링, 비공개 동영상 제외, 중복 결과의 제거 등이 이에 해당합니다.
위 작업은 주로 최종 서빙하는 API에서 진행됩니다.
재순위화 서비스는 비즈니스 요구사항이 포함되어있기 때문에 admin 기능에서 재순위(후순위 처리)를 추가하고 API에서 가공하여 동영상 목록들을 서빙하게 됩니다.
5.2. 동영상 인덱싱 파이프라인
동영상 임베딩 계산하려면 학습된 동영상 인코더를 사용합니다. 최근접 이웃 서비스에서 유사도 검색합니다.
5.3. 텍스트 인덱싱 파이프라인
Elastisearch를 사용하여 제목, 수동 태그, 자동 생성 태그를 인덱싱합니다. 일반적으로 사용자가 직접 태그들을 생성하지만 태그를 입력하지 않는다면, 독립된 ML 모델에서 자동으로 태그를 생성하여 넣어줄 수 있습니다. 검색에 사용할 메타 데이터를 자동으로 만들어주는 별도 ML 모델입니다.
마치며
유튜브 동영상 검색 시스템의 기본 개념부터 요구사항 구체화, 머신러닝 작업으로 문제 구조화, 데이터 준비, 서빙의 단계까지 간단히 알아보았습니다.
감사합니다.
Reference
- Feature Hashing: A Comprehensive Guide for NLP Enthusiasts
- 책 가상 면접 사례로 배우는 머신러닝 시스템 설계 기초: https://www.yes24.com/Product/Goods/124939147
'✈️ 시스템 설계' 카테고리의 다른 글
머신러닝 시스템 설계 - 이미지 검색 시스템 (feats. 핀터레스트) (2) | 2024.03.31 |
---|---|
프로메테우스, 데이터독과 유사한 모니터링/알람 시스템 설계 1. 초기 설계안 (2) | 2024.03.16 |
분산 메시지 큐 시스템 설계 1. 분산 메시지큐 주요 기능, 컴포넌트 설명과 초기 설계안 (0) | 2024.02.18 |
댓글