벡터 검색 컬렉션 작업 - 아마존 OpenSearch 서비스

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

벡터 검색 컬렉션 작업

OpenSearch Serverless의 벡터 검색 컬렉션 유형은 확장 가능하고 성능이 우수한 유사성 검색 기능을 제공합니다. 이를 통해 기본 벡터 데이터베이스 인프라를 관리할 필요 없이 최신 기계 학습(ML) 증강 검색 경험과 생성형 AI애플리케이션을 쉽게 구축할 수 있습니다.

벡터 검색 컬렉션의 사용 사례에는 이미지 검색, 문서 검색, 음악 검색, 제품 추천, 동영상 검색, 위치 기반 검색, 사기 탐지, 이상 탐지 등이 있습니다.

OpenSearch 서버리스용 벡터 엔진은 의 k-최근접이웃 (k-NN) 검색 기능으로 구동되기 때문에 서버리스 환경의 단순함과 함께 동일한 기능을 사용할 수 있습니다. OpenSearch 엔진은 k-NN API 작업을 지원합니다. OpenSearch 이러한 작업을 통해 전체 텍스트 검색, 고급 필터링, 집계, 지리공간 쿼리, 데이터 검색 속도를 높이기 위한 중첩 쿼리, 향상된 검색 결과를 활용할 수 있습니다.

벡터 엔진은 유클리드 거리, 코사인 유사성, 점 곱 유사성과 같은 거리 측정법을 제공하며 16,000개의 차원을 수용할 수 있습니다. 숫자, 부울, 날짜, 키워드, 지오포인트 등 다양한 메타데이터 유형의 필드를 메타데이터에 저장할 수 있습니다. 설명 정보를 위한 텍스트와 함께 필드를 저장하여 저장된 벡터에 더 많은 컨텍스트를 추가할 수도 있습니다. 데이터 유형을 콜로케이션하면 복잡성이 줄어들고 유지 관리성이 향상되며 데이터 중복, 버전 호환성 문제 및 라이선스 문제를 피할 수 있습니다.

벡터 검색 컬렉션 시작

이 자습서에서는 벡터 임베딩을 실시간으로 저장, 검색 및 불러오는 다음 단계를 완료합니다.

1단계: 권한 구성

이 자습서를 완료하고 일반적으로 OpenSearch 서버리스를 사용하려면 올바른 AWS Identity and Access Management (IAM) 권한이 있어야 합니다. 이 자습서에서는 컬렉션을 생성하고 데이터를 업로드하고 검색한 다음 컬렉션을 삭제합니다.

사용자 또는 역할에는 다음과 같은 최소 권한이 포함된 연결된 자격 증명 기반 정책이 있어야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "aoss:CreateCollection", "aoss:ListCollections", "aoss:BatchGetCollection", "aoss:DeleteCollection", "aoss:CreateAccessPolicy", "aoss:ListAccessPolicies", "aoss:UpdateAccessPolicy", "aoss:CreateSecurityPolicy", "iam:ListUsers", "iam:ListRoles" ], "Effect": "Allow", "Resource": "*" } ] }

OpenSearch 서버리스 IAM 권한에 대한 자세한 내용은 을 참조하십시오. Amazon OpenSearch 서버리스를 위한 ID 및 액세스 관리

2단계: 컬렉션 생성

컬렉션은 특정 워크로드 또는 사용 사례를 지원하기 위해 함께 작동하는 OpenSearch 인덱스 그룹입니다.

OpenSearch 서버리스 컬렉션을 만들려면
  1. https://console.aws.amazon.com/aos/home 에서 아마존 OpenSearch 서비스 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 Collections(컬렉션)를 선택하고 Create collection(컬렉션 생성)을 선택합니다.

  3. 컬렉션 하우징의 이름을 지정하세요.

  4. 컬렉션 유형에서 벡터 검색을 선택합니다. 자세한 정보는 컬렉션 유형 선택을 참조하세요.

  5. 배포 유형에서 이중화 활성화(활성 복제본) 선택을 취소합니다. 그러면 개발 또는 테스트 모드에서 컬렉션이 생성되고 컬렉션의 OpenSearch 컴퓨팅 유닛 (OCU) 수가 2개로 줄어듭니다. 이 자습서에서 프로덕션 환경을 생성하려면 이 확인란을 선택된 상태로 둡니다.

  6. 보안에서 간편 생성을 선택하여 보안 구성을 간소화합니다. 벡터 엔진의 모든 데이터는 기본적으로 전송 및 저장 중에 암호화됩니다. 벡터 엔진은 세분화된 IAM 권한을 지원하므로 암호화, 네트워크, 컬렉션 및 인덱스를 생성, 업데이트 및 삭제할 수 있는 사용자를 정의할 수 있습니다.

  7. 다음을 선택합니다.

  8. 컬렉션 설정을 검토하고 Submit(제출)을 선택합니다. 컬렉션이 Active 상태가 될 때까지 몇 분 정도 기다립니다.

3단계: 데이터 업로드 및 검색

