Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

벡터 검색을 위해 벡터 임베딩을 인덱스하는 방법

이 페이지의 내용

  • knnVector 유형 제한 검토
  • 0} 유형에 대한 인덱스 정의 knnVector
  • 0}knnVector 필드 속성 구성
  • 0} 유형에 대한 예시를 사용해 보세요.knnVector

knnVector 유형을 사용하여 벡터 임베딩을 인덱싱할 수 있습니다. 벡터 필드는 다음 유형의 숫자 배열로 표현할 수 있습니다.

  • BSON int32, knnBeta 연산자를 사용하여 쿼리할 수 있는 int64 또는 double 데이터 유형.

  • BSON double $vectorSearch 단계를 사용하여 쿼리하기 위한 데이터 형식입니다.

이제 더 이상 사용되지 않는 knnBeta 연산자와 집계 파이프라인의 $vectorSearch 단계를 사용하여 knnVector로 인덱싱된 필드를 쿼리할 수 있습니다.

참고

Atlas UI에서 Atlas Search Visual Editor를 사용하여 knnVector 유형의 필드를 구성할 수 없습니다. 대신 Atlas Search JSON Editor를 사용하여 knnVector 유형의 필드를 구성하세요.

Atlas CLI를 사용하여 만든 로컬 Atlas 배포와 함께 Atlas Vector Search를 사용할 수도 있습니다. 자세한 내용은 로컬 Atlas 배포 만들기를 참조하세요.

문서 배열 내부의 필드 또는 객체 배열 내부의 필드(Atlas Search embeddedDocuments 유형)를 knnVector 유형으로 인덱싱할 수 없습니다.

다음은 knnVector 유형에 대한 JSON 구문입니다. 기본 인덱스 정의를 다음으로 바꿉니다. 필드에 대해 자세히 알아보려면 필드 속성을 참조하세요.

1{
2 "mappings": {
3 "name": "<index-name>",
4 "dynamic": true|false,
5 "fields": {
6 "<field-name>": {
7 "type": "knnVector",
8 "dimensions": <number-of-dimensions>,
9 "similarity": "euclidean | cosine | dotProduct"
10 }
11 }
12 }
13}

knnVector 유형에는 다음과 같은 옵션이 있습니다:

옵션
유형
필요성
목적
type
문자열
필수 사항
이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 knnVector이어야 합니다.
dimensions
int
필수 사항
인덱스 및 쿼리 시점에 Atlas Search가 적용하는 벡터 차원의 수입니다. 이 값은 4096보다 클 수 없습니다.
similarity
문자열
필수 사항

상위 K-최근접 이웃을 검색하는 데 사용하는 벡터 유사성 함수입니다. 값은 다음 중 하나일 수 있습니다:

  • euclidean - 벡터의 끝과 끝 사이의 거리를 측정합니다. 이를 통해 다양한 차원을 기준으로 유사성을 측정할 수 있습니다. 자세히 알아보려면 유클리드를 참조하세요.

  • cosine - 벡터 사이의 각도를 기준으로 유사성을 측정합니다. 이를 통해 규모에 따라 크기가 조정되지 않는 유사성을 측정할 수 있습니다. cosine에는 크기가 0인 벡터를 사용할 수 없습니다. 코사인 유사성을 측정하려면 벡터를 정규화하고 대신 dotProduct (을)를 사용하는 것이 좋습니다. 자세한 내용은 코사인을 참조하세요.

  • dotProduct - cosine과 유사하게 측정하지만 벡터의 크기를 고려합니다. 각도와 크기를 기준으로 유사성을 효율적으로 측정할 수 있습니다. 자세한 내용은 점 곱(내적)을 참조하세요.

    크기를 정규화하면 유사성 측정에서 cosinedotProduct 은 거의 동일합니다.

sample_mflix.embedded_movies 컬렉션에 대한 다음 인덱스 정의는 컬렉션에서 동적으로 인덱싱할 수 있는 모든 필드를 동적으로 인덱싱하고 plot_embedding 필드를 knnVector 유형으로 정적으로 인덱싱합니다. plot_embedding 필드에는 OpenAI의 text-embedding-ada-002 임베딩 모델을 사용하여 생성된 임베딩이 포함되어 있습니다. 인덱스 정의는 1536 벡터 차원을 지정하고 euclidean을 사용하여 유사성을 측정합니다.

1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "plot_embedding": {
6 "type": "knnVector",
7 "dimensions": 1536,
8 "similarity": "euclidean"
9 }
10 }
11 }
12}

클러스터에 샘플 데이터를 로드하고 이 컬렉션에 대한 이전 Atlas Search 인덱스를 만들면 이 컬렉션에 대해 $vectorSearch 쿼리를 실행할 수 있습니다. 실행할 수 있는 샘플 쿼리에 대해 자세히 알아보려면 $vectorSearch 예시를 참조하세요.

돌아가기

geo