Azure AI Search의 벡터

벡터 쿼리는 콘텐츠의 숫자 표현에 대한 인덱싱 및 쿼리 실행을 지원하는 정보 쿼리 방식입니다. 콘텐츠가 일반 텍스트가 아닌 숫자이기 때문에 쿼리 벡터와 가장 유사한 벡터를 기반으로 일치합니다. 다음 항목에서 일치할 수 있습니다.

  • 의미 체계적 또는 개념적 유사성("dog" 및 "canine", 개념적으로 유사하지만 언어적으로 구별됨)
  • 다국어 콘텐츠(영어로 "dog", 독일어로 "hund")
  • 다양한 콘텐츠 형식(일반 텍스트의 "dog" 및 이미지 파일의 개 사진)

이 문서에서는 Azure AI 검색의 벡터에 대한 개략적인 소개를 제공합니다. 또한 다른 Azure 서비스와의 통합을 설명하고 벡터 검색 개발과 관련된 용어 및 개념을 다룹니다.

이 문서를 백그라운드에서 수행하는 것이 좋지만 시작하려면 다음 단계를 수행합니다.

벡터 빠른 시작 또는 GitHub의 코드 샘플에서 시작할 수도 있습니다.

벡터 검색을 지원할 수 있는 시나리오는 무엇인가요?

벡터 검색 시나리오에는 다음이 포함됩니다.

  • 유사성 검색. 포함 모델(예: OpenAI 포함 모델) 또는 오픈 소스 모델(예: SBERT)을 사용하여 텍스트를 인코딩하고 벡터로 인코딩된 쿼리를 사용하여 문서를 검색합니다.

  • 다양한 콘텐츠 형식 간 검색(멀티 모드). 멀티 모드 포함을 사용하여 이미지 및 텍스트를 인코딩하고(예: Azure OpenAI에서 OpenAI CLIP 또는 GPT-4 Turbo with Vision 사용), 두 콘텐츠 형식의 벡터로 구성된 포함 공간을 쿼리합니다.

  • 하이브리드 검색. Azure AI 검색에서 하이브리드 검색은 동일한 요청의 벡터 및 키워드 쿼리 실행을 나타냅니다. 벡터 지원은 벡터 필드와 검색 가능한 텍스트 필드가 모두 포함된 인덱스를 사용해서 필드 수준에서 구현됩니다. 쿼리는 병렬로 실행되고 결과는 단일 응답으로 병합됩니다. 필요에 따라 Bing을 구동하는 동일한 언어 모델을 사용하는 L2 순위 재지정을 통해 의미 체계 순위 지정을 추가하여 정확도를 높입니다.

  • 다국어 검색. 여러 언어로 학습시킨 포함 모델 및 채팅 모델을 통해 사용자 고유의 언어로 검색 환경을 제공할 수 있습니다. 번역을 좀 더 강력하게 제어해야 하는 경우 하이브리드 검색 시나리오에서 Azure AI Search가 비벡터 콘텐츠에 대해 지원하는 다언어 기능을 보완할 수 있습니다.

  • 필터링된 벡터 검색 쿼리 요청에는 벡터 쿼리와 필터 식이 포함될 수 있습니다. 필터는 텍스트 및 숫자 필드에 적용되고, 메타데이터 필터에 유용하며 필터 조건에 따라 검색 결과를 포함하거나 제외합니다. 벡터 필드 자체는 필터링할 수 없지만 필터링 가능한 텍스트 또는 숫자 필드를 설정할 수 있습니다. 검색 엔진은 벡터 쿼리 실행 전후에 필터를 처리할 수 있습니다.

  • 벡터 데이터베이스. Azure AI Search는 쿼리하는 데이터를 저장합니다. RAG(검색 증강 생성) 아키텍처 또는 벡터를 사용하는 앱에 대한 장기 메모리 또는 기술 자료, 기초 데이터가 필요할 때마다 순수 벡터 저장소로 사용합니다.

벡터 지원에는 검색 인덱스에서 벡터 포함의 인덱싱, 저장 및 쿼리가 포함됩니다.

다음 다이어그램에서는 벡터 검색에 대한 인덱싱 및 쿼리 워크플로를 보여 줍니다.

벡터 검색 워크플로의 아키텍처.

인덱싱 쪽에서 Azure AI Search는 벡터 포함을 사용하고, 가장 가까운 인접 알고리즘을 사용하여 비슷한 벡터를 인덱스에서 가깝게 배치합니다. 내부적으로 각 벡터 필드에 대한 벡터 인덱스를 만듭니다.

