AI VIDEO BRIEFING

RAG 인덱싱 실습 정리: 임베딩 모델 차원과 FAISS·크로마·큐드런트 벡터DB 비교

RAG 문서 인덱싱의 마지막 단계인 저장을 다룬 강의다. 오픈AI와 로컬 임베딩의 차원 차이, FAISS·크로마·큐드런트 세 저장소의 성격과 한계, 유사도 검색과 메타데이터 필터링 사용법을 실습으로 하나씩 짚는다.

RAG 저장 단계 실전 가이드: 임베딩 차원과 FAISS·크로마·큐드런트 비교 영상 대표 이미지

핵심 메시지

  • 임베딩은 문장을 숫자 벡터로 바꾸는 과정이고, 모델마다 차원 수가 달라 오픈AI 모델은 1536차원, 강의에서 쓴 로컬 모델은 1024차원을 내놓는다.
  • 벡터DB에 문서를 넣을 때는 사용 중인 임베딩 모델의 차원과 저장소 설정을 반드시 맞춰야 하며, 이를 자동으로 처리하는 도구도 있고 직접 지정해야 하는 도구도 있다.
  • FAISS는 데이터베이스라기보다 유사도 검색에 특화된 라이브러리에 가까워 인덱싱 결과를 잠시 담아 두고 검색해 보는 용도에 적합하다.
  • 크로마는 컬렉션 단위 관리와 생성·수정·삭제 기능을 갖췄지만 의존성 충돌이 잦고 웹 UI가 없어, 강사는 실습과 개념검증 용도로만 권한다.
  • 큐드런트는 도커로 로컬 서버를 띄워 실서비스에 쓸 수 있고 웹 UI와 세밀한 메타데이터 필터, 하이브리드 검색까지 지원해 강사가 가장 추천하는 선택지다.

쉽게 이해하기

이번 강의는 문서 인덱싱을 로드·청킹·저장 세 단계로 나눴을 때 마지막 저장 단계를 다룬다. 앞 시간에 문서를 불러와 잘라 두었다면, 이제 그 조각을 어떤 임베딩 모델로 숫자로 바꿔 어느 저장소에 넣을지 정할 차례다. 이 선택이 뒤이어 붙는 검색과 언어모델 연동의 품질을 좌우하기 때문에 강사는 종류를 나열하는 대신 각 저장소의 성격과 실무에서 고려할 지점을 짚는 방식으로 진행한다.

임베딩 설명은 단어 임베딩에서 출발한다. 남자와 여자, 왕과 여왕처럼 의미가 가까운 단어는 좌표상에서도 가깝게 놓이는데, 이때 문법적·의미적 맥락을 양방향으로 살펴 벡터에 담는 역할을 BERT 계열 모델이 맡는다. 문장은 그 안에 든 단어 벡터를 평균 내는 등의 방식으로 하나의 벡터로 합쳐지며, 이것이 청크를 다루는 문장 임베딩이다. 오픈AI 임베딩 API로 다섯 문장을 넣으면 각각 1536개의 숫자로 이뤄진 벡터 다섯 개가 나온다.

문서 보안이 중요하거나 양이 많아 API 비용이 부담이면 올라마로 내려받은 로컬 모델을 쓸 수 있다. 다만 랭체인이 만든 문서 객체는 문자열이 아니라 구조를 가진 객체라서, 리스트를 돌며 본문 필드만 뽑아 임베딩 함수에 넘겨야 한다. 이렇게 얻은 벡터의 차원은 1024로 오픈AI의 1536과 다르고, 이 차이가 뒤에서 벡터DB 설정과 직결된다.

벡터DB는 처음부터 임베딩 저장을 목적으로 설계된 계열과, 기존 데이터베이스에 벡터 기능을 덧붙인 계열로 나뉜다. 앞쪽에는 크로마와 큐드런트, 베스파, 밀버스, 위비에이트, 파인콘 등이 있고, 뒤쪽에는 오픈서치와 엘라스틱서치, pgvector를 얹은 포스트그레SQL이 있다. 이미 쓰던 검색 시스템이 있다면 후자를 그대로 활용하는 선택지도 있다는 설명이다.

