벡터 임베딩을 다른 MongoDB 데이터와 함께 저장할 수 있습니다. 이러한 임베딩은 데이터 내의 의미 있는 관계를 포착하여 시맨틱 검색을 수행하고 RAG를 구현할 수 있도록 합니다.
시작하기
아래 튜토리얼을 참고하여 벡터 임베딩을 생성하고 벡터 검색으로 쿼리하는 방법을 알아보세요. 구체적으로 다음과 같은 작업을 수행합니다.
임베딩 모델을 사용하여 벡터 임베딩을 생성하는 함수를 정의합니다.
독점 모델을 사용할지 오픈 소스 모델을 사용할지 선택합니다. 최신 임베딩 모델이 필요한 경우 Voyage AI를 사용합니다.
데이터에서 임베딩을 생성하고 이를 MongoDB에 저장합니다.
새 데이터에서 임베딩을 생성할지, 아니면 MongoDB 컬렉션 에 이미 있는 기존 데이터에서 임베딩을 생성할지 선택합니다.
검색어에서 임베딩을 생성하고 벡터 검색 쿼리를 실행합니다.
프로덕션 애플리케이션의 경우 일반적으로 벡터 임베딩을 생성하는 스크립트 를 쓰기 (write) 합니다. 이 페이지의 샘플 코드로 시작하여 사용 사례 에 맞게 사용자 지정할 수 있습니다.
고려 사항
벡터 임베딩을 생성할 때 다음 요소를 고려하세요.
임베딩 생성 방법 선택
벡터 임베딩을 생성하려면 임베딩 모델을 사용해야 합니다. 임베딩 모델은 데이터를 수치적 표현으로 변환하는 데 사용하는 알고리즘입니다. 다음 방법 중 하나를 선택하여 임베딩 모델에 액세스할 수 있습니다.
메서드 | 설명 |
---|---|
오픈소스 모델 로드 | 상용 임베딩 모델의 API 키가 없는 경우 오픈 소스 임베딩 모델을 애플리케이션에 로컬로 로드합니다. |
독점 모델 사용 | 대부분의 AI 제공자는 벡터 임베딩을 생성하는 데 사용할 수 있는 독점 임베딩 모델에 대한 API를 제공합니다. 최신 임베딩을 사용하려면 Voyage AI사용하세요. |
통합 활용 | MongoDB Vector Search 를 오픈 소스 프레임워크 및 AI 서비스와 통합하여 오픈 소스 및 독점 임베딩 모델에 빠르게 연결하고 MongoDB Vector Search를 위한 벡터 임베딩을 생성할 수 있습니다. 자세한 학습 은 MongoDB 와 AI 기술 통합을 참조하세요. |
임베딩 모델 선택
선택한 임베딩 모델은 쿼리 결과에 영향을 미치고 MongoDB Vector Search 인덱스 에 지정하는 차원 수를 결정합니다. 각 모델은 데이터와 사용 사례 에 따라 다양한 이점을 제공합니다. 멀티모달 및 도메인별 임베딩 모델을 포함한 최신 임베딩 모델의 경우, Voyage AI사용하세요.
MongoDB Vector Search에 대한 임베딩 모델을 선택할 때 다음 지표 고려하세요.
임베딩 차원: 벡터 임베딩의 길이입니다.
임베딩 크기가 작을수록 저장 효율이 높고, 임베딩 크기가 클수록 데이터의 미묘한 관계를 더 잘 포착할 수 있습니다. 선택하는 모델은 효율성과 복잡성 사이의 균형을 유지해야 합니다.
Max Tokens: 단일 임베딩으로 압축할 수 있는 토큰 의 수입니다.
모델 크기: 모델의 크기(기가바이트)입니다.
모델이 클수록 성능이 향상되지만, MongoDB Vector Search를 프로덕션 환경으로 확장하다 따라 더 많은 계산 리소스가 필요합니다.
조회 평균: 조회 시스템의 성능을 측정하는 점수입니다.
점수가 높을수록 모델이 검색된 결과 목록에서 관련 문서의 순위를 더 높게 매기는 데 더 적합하다는 것을 나타냅니다. 이 점수는 RAG 애플리케이션에 대한 모델을 선택할 때 중요합니다.
벡터 압축
많은 양의 부동 소수점 벡터를 사용하면서 mongod
의 저장 공간과 WiredTiger(디스크 및 메모리 사용량 등) 자원 사용을 줄이려면 임베딩을 binData
벡터로 변환하여 압축합니다.
BinData 는 바이너리 데이터를 저장하는 BSON 데이터 유형 입니다. 벡터 임베딩의 기본값 유형은 32비트 부동 소수점(float32
) 배열 입니다. 바이너리 데이터는 기본값 배열 형식보다 저장 효율적이므로 디스크 공간이 3배 적습니다.
binData
벡터를 저장하면 문서를 작업 세트에 로드하는 데 필요한 리소스가 줄어들어 쿼리 성능이 향상됩니다. 20개 이상의 문서를 반환하는 벡터 쿼리의 속도를 크게 향상시킬 수 있습니다. float32
임베딩을 압축하면 float32
또는 binData
벡터로 쿼리할 수 있습니다.
이 페이지의 튜토리얼에는 float32
벡터를 binData
벡터로 변환하는 데 사용할 수 있는 예시 함수가 포함되어 있습니다.
지원되는 드라이버
BSON BinData 벡터는 다음 드라이버에서 지원됩니다.
C++ 드라이버 v4.1.0 이상
C#/.NET 드라이버 v3.2.0 이상
고 (Go) 드라이버 v2.1.0 이상 버전
PyMongo 드라이버 v4.10 이상
Node.js 드라이버 v6.11 이상
Java 드라이버 v5.3.1 이상
배경
float 벡터는 일반적으로 압축하기 어려운데, 배열의 각 요소가 고유한 유형을 가지고 있기 때문입니다. (대부분의 벡터는 균일한 유형을 가집니다.) 따라서 임베딩 모델의 float 벡터 출력을 하위 유형 float32
의 binData
벡터로 변환하는 것이 더 효율적인 직렬화 방식입니다. binData
벡터는 전체 벡터에 대해 단일 유형의 디스크립터를 저장하여 저장소 오버헤드를 줄입니다.
임베딩 유효성 검사
임베딩이 올바르고 최적화된지 확인하려면 다음 전략을 고려하세요.
임베딩을 생성하고 쿼리할 때 다음 권장사항을 고려하세요.
함수와 스크립트를 테스트합니다.
임베딩을 생성하려면 시간과 계산 리소스가 필요합니다. 대규모 데이터 세트 또는 컬렉션에서 임베딩을 생성하기 전에 임베딩 함수 또는 스크립트가 데이터의 작은 하위 집합에서 예상대로 작동하는지 테스트합니다.
임베딩을 일괄적으로 생성합니다.
대규모 데이터 세트나 문서가 많은 컬렉션 에서 임베딩을 생성하려는 경우, 메모리 문제를 방지하고 성능을 최적화하려면 배치로 생성하세요.
성능을 평가합니다.
테스트 쿼리를 실행하여 검색 결과가 관련성이 있고 정확하게 순위가 매겨졌는지 확인합니다.
결과를 평가하고 인덱스 및 쿼리의 성능을 미세 조정하는 방법에 대해 자세히 학습하려면 쿼리 결과의 정확도를 측정하는 방법 및 MongoDB Vector Search 벤치마크를 참조하세요.
임베딩에 문제가 발생하는 경우 다음 전략을 고려하세요.
환경을 확인합니다.
필요한 종속성이 설치되어 있고 최신 상태인지 확인합니다. 라이브러리 버전이 충돌하면 예기치 않은 동작이 발생할 수 있습니다. 새 환경을 만들고 필요한 패키지만 설치하여 충돌이 없는지 확인합니다.
참고
Colab을 사용하는 경우 노트북 세션의 IP 주소가 Atlas 프로젝트의 액세스 목록에 포함되어 있는지 확인하세요.
메모리 사용량을 모니터링합니다.
성능 문제가 발생하면 RAM, CPU, 디스크 사용량을 확인하여 잠재적인 병목 현상을 파악하세요. Colab이나 Jupyter Notebooks와 같은 호스팅 환경에서는 인스턴스에 충분한 리소스가 프로비저닝되어 있는지 확인하고 필요한 경우 인스턴스를 업그레이드하세요.
일관적인 크기 보장
MongoDB Vector Search 인덱스 정의가 MongoDB 에 저장된 임베딩의 크기와 일치하고 쿼리 임베딩이 인덱싱된 임베딩의 크기와 일치하는지 확인합니다. 그렇지 않으면 벡터 검색 쿼리를 실행 때 오류가 발생할 수 있습니다.
특정 문제를 해결하려면 문제 해결을 참조하세요.
다음 단계
MongoDB Vector Search로 임베딩을 생성하고 쿼리 방법을 학습한 후에는 RAG(검색 강화 생성)를 구현하여 제너레이티브 AI 애플리케이션 구축을 시작하세요.
32비트 플로트 벡터 임베딩을 더 적은 비트로 양자화하여 리소스 소비를 줄이고 쿼리 속도를 개선할 수 있습니다. 자세한 내용은 벡터 양자화를 참조하세요.