본문 바로가기
← 메인으로
검색

멀티모달 검색

게시 2024-08-12

멀티모달 검색 파이프라인을 단계별로 나타낸 흐름도. 멀티모달 입력 처리(입력 모달리티 분류, 텍스트 전처리/토큰화/정규화, 이미지 전처리/리사이징/정규화, 음성 전처리/ASR/텍스트 변환), 멀티모달 인코딩(텍스트 인코더 BERT/SBERT/E5/GTE, 이미지 인코더 ResNet/DINOv2, 멀티모달 인코더 CLIP/BLIP/Flamingo), 벡터 처리(벡터 통합 모듈 가중치 기반 결합/벡터 연결/크로스 어텐션, 벡터 조정 모듈 PCA/MLP 차원 축소/정규화/특성 강화, 질의 재구성 모듈 하이브리드 검색 질의 생성/쿼리 확장), 벡터 검색(FAISS/Qdrant/Weaviate ANN 기반 유사도 검색, 결과 조정 모듈 재랭킹/모달리티별 가중치 조정, 하이브리드 검색 모듈 벡터+키워드 통합) 순으로 이어지는 구조.

  • 텍스트, 이미지, 음성 등 서로 다른 형태의 입력을 결합해 검색하는 방식
  • "이 사진처럼 밝은 톤의 가디건 찾아줘"처럼 이미지와 텍스트를 동시에 입력할 수 있는 구조
  • 핵심은 서로 다른 모달리티를 하나의 공통 벡터 공간에서 비교 가능한 형태로 변환하는 것
  • 프로세스는 멀티모달 입력 처리 → 멀티모달 인코딩 → 벡터 처리 → 벡터 검색 순으로 이어짐

멀티모달 입력 처리 : 텍스트(스타일 설명, 속성 등), 이미지(업로드한 참조 이미지), 음성(ASR로 텍스트 변환) 등 다양한 모달리티를 인식하고 분류. 각 모달리티를 별도 처리 경로로 안내

멀티모달 인코딩 : 텍스트는 BERT/SBERT로, 이미지는 ResNet/DINOv2로 각각 벡터화. 문제는 두 벡터가 서로 다른 공간에 존재해 직접 비교가 불가능하다는 점. CLIP/BLIP/Flamingo 같은 멀티모달 인코더가 이미지-텍스트 쌍을 함께 학습해 두 모달리티를 같은 벡터 공간으로 정렬. 이후 텍스트 벡터와 이미지 벡터를 직접 비교할 수 있게 됨

벡터 처리 : 여러 모달리티 벡터를 통합하고 검색에 맞게 최적화하는 단계

  • 벡터 통합 : 가중치 기반 결합(모달리티별 중요도에 따라 가중 평균), 벡터 연결(두 벡터를 이어붙여 하나의 긴 벡터 생성), 크로스 어텐션 기반 통합(두 모달리티 간 관계를 동적으로 계산) 세 가지 방식 활용
  • 벡터 조정 : PCA/MLP로 차원 축소, 정규화(벡터 길이를 1로 통일), 특성 강화(색상 검색이면 색상 관련 차원에 가중치 부여)
  • 질의 재구성 : 의미적 쿼리 확장(“캐주얼” → “캐주얼, 일상복, 편안한, 데일리룩”), 벡터+키워드 통합 하이브리드 질의 생성

벡터 검색 : FAISS/Qdrant/Weaviate로 ANN(근사 최근접 이웃) 기반 유사도 검색. 벡터 검색과 키워드 검색을 결합한 하이브리드 검색이 실무에서 일반적. 결과 재랭킹 시 인기도/재고/모달리티별 가중치 조정 적용. 파이프라인 구축에는 LangChain/LlamaIndex, 워크플로우 자동화에는 Apache Airflow 활용