인덱스는 벡터 임베딩 및 기타 필드를 저장, 검색 및 불러올 수 있는 방법을 제공하는 공통 데이터 스키마를 포함하는 문서 컬렉션입니다. OpenSearch 대시보드의 개발 도구 콘솔이나 Postman 또는 awscurl과 같은 HTTP 도구를 사용하여 OpenSearch 서버리스 컬렉션의 인덱스에 데이터를 생성하고 업로드할 수 있습니다. 이 자습서에서는 개발자 도구를 사용합니다.

movies(영화) 컬렉션에서 데이터를 인덱싱하고 검색하기
  1. 새 컬렉션에 대한 단일 색인을 만들려면 Dev Tools 콘솔에서 다음 요청을 보내세요. 기본적으로 이렇게 하면 nmslib 엔진과 유클리드 거리가 포함된 인덱스가 생성됩니다.

    PUT housing-index { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3 }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. 단일 문서를 housing-index로 인덱싱하려면 다음 요청을 보냅니다.

    POST housing-index/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. 인덱스에 있는 속성과 유사한 속성을 검색하려면 다음 쿼리를 보내세요.

    GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 10, 20, 30 ], "k": 5 } } } }

4단계: 컬렉션 삭제

주택 컬렉션은 테스트용이므로 실험을 마치면 삭제해야 합니다.

OpenSearch 서버리스 컬렉션을 삭제하려면
  1. Amazon OpenSearch 서비스 콘솔로 돌아가십시오.

  2. 왼쪽 탐색 창에서 컬렉션를 선택하고 속성 컬렉션을 선택합니다.

  3. 삭제를 선택하여 삭제를 확인합니다.

필터링된 검색

필터를 사용하여 의미 체계 검색 결과를 구체화할 수 있습니다. 인덱스를 만들고 문서에서 필터링된 검색을 수행하려면 이전 자습서의 데이터 업로드 및 검색을 다음 지침으로 대체하세요. 다른 단계는 동일하게 유지됩니다. 필터에 대한 자세한 내용은 필터를 사용한 k-NN 검색을 참조하세요.

movies(영화) 컬렉션에서 데이터를 인덱싱하고 검색하기
  1. 컬렉션에 대한 단일 색인을 생성하려면 Dev Tools 콘솔에서 다음 요청을 보내십시오.

    PUT housing-index-filtered { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "method": { "engine": "faiss", "name": "hnsw" } }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. 단일 housing-index-filtered문서를 인덱싱하려면 다음 요청을 보내세요.

    POST housing-index-filtered/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. 지정된 가격으로 지리적 지점으로부터 일정 거리 내에 있는 시애틀 아파트 데이터를 검색하려면 다음 요청을 보내세요.

    GET housing-index-filtered/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 0.1, 0.2, 0.3 ], "k": 5, "filter": { "bool": { "must": [ { "query_string": { "query": "Find me 2 bedroom apartment in Seattle under $3000 ", "fields": [ "title" ] } }, { "range": { "price": { "lte": 3000 } } }, { "geo_distance": { "distance": "100miles", "location": { "lat": 48, "lon": 121 } } } ] } } } } } }

십억 개 규모의 워크로드

벡터 검색 컬렉션은 수십억 개 벡터로 구성된 워크로드를 지원합니다. Auto Scaling이 자동으로 작업을 수행하므로 크기 조정 목적으로 다시 인덱싱할 필요가 없습니다. 차원 수가 많은 벡터가 수백만 개 (또는 그 이상) 있고 200개 이상의 OCU가 필요한 경우 AWS Support에 문의하여 계정의 최대 OpenSearch 컴퓨팅 유닛 (OCU) 을 늘리십시오.

제한 사항

벡터 검색 컬렉션에는 다음과 같은 제한 사항이 있습니다.

  • 벡터 검색 컬렉션은 Apache Lucene ANN 엔진을 지원하지 않습니다.

  • 벡터 검색 컬렉션은 Faiss의 HNSW 알고리즘만 지원하고 IVF 및 IVFQ는 지원하지 않습니다.

  • 벡터 검색 컬렉션은 워밍업, 통계 및 모델 학습 API 작업을 지원하지 않습니다.

  • 벡터 검색 컬렉션은 인라인 또는 저장된 스크립트를 지원하지 않습니다.

  • 벡터 검색 컬렉션에서는 인덱스 개수 정보를 사용할 수 없습니다. AWS Management Console

  • 벡터 검색 컬렉션의 인덱스 새로 고침 간격은 60초입니다.

다음 단계

벡터 검색 컬렉션과 인덱스 데이터를 생성하는 방법을 알았으므로 다음 연습을 시도해볼 수 있습니다.

  • OpenSearch Python 클라이언트를 사용하여 벡터 검색 컬렉션으로 작업하십시오. 에서 이 튜토리얼을 참조하십시오 GitHub.

  • OpenSearch Java 클라이언트를 사용하여 벡터 검색 컬렉션으로 작업하십시오. 에서 이 튜토리얼을 참조하십시오 GitHub.

  • 벡터 LangChain OpenSearch 저장소로 사용하도록 설정하세요. LangChain 언어 모델로 구동되는 애플리케이션을 개발하기 위한 오픈 소스 프레임워크입니다. 자세한 내용은 LangChain 설명서를 참조하십시오.