Amazon Web Services 한국 블로그

Amazon DocumentDB(MongoDB 호환)에 대한 벡터 검색, 이제 정식 출시

오늘 Amazon DocumentDB용 벡터 검색(MongoDB 호환)의 정식 출시를 발표합니다. 이 기능은 도큐먼트 데이터베이스 내에서 밀리초의 응답 시간으로 수백만 개의 벡터를 저장, 인덱싱 및 검색할 수 있는 새로운 내장 기능입니다.

벡터 검색은 기계 학습(ML)에서 거리 또는 유사성 메트릭을 사용하여 벡터 표현을 비교해 주어진 데이터와 유사한 데이터 포인트를 찾는 새로운 기술입니다. 벡터는 Amazon Bedrock, Amazon SageMaker 및 기타 오픈 소스 또는 독점 ML 서비스에서 호스팅되는 대규모 언어 모델(LLM)에서 생성된 비정형 데이터를 표현한 수치입니다. 이 접근 방식은 생성형 인공 지능(AI) 애플리케이션 생성에 유용하며 예로는 직관적 검색, 제품 추천, 개인화 및 챗봇 등으로 검색 증강 세대(RAG) 모델 접근 방식을 사용합니다. 예를 들어 데이터 집합에 영화에 대한 개별 도큐먼트가 포함된 경우 단순히 키워드를 일치시키는 대신 “보트”, “비극” 또는 “실화 기반 영화”와 같은 공유 컨텍스트를 기반으로 타이타닉과 유사한 영화를 의미론적으로 검색할 수 있습니다.

Amazon DocumentDB용 벡터 검색을 사용하면 별도의 벡터 데이터베이스 인프라를 관리하는 데 시간과 비용을 들이지 않고도 미묘한 의미 및 컨텍스트를 기반으로 데이터베이스를 효과적으로 검색할 수 있습니다. 또한 Amazon DocumentDB가 제공하는 완전 관리형의 규모를 조정할 수 있으며, 보안 및 가용성이 뛰어난 JSON 기반 도큐먼트 데이터베이스의 이점을 활용할 수 있습니다.

Amazon DocumentDB에서 벡터 검색 시작하기
벡터 검색 기능은 Amazon DocumentDB 5.0 인스턴스 기반 클러스터에서 사용할 수 있습니다. 벡터 검색 애플리케이션을 구현하려면 도큐멘트 내 필드에 대한 임베딩 모델을 사용하여 벡터를 생성하고, Amazon DocumentDB에 소스 데이터와 나란히 벡터를 저장합니다.

다음으로 벡터 필드에 벡터 인덱스를 생성하면 유사 벡터를 검색하는 데 도움이 되며 시맨틱 검색을 사용하여 Amazon DocumentDB 데이터베이스를 검색할 수 있습니다. 마지막으로 사용자가 제출한 쿼리는 동일한 임베딩 모델을 사용하여 벡터로 변환돼 의미상 유사한 문서를 가져와 클라이언트에 반환합니다.

Amazon DocumentDB에서 벡터 검색을 사용하여 간단한 시맨틱 검색 애플리케이션을 구현하는 방법을 살펴봅시다.

1단계. Amazon Titan 임베딩 모델을 사용하여 벡터 임베딩 생성
Amazon Titan 임베딩 모델을 사용하여 임베딩 벡터를 생성해 봅시다. Amazon Titan 임베딩 모델은 서버리스 생성형 AI 서비스인 Amazon Bedrock에서 사용할 수 있습니다. 인프라를 관리하지 않고도 단일 API를 사용하여 쉽게 액세스할 수 있습니다.

prompt = "I love dog and cat."
response = bedrock_runtime.invoke_model(
    body= json.dumps({"inputText": prompt}), 
    modelId='amazon.titan-embed-text-v1', 
    accept='application/json', 
    contentType='application/json'
)
response_body = json.loads(response['body'].read())
embedding = response_body.get('embedding')

반환된 벡터 임베딩은 다음과 비슷하게 표시됩니다.

[0.82421875, -0.6953125, -0.115722656, 0.87890625, 0.05883789, -0.020385742, 0.32421875, -0.00078201294, -0.40234375, 0.44140625, ...]

2단계. 벡터 임베딩 삽입 및 벡터 인덱스 생성
insertMany( [{},...,{}] ) 작업을 사용하여 Amazon DocumentDB의 컬렉션에 추가하려는 문서 목록과 함께 생성된 벡터 임베딩을 추가할 수 있습니다.

db.collection.insertMany([
    {sentence: "I love a dog and cat.", vectorField: [0.82421875, -0.6953125,...]},
    {sentence: "My dog is very cute.", vectorField: [0.05883789, -0.020385742,...]},
    {sentence: "I write with a pen.", vectorField: [-0.020385742, 0.32421875,...]},
  ...
]);

createIndex 명령을 사용하여 벡터 인덱스를 생성할 수 있습니다. Amazon DocumentDB는 플랫 압축이 적용된 반전 파일(IVFFLAT) 벡터 인덱스를 사용하여 근사치 근접 이웃(ANN) 검색을 수행합니다. 이 기능은 세 가지 거리 측정 항목(유클리드, 코사인, 내적)을 지원합니다. 스페이스에서 두 지점 사이의 직선 거리를 측정한 유클리드 거리를 사용할 것입니다. 유클리드 거리가 짧을수록 벡터는 서로 가깝습니다.

db.collection.createIndex (
   { vectorField: "vector" },
   { "name": "index name",
     "vectorOptions": {
        "dimensions": 100, // the number of vector data dimensions
        "similarity": "euclidean", // Or cosine and dotProduct
        "lists": 100 
      }
   }
);

3단계.  Amazon DocumentDB에서 벡터 임베딩 검색
이제 $search 내의 새로운 집계 파이프라인 연산자를 사용하여 문서 내에서 유사한 벡터를 검색할 수 있습니다. “I like pets”를 검색하는 예제 코드는 다음과 같습니다.

db.collection.aggregate ({
  $search: {
    "vectorSearch": {
      "vector": [0.82421875, -0.6953125,...], // Search for ‘I like pets’
      "path": vectorField,
      "k": 5,
      "similarity": "euclidean", // Or cosine and dotProduct
      "probes": 1 // the number of clusters for vector search
      }
     }
   });

그러면 “나는 개와 고양이를 사랑해”와 같은 의미적으로 유사한 검색 결과가 반환됩니다.

자세히 알아보려면 Amazon DocumentDB 설명서를 참조하세요. Amazon DocumentDB를 사용한 시맨틱 동영상 검색과 같은 보다 실용적인 예를 보려면 GitHub 리포지토리에서 Python 소스 코드 및 데이터 세트를 찾으십시오.

정식 출시
이제 Amazon DocumentDB가 출시된 모든 AWS 리전에서 Amazon DocumentDB 5.0 인스턴스 기반 클러스터를 사용하는 모든 고객이 추가 비용 없이 Amazon DocumentDB에 대한 벡터 검색을 이용할 수 있습니다. Amazon DocumentDB에 벡터 임베딩을 저장, 인덱싱 및 검색할 때 표준 컴퓨팅, I/O, 스토리지 및 백업 요금이 적용됩니다.

자세한 내용을 알아보려면 Amazon DocumentDB를 참조하세요. 피드백을 보내려면 AWS re:Post for Amazon DocumentDB를 이용하거나 평소 교류하는 AWS Support 담당자를 통해 전달해 주세요.

Channy