원본 콘텐츠의 포함을 Azure AI 검색으로 가져오는 방법은 Azure AI 검색 인덱싱 파이프라인 내에서 작업을 수행할지 아니면 외부에서 수행할지에 따라 달라집니다. Azure AI 검색은 인덱서 파이프라인에서 통합 데이터 청크 및 벡터화를 제공합니다. 여전히 리소스(Azure OpenAI에 대한 엔드포인트 및 연결 정보)를 제공하지만 Azure AI Search는 모든 호출을 수행하고 전환을 처리합니다. 이 방식에는 인덱서, 지원되는 데이터 원본, 청크 및 포함을 구동하는 기술 세트가 필요합니다. 그렇지 않으면 모든 벡터화를 개별적으로 처리한 다음 사전 벡터화된 콘텐츠를 벡터 저장소의 벡터 필드에 푸시할 수 있습니다.

쿼리 쪽의 클라이언트 애플리케이션에서는 일반적으로 프롬프트 워크플로를 통해 사용자의 쿼리 입력을 수집합니다. 그런 다음, 입력을 벡터로 변환하는 인코딩 단계를 추가한 다음, 유사성 검색을 위해 Azure AI Search에서 인덱스에 벡터 쿼리를 보낼 수 있습니다. 인덱싱과 마찬가지로 통합 벡터화를 배포하여 질문을 벡터로 변환할 수 있습니다. 어떤 방법을 사용하든 Azure AI Search는 요청된 k 가장 가까운 인접 항목(kNN)이 있는 문서를 결과에 반환합니다.

Azure AI Search는 벡터 및 키워드 검색을 병렬로 실행함으로써 벡터 또는 키워드 검색만 사용할 경우보다 더 나은 결과를 제공하는 통합 결과 집합을 반환하는 하이브리드 시나리오를 지원합니다. 하이브리드의 경우 벡터 및 비벡터 콘텐츠는 나란히 실행되는 쿼리에 대해 동일한 인덱스로 수집됩니다.

가용성 및 가격 책정

벡터 검색은 추가 비용 없이 모든 지역의 모든 Azure AI Search 계층의 일부로 사용할 수 있습니다.

2024년 4월 3일 이후에 만들어진 최신 서비스는 더 높은 벡터 인덱스 할당량을 지원합니다.

벡터 검색은 다음에서 사용할 수 있습니다.

참고 항목

2019년 1월 1일 이전에 만들어진 일부 이전 검색 서비스는 벡터 워크로드를 지원하지 않는 인프라에 배포됩니다. 스키마에 벡터 필드를 추가하려고 할 때 오류가 발생하는 경우 이는 오래된 서비스로 인한 것입니다. 이 상황에서는 벡터 기능을 사용해 보려면 새 검색 서비스를 만들어야 합니다.

Azure AI Search는 Azure AI 플랫폼 전반에 걸쳐 긴밀하게 통합되어 있습니다. 다음 표에 벡터 워크로드에 유용한 몇 가지 서비스가 설명됩니다.

Product 통합
Azure OpenAI Studio 데이터 플레이그라운드와의 채팅에서 사용자 고유의 데이터 추가는 기초 데이터 및 대화형 검색을 위해 Azure AI Search를 사용합니다. 이것이 데이터를 사용한 채팅을 위한 가장 쉽고 빠른 방법입니다.
Azure OpenAI Azure OpenAI는 포함 모델 및 채팅 모델을 제공합니다. 데모 및 샘플은 text-embedding-ada-002를 대상으로 합니다. 텍스트에 대한 포함을 생성하기 위해 Azure OpenAI를 사용하는 것이 좋습니다.
Azure AI 서비스 이미지 검색 이미지 벡터화 API(미리 보기)는 이미지 콘텐츠의 벡터화를 지원합니다. 이미지에 대한 포함을 생성하려면 이 API를 사용하는 것이 좋습니다.
Azure 데이터 플랫폼: Azure Blob Storage, Azure Cosmos DB 인덱서를 사용하여 데이터 수집을 자동화한 다음 통합 벡터화를 사용하여 포함을 생성할 수 있습니다. Azure AI Search는 두 가지 데이터 원본인 Azure Blob 인덱서Azure Cosmos DB for NoSQL 인덱서 에서 가져온 벡터 데이터를 자동으로 인덱싱할 수 있습니다. 자세한 내용은 검색 인덱스에 벡터 필드 추가를 참조하세요.