실습은 세 도구를 차례로 거친다. FAISS로는 100개 청크를 넣고 인덱스에 담긴 벡터 수를 확인한 뒤 유사도 검색과 메타데이터 필터를 걸어 보고, 크로마에서는 컬렉션과 고유 ID를 만들어 넣은 다음 점수까지 함께 받아 본다. 큐드런트에서는 컬렉션을 만들 때 벡터 차원과 거리 계산 방식을 직접 지정하고, 조건을 조합한 필터로 특정 페이지 안에서만 검색하는 예시를 보여 준다.

주요 인사이트

  • 같은 이름의 함수라도 반환하는 점수의 의미가 도구마다 다르다. 크로마의 점수는 질의와 문서 사이의 거리라 값이 작을수록 유사하고, 큐드런트의 점수는 유사한 정도라 클수록 유사하다. 강사가 벡터DB 하나로 정착하라고 권하는 이유가 여기 있다.
  • 웹 UI 유무가 운영 난이도를 가른다. 크로마는 폴더에 숫자로만 저장돼 나중에 어떤 청크가 들어갔는지 눈으로 확인할 방법이 없는 반면, 큐드런트는 콘솔에서 직접 검색해 보고 컬렉션별로 저장 내용을 열어 볼 수 있다.
  • 차원 수 불일치는 초보자가 가장 먼저 만나는 벽이다. 큐드런트에서 컬렉션을 만들 때 벡터 크기를 지정하는데, 오픈AI 임베딩을 쓴다면 1536, 로컬 모델을 쓴다면 1024를 넣어야 한다.
  • 키워드 검색과 벡터 검색은 결과 개수의 성격이 다르다. 키워드는 포함 여부로 개수가 정해지지만 벡터 검색은 유사도 순위 상위 몇 개를 가져올지 사람이 k로 정해야 하고, 메타데이터 필터를 함께 걸면 k보다 적게 나올 수 있다.
  • 큐드런트는 문장 임베딩만이 아니라 키워드 기반 희소 임베딩을 함께 쓰는 하이브리드 검색도 지원한다. 강사는 왜 하이브리드 검색이 필요한지는 다음 기회에 다루겠다고 예고했다.

자주 묻는 질문

오픈AI 임베딩과 로컬 임베딩은 무엇이 다른가요?

가장 눈에 띄는 차이는 벡터 차원입니다. 강의에서 오픈AI 임베딩은 문장 하나를 1536개의 숫자로 표현했고, 올라마로 내려받은 로컬 모델은 1024개로 표현했습니다. 로컬 모델은 문서 보안이 중요하거나 문서량이 많아 API 비용이 부담될 때 대안이 됩니다.

크로마에서 유사도 점수가 낮을수록 좋은 이유는 무엇인가요?

그 값이 점수가 아니라 질의와 문서 사이의 거리이기 때문입니다. 거리가 짧을수록 더 비슷하다는 뜻이라 값이 작은 쪽이 상위에 옵니다. 반대로 큐드런트는 유사한 정도를 그대로 돌려주기 때문에 값이 클수록 유사한 문서입니다.

강사가 큐드런트를 가장 추천하는 이유는 무엇인가요?

클라우드 요금 없이 도커로 로컬에 서버를 띄워 실서비스에서 쓸 수 있고, 웹 UI로 저장 내용과 검색 결과를 직접 확인할 수 있기 때문입니다. 또 조건을 겹쳐 쓸 수 있는 메타데이터 필터와 코사인·유클리드 등 거리 계산 방식 선택, 하이브리드 검색까지 지원합니다.

FAISS는 다른 벡터DB와 어떻게 다른가요?

강사는 FAISS를 데이터베이스로 보기에는 애매하다고 설명합니다. 메타의 유사도 검색 도구로, 인덱싱 결과를 잠시 저장해 두고 검색해 보기에 적합한 라이브러리에 가깝습니다. 벡터 유사도 계산 알고리즘이 내장돼 간단한 함수만으로 검색을 시험해 볼 수 있습니다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식