또한 일반적으로 LangChain과 같은 오픈 소스 프레임워크에서 사용됩니다.

벡터 검색 개념

벡터를 처음 접하는 경우 이 섹션에서는 몇 가지 핵심 개념을 설명합니다.

벡터 검색은 문서와 쿼리가 일반 텍스트 대신 벡터로 표시되는 정보 검색 방법입니다. 벡터 검색에서 기계 학습 모델은 텍스트, 이미지 또는 기타 콘텐츠일 수 있는 원본 입력의 벡터 표현을 생성합니다. 콘텐츠의 수학 표현을 사용하면 검색 시나리오에 대한 공통 기반이 구현되는 것입니다. 모든 항목이 벡터인 경우 연결된 원본 콘텐츠가 쿼리와는 다른 미디어 또는 언어로 되어 있더라도 쿼리는 벡터 공간에서 일치 항목을 찾을 수 있습니다.

검색 가능한 콘텐츠가 벡터로 표시되는 경우 쿼리는 유사한 콘텐츠에서 가까운 일치 항목을 찾을 수 있습니다. 벡터 생성에 사용되는 포함 모델은 유사한 단어 및 개념을 알고 있으며, 포함 공간에 결과 벡터를 가깝게 배치합니다. 예를 들어 "clouds" 및 "fog"에 대한 벡터화된 원본 문서는 어휘 일치가 아니더라도 의미상 유사하기 때문에 "mist"에 대한 쿼리에 표시될 가능성이 더 높습니다.

포함 및 벡터화

포함은 텍스트의 의미 체계 의미나 이미지와 같은 다른 콘텐츠의 표현을 캡처하는 기계 학습 모델을 통해 만들어진 콘텐츠 또는 쿼리의 특정 형식의 벡터 표현입니다. 자연어 기계 학습 모델은 단어 간의 패턴과 관계를 식별하기 위해 대량의 데이터를 학습합니다. 학습하는 동안 인코더라는 중간 단계에서 입력을 실수의 벡터로 나타내는 방법을 알아봅니다. 학습이 완료되면 중간 벡터 표현이 모델의 출력이 되도록 이러한 언어 모델을 수정할 수 있습니다. 결과 포함은 포함 이해(Azure OpenAI)에 설명된 대로 비슷한 의미를 가진 단어를 벡터 공간에서 더 가깝게 배치하는 고차원 벡터입니다.

관련 정보를 검색할 때 벡터 검색의 효과는 문서 및 쿼리의 의미를 결과 벡터로 추출하는 작업에서 포함 모델이 미치는 효과에 따라 달라집니다. 최상의 모델은 나타내는 데이터 형식을 잘 학습시킨 모델입니다. Azure OpenAI text-embedding-ada-002와 같은 기존 모델을 평가하거나, 문제 공간에서 직접 학습시킨 고유한 모델을 가져오거나, 범용 모델을 미세 조정할 수 있습니다. Azure AI Search는 선택한 모델에 제약 조건을 적용하지 않으므로 데이터에 가장 적합한 모델을 선택합니다.

벡터 검색을 위한 효과적인 포함을 만들려면 입력 크기 제한을 고려해야 합니다. 포함을 생성하기 전에 데이터 청크에 대한 지침을 따르는 것이 좋습니다. 이 모범 사례는 포함이 관련 정보를 정확하게 캡처하고 보다 효율적인 벡터 검색을 가능하도록 합니다.

포함 공간이란?

포함 공간은 벡터 쿼리의 모음입니다. 검색 인덱스 내에서 포함 공간은 동일한 포함 모델의 포함으로 채워진 모든 벡터 필드입니다. 기계 학습 모델은 개별 단어, 구 또는 문서(자연어 처리용), 이미지 또는 기타 형태의 데이터를 고차원 공간에서 좌표를 나타내는 실수 벡터로 이루어진 표현에 매핑하여 포함 공간을 만듭니다. 이 포함 공간에는 유사한 항목이 서로 가까이 위치하고, 서로 다른 항목이 더 멀리 위치합니다.

예를 들어, 다양한 종의 개에 대해 이야기하는 문서는 포함 공간에서 가깝게 클러스터화됩니다. 고양이에 대한 문서는 함께 가깝게 배치되지만 강아지 클러스터에서는 좀 더 멀리 떨어지며, 동물에 대해 인접 항목 상태를 유지할 것입니다. 클라우드 컴퓨팅 등의 다른 개념은 훨씬 더 멀리 떨어져 있을 것입니다. 실제로 이러한 포함 공간은 추상적이며, 인간이 해석할 수 있는 잘 정의된 의미는 없지만 핵심 아이디어는 동일하게 유지됩니다.

벡터 검색에서 검색 엔진은 포함 공간 내의 벡터를 검색하여 쿼리 벡터에서 가장 가까운 벡터를 식별합니다. 이 기술을 가장 인접한 항목 검색이라고 합니다. 가장 인접한 항목은 항목 간의 유사성을 정량화하는 데 도움이 됩니다. 높은 수준의 벡터 유사성은 원래 데이터도 비슷하다는 것을 나타냅니다. 가장 인접한 항목 검색을 용이하게 하기 위해 검색 엔진은 최적화를 수행하거나 데이터 구조 및 데이터 분할을 사용하여 검색 공간을 줄입니다. 각 벡터 검색 알고리즘은 최소 대기 시간, 최대 처리량, 재현율 및 메모리에 대해 최적화할 때 다양한 방법으로 가장 인접한 항목 문제를 해결합니다. 유사성을 계산하기 위해 유사성 메트릭은 거리를 계산하는 메커니즘을 제공합니다.

Azure AI Search는 현재 다음 알고리즘을 지원합니다.

  • HNSW(Hierarchical Navigable Small World): HNSW는 데이터 분포를 알 수 없거나 자주 변경될 수 있는 경우 재현율이 높고 대기 시간이 낮은 애플리케이션에 최적화된 업계 최고의 ANN 알고리즘입니다. 고차원 데이터 요소를 계층 구조 그래프 구조로 구성하여 빠르고 스케일링 가능한 유사성 검색을 가능하게 하면서, 검색 정확도와 컴퓨팅 비용 간의 절충안을 조정할 수 있습니다. 이 알고리즘에는 빠른 임의 액세스를 위해 모든 데이터 요소가 메모리에 있어야 하므로 벡터 인덱스 크기 할당량을 사용합니다.

  • 전체 KNN(K-가장 인접한 항목): 쿼리 벡터와 모든 데이터 요소 사이의 거리를 계산합니다. 컴퓨팅 집약적이므로 더 작은 데이터 세트에 가장 적합합니다. 이 알고리즘은 데이터 요소에 빠르게 임의로 액세스할 필요가 없으므로 벡터 인덱스 크기 할당량을 소비하지 않습니다. 그러나 이 알고리즘은 가장 인접한 항목의 전역 세트를 제공합니다.

이러한 알고리즘을 사용하려면 알고리즘, 벡터 프로필 및 프로필 할당 지정에 대한 지침은 벡터 필드 만들기를 참조하세요.

인덱스 생성 중에 인덱스 초기화하는 데 사용되는 알고리즘 매개 변수는 변경 불가능하며 인덱스가 빌드된 후에는 변경할 수 없습니다. 그러나 쿼리 타임 특성(efSearch)에 영향을 주는 매개 변수는 수정할 수 있습니다.

또한 HNSW 알고리즘을 지정하는 필드는 쿼리 요청 매개 변수 "exhaustive": true를 사용하여 전체 KNN 검색을 지원합니다. 그러나 그 반대의 경우는 그렇지 않습니다. 필드가 exhaustiveKnn에 대해 인덱싱된 경우 효율적인 검색을 가능하게 하는 추가 데이터 구조가 없으므로 쿼리에서 HNSW를 사용할 수 없습니다.

Approximate Nearest Neighbor

ANN(Approximate Nearest Neighbor) 검색은 벡터 공간에서 일치하는 항목을 찾는 알고리즘 클래스입니다. 이 알고리즘 클래스는 다양한 데이터 구조 또는 데이터 분할 방법을 사용하여 검색 공간을 크게 줄임으로써 쿼리 처리를 가속화합니다.

ANN 알고리즘은 정확도를 다소 저하시키지만 근사한 인접 항목에 대해 스케일링 가능한 더 빠른 검색을 제공하여 최신 정보 검색 애플리케이션의 효율성과 정확도의 균형을 맞추는 데 이상적입니다. 알고리즘의 매개 변수를 조정하여 검색 애플리케이션의 재현율, 대기 시간, 메모리 및 디스크 공간 요구 사항을 미세 조정할 수 있습니다.

Azure AI Search는 ANN 알고리즘에 HNSW를 사용합니다.

다음 단계