양자화, 좁은 데이터 형식 및 스토리지 옵션을 통해 벡터 크기 줄이기

이 문서에서는 벡터 양자화 및 기타 기술을 사용하여 Azure AI 검색에서 벡터 크기를 줄이는 방법에 대해 설명합니다. 검색 인덱스는 좁은 데이터 형식을 지정하거나 검색 결과를 위해 벡터 콘텐츠의 복사본이 보존되는지 여부를 제어하는 데 사용되는 속성을 포함하여 벡터 필드 정의를 지정합니다. 인덱스에는 양자화도 지정되며 벡터 프로필을 통해 양자화가 벡터 필드에 할당됩니다.

이 문서에 설명된 대부분의 기능은 2024-07-01 REST API 및 해당 버전을 대상으로 하는 Azure SDK 패키지에서 일반적으로 사용할 수 있습니다. 최신 미리 보기 버전은 벡터화에 텍스트 포함-3-large 또는 text-embedding-3-small을 사용하는 경우 잘린 차원에 대한 지원을 추가합니다.

이 문서의 끝부분에 있는 예제에서는 이 문서에 설명된 각 접근 방식에 대한 벡터 크기의 변형을 보여 줍니다.

옵션 평가

첫 번째 단계로, 벡터 필드에 사용되는 스토리지를 줄이기 위한 세 가지 접근 방식을 검토합니다. 이러한 접근 방식은 상호 배타적이지 않으며 벡터 크기를 최대로 줄이기 위해 결합할 수 있습니다.

기본 제공 양자화는 최소한의 활동으로 메모리와 디스크의 벡터 크기를 압축하고 대부분의 시나리오에서 가장 큰 이점을 제공하는 경향이 있으므로 권장됩니다. 대조적으로, 좁은 형식(float16 제외)은 이를 만드는데 특별한 활동이 필요하며, stored는 메모리만큼 비싸지 않은 디스크 스토리지를 절약합니다.

접근법 옵션 사용 이유
스칼라 또는 이진 양자화 추가 양자화를 사용하여 네이티브 float32 또는 float16 임베딩을 int8(스칼라) 또는 Byte(이진)로 압축합니다. 이 옵션은 쿼리 성능 저하 없이 메모리 및 디스크의 스토리지를 줄입니다. int8 또는 Byte와 같은 더 작은 데이터 형식은 임베딩이 큰 데이터 형식을 사용하는 것보다 콘텐츠가 덜 풍부한 벡터 인덱스를 생성합니다. 정보 손실을 상쇄하기 위해 기본 제공 압축에는 압축되지 않은 포함 및 오버샘플링을 사용하여 보다 관련성이 높은 결과를 반환하는 쿼리 후 처리 옵션이 포함되어 있습니다. 순위 재지정 및 과다 샘플링은 float32 또는 float16 필드의 기본 제공 양자화에 특정된 기능이며 사용자 지정 양자화를 수행하는 임베딩에는 사용할 수 없습니다.
MRL 지원 텍스트 포함-3 모델의 차원 자르기(미리 보기) 텍스트 포함-3 모델에서 더 적은 차원을 사용하는 옵션을 연습합니다. Azure OpenAI에서 이러한 모델은 다양한 수준의 압축에서 여러 벡터 표현을 생성하는 MRL(Matryoshka Representation Learning) 기술을 다시 학습했습니다. 이 방법은 의미 체계 정보의 손실을 최소화하면서 더 빠른 검색 및 스토리지 비용을 절감합니다. Azure AI Search에서 MRL은 스칼라 및 이진 양자화를 보완합니다. 두 양자화 방법 중 하나를 truncateDimension 사용하는 경우 벡터 필드에 속성을 지정하여 텍스트 포함의 차원을 줄일 수도 있습니다.
벡터 필드에 더 작은 기본 데이터 형식 할당 float16, int16, int8 및 Byte(이진)와 같은 좁은 데이터 형식은 메모리와 디스크에서 더 적은 공간을 사용하지만 좁은 데이터 서식으로 벡터를 출력하는 포함 모델이 있어야 합니다. 또는 작은 데이터를 출력하는 사용자 지정 양자화 논리가 있어야 합니다. 더 적은 활동이 필요한 세 번째 사용 사례는 대부분의 모델에서 생성된 네이티브 float32 임베딩을 float16으로 다시 캐스팅하는 것입니다. 이진 파일 벡터에 대한 자세한 내용은 인덱스 이진 파일 벡터를 참조하세요.
선택적 검색 가능 벡터 스토리지 제거 쿼리 응답에서 반환되는 벡터는 쿼리 실행 중에 사용되는 벡터와 별도로 저장됩니다. 벡터를 반환할 필요가 없는 경우 검색 가능 디스크 스토리지를 비활성화하여 전체 필드별 스토리지를 최대 50%까지 줄일 수 있습니다.

이러한 옵션 모두는 빈 인덱스로 정의됩니다. 이들 중 하나를 구현하려면 Azure Portal, REST API 또는 해당 API 버전을 대상으로 하는 Azure SDK 패키지를 사용하세요.

인덱스가 정의되면 문서를 별도의 단계로 로드하고 인덱싱할 수 있습니다.

옵션 1: 양자화 구성

양자화는 float16 및 float32 임베딩에 대한 메모리 및 디스크 스토리지 요구 사항을 모두 낮추므로 벡터 크기를 줄이는 데 권장됩니다. 더 작은 인덱스의 효과를 상쇄하기 위해 압축되지 않은 벡터 위에 과다 샘플링 및 순위 재지정을 추가할 수 있습니다.

양자화는 부동 형식 벡터를 수신하는 벡터 필드에 적용됩니다. 이 문서의 예제에서 필드의 데이터 형식은 들어오는 float32 임베딩의 경우 Collection(Edm.Single)이지만 float16도 지원됩니다. 압축이 구성된 필드에서 벡터를 수신하면 엔진은 자동으로 양자화를 수행하여 메모리 및 디스크에서 벡터 데이터의 공간을 줄입니다.

다음과 같은 두 가지 유형의 양자화가 지원됩니다.

  • 스칼라 양자화는 부동 소수 자릿수 값을 더 좁은 데이터 형식으로 압축합니다. AI 검색은 현재 8비트인 int8을 지원하여 벡터 인덱스 크기를 4분의 1로 줄입니다.

  • 이진 양자화는 부동 소수를 1비트를 차지하는 이진 비트로 변환합니다. 이에 따라 벡터 인덱스 크기가 최대 28분의 1로 감소합니다.

기본 제공 양자화를 사용하려면 다음 단계를 수행합니다.

  • 인덱스 만들기 또는 인덱스 만들기 또는 업데이트를 사용하여 벡터 압축을 지정합니다.
  • 검색 인덱스에 vectorSearch.compressions를 추가합니다.
  • scalarQuantization 또는 binaryQuantization 구성을 추가하고 이름을 지정합니다.
  • 선택적 속성을 설정하여 손실 인덱싱의 영향을 완화합니다.
  • 명명된 구성을 사용하는 새 벡터 프로필을 만듭니다.
  • 새 벡터 프로필이 있는 새 벡터 필드를 만듭니다.
  • 정의한 구성을 사용하여 인덱싱하는 동안 양자화된 float32 또는 float16 데이터를 사용하여 인덱스를 로드합니다.
  • 필요에 따라 기본값을 재정의하려는 경우 과다 샘플링 매개 변수를 사용하여 양자화된 데이터를 쿼리합니다.

검색 인덱스에 "압축" 추가

다음 예제에서는 벡터 필드 및 vectorSearch.compressions 섹션을 포함하는 필드 컬렉션이 있는 부분 인덱스 정의를 보여 줍니다.

이 예제에는 scalarQuantizationbinaryQuantization가 모두 포함됩니다. 필요한 만큼 압축 구성을 지정한 다음 원하는 구성을 벡터 프로필에 할당할 수 있습니다.

POST https://[servicename].search.windows.net/indexes?api-version=2024-07-01

{
  "name": "my-index",
  "fields": [
    { "name": "Id", "type": "Edm.String", "key": true, "retrievable": true, "searchable": true, "filterable": true },
    { "name": "content", "type": "Edm.String", "retrievable": true, "searchable": true },
    { "name": "vectorContent", "type": "Collection(Edm.Single)", "retrievable": false, "searchable": true, "dimensions": 1536,"vectorSearchProfile": "vector-profile-1"},
  ],
  "vectorSearch": {
        "profiles": [ ],
        "algorithms": [ ],
        "compressions": [
          {
            "name": "use-scalar",
            "kind": "scalarQuantization",
            "scalarQuantizationParameters": {
              "quantizedDataType": "int8"
            },
            "rerankWithOriginalVectors": true,
            "defaultOversampling": 10
          },
          {
            "name": "use-binary",
            "kind": "binaryQuantization",
            "rerankWithOriginalVectors": true,
            "defaultOversampling": 10
          }
        ]
    }
}

주요 정보:

  • kindscalarQuantization 또는 binaryQuantization으로 설정해야 합니다.

  • rerankWithOriginalVectors는 원래의 압축되지 않은 벡터를 사용하여 유사성을 다시 계산하고 초기 검색 쿼리에서 반환된 상위 결과의 순위를 다시 지정합니다. 압축되지 않은 벡터는 stored가 false인 경우에도 검색 인덱스에 존재합니다. 이 속성은 선택 사항입니다. 기본값은 true입니다.

  • defaultOversampling은 양자화로 인한 정보 감소를 상쇄하기 위해 더 광범위한 잠재적 결과 집합을 고려합니다. 잠재적 결과에 대한 수식은 오버샘플링 승수와 함께 쿼리의 k로 구성됩니다. 예를 들어 쿼리에서 k를 5로 지정하고 오버샘플링이 20인 경우 쿼리는 해당 목적으로 압축되지 않은 원래 벡터를 사용하여 순위 재지정에 사용할 문서 100개를 효과적으로 요청합니다. 상위 k개의 순위 변경 결과만 반환됩니다. 이 속성은 선택 사항입니다. 기본값은 4입니다.

  • quantizedDataType은 선택 사항이며 스칼라 양자화에만 적용됩니다. 추가하는 경우 int8로 설정해야 합니다. 현재 스칼라 양자화에 지원되는 유일한 기본 데이터 형식입니다. 기본값은 int8입니다.

HNSW 알고리즘 추가

인덱스에 HNSW(Hierarchical Navigable Small Worlds) 알고리즘이 있는지 확인합니다. 기본 제공 양자화는 전체(Exhaustive) KNN에서 지원되지 않습니다.

"vectorSearch": {
    "profiles": [ ],
    "algorithms": [
      {
          "name": "use-hnsw",
          "kind": "hnsw",
          "hnswParameters": {
              "m": 4,
              "efConstruction": 400,
              "efSearch": 500,
              "metric": "cosine"
          }
      }
    ],
     "compressions": [ <see previous section>] 
}

새 벡터 프로필 만들기 및 할당

새 양자화 구성을 사용하려면 벡터 프로필을 만들어야 합니다. 메모리에 압축된 인덱스를 작성하려면 새 벡터 프로필을 만들어야 합니다. 새 프로필은 HNSW를 사용합니다.

  1. 동일한 인덱스 정의에서 새 벡터 프로필을 만들고 압축 속성과 알고리즘을 추가합니다. 다음은 각 양자화 접근 방식에 해당하는 두 개의 프로필입니다.

    "vectorSearch": {
        "profiles": [
           {
              "name": "vector-profile-hnsw-scalar",
              "compression": "use-scalar", 
              "algorithm": "use-hnsw",
              "vectorizer": null
           },
           {
              "name": "vector-profile-hnsw-binary",
              "compression": "use-binary", 
              "algorithm": "use-hnsw",
              "vectorizer": null
           }
         ],
         "algorithms": [  <see previous section> ],
         "compressions": [ <see previous section> ] 
    }
    
  2. 벡터 필드에 벡터 프로필을 할당합니다. 필드의 데이터 형식은 float32 또는 float16입니다.

    Azure AI 검색에서 float32 및 float16 형식에 해당하는 EDM(엔터티 데이터 모델)은 각각 Collection(Edm.Single)Collection(Edm.Half)입니다.

    {
       "name": "vectorContent",
       "type": "Collection(Edm.Single)",
       "searchable": true,
       "retrievable": true,
       "dimensions": 1536,
       "vectorSearchProfile": "vector-profile-hnsw-scalar",
    }
    
  3. 풀 모델 인덱싱에 인덱서를 사용하거나 푸시 모델 인덱싱에 API를 사용하여 인덱스를 로드합니다.

스칼라 양자화는 각 벡터 포함 내 각 숫자의 해상도를 줄입니다. 각 숫자를 16비트 또는 32비트 부동 소수점 숫자로 표현하는 대신 8비트 정수를 사용합니다. 숫자 범위(일반적으로 99번째 백분위수 최소값 및 최대값)를 식별하고 유한한 수의 수준 또는 계급구간(bin)으로 나누어 각 계급구간에 식별자를 할당합니다. 8비트 스칼라 양자화에는 2^8, 즉 256개의 가능한 계급구간이 있습니다.

벡터의 각 구성 요소는 실수를 가장 가까운 정수로 반올림하는 것과 유사한 프로세스에서 이 양자화 수준 집합 내에서 가장 가까운 대표값에 매핑됩니다. 양자화된 8비트 벡터에서는 원래 값 대신 식별자 번호가 사용됩니다. 양자화 후 각 벡터는 해당 구성 요소가 속한 계급구간에 대한 식별자 배열로 표시됩니다. 이러한 양자화된 벡터는 원래 벡터에 비해 저장해야 하는 비트가 훨씬 적기 때문에 스토리지 요구 사항과 메모리 공간이 줄어듭니다.

이진 양자화는 각 구성 요소를 단일 비트(0 또는 1)로 표시하여 고차원 벡터를 압축합니다. 이 메서드는 메모리 공간을 크게 줄이고 검색 및 검색 작업에 중요한 벡터 비교 작업을 가속화합니다. 벤치마크 테스트 결과 벡터 인덱스 크기가 최대 96% 감소하는 것으로 나타났습니다.

1,024보다 큰 규모의 임베딩에 특히 효과적입니다. 더 작은 규모의 경우 이진 양자화의 품질을 테스트하거나 대신 스칼라를 시도하는 것이 좋습니다. 또한 임베딩이 0을 중심으로 이루어질 때 BQ가 매우 잘 수행된다는 점을 확인했습니다. OpenAI, Cohere 및 Mistral과 같은 인기 있는 임베딩 모델은 0을 중심으로 합니다.

MRL 압축 및 잘린 차원 사용(미리 보기)

MRL 다단계 압축은 벡터 스토리지를 저장하고 텍스트 포함을 기반으로 벡터 쿼리에 대한 쿼리 응답 시간을 향상시킵니다. Azure AI Search에서 MRL 지원은 다른 정량화 방법과 함께만 제공됩니다. MRL과 함께 이진 양자화를 사용하면 최대 벡터 인덱스 크기가 감소합니다. 최대 스토리지 감소를 달성하려면 MRL stored 과 함께 이진 양자화를 사용하고 false로 설정합니다.

이 기능은 프리뷰로 제공됩니다. 해당 미리 보기 API 버전을 대상으로 하는 베타 SDK 패키지 및 베타에서 사용할 수 있습니다 2024-09-01-preview .

요구 사항

  • Text-embedding-3-small, Text-embedding-3-large(텍스트 콘텐츠에만 해당).
  • 형식 Edm.Half 의 새 벡터 필드이거나 Edm.Single (기존 필드에 MRL 압축을 추가할 수 없음)
  • HNSW 알고리즘 (이 미리 보기에서는 철저한 KNN을 지원하지 않음).
  • 스칼라 또는 이진 양자화를 구성합니다. 이진 양자화를 사용하는 것이 좋습니다.

지원되는 클라이언트

현재 Azure Portal 또는 Azure AI Studio 지원은 없습니다.

MRL 확장 텍스트 포함을 사용하는 방법

MRL은 textembedding 모델의 기능입니다. Azure AI Search에서 이러한 기능을 활용하려면 다음 단계를 수행합니다.

  1. 인덱스 정의에 개체를 vectorSearch.compressions 지정합니다.
  2. 스칼라 또는 이진(권장)의 양자화 메서드를 포함합니다.
  3. truncationDimension 512로 설정된 매개 변수를 포함하거나 텍스트 포함-3 대용량 모델을 사용하는 경우 256으로 낮습니다.
  4. HNSW 알고리즘 및 벡터 압축 개체를 지정하는 벡터 프로필을 지정합니다.
  5. 형식 Edm.Half 의 벡터 필드 또는 Edm.Single 필드 컬렉션에 벡터 프로필을 할당합니다.

MRL 지원 텍스트 포함 모델을 사용하기 위한 쿼리 쪽 수정은 없습니다. 통합 벡터화, 쿼리 시 텍스트-쿼리 변환, 의미 체계 순위 및 원래 벡터로 재전송 및 오버샘플링과 같은 기타 관련성 향상 기능은 MRL 지원의 영향을 받지 않습니다.

추가 단계로 인해 인덱싱 속도가 느려지지만 쿼리는 더 빠릅니다.

MRL을 지원하는 벡터 검색 구성의 예

다음 예제에서는 MRL의 요구 사항 및 권장 사항을 충족하는 벡터 검색 구성을 보여 줍니다.

truncationDimension 는 압축 속성입니다. 스칼라 또는 이진 압축과 같은 압축 방법과 함께 메모리의 벡터 그래프를 축소할 크기를 지정합니다. 이진 정량화의 경우 truncationDimension 1,024개 이상을 사용하는 것이 좋습니다. 1,000 미만의 차원은 MRL 및 이진 압축을 사용할 때 검색 결과의 품질을 저하합니다.

{ 
  "vectorSearch": { 
    "profiles": [ 
      { 
        "name": "use-bq-with-mrl", 
        "compression": "use-mrl,use-bq", 
        "algorithm": "use-hnsw" 
      } 
    ],
    "algorithms": [
       {
          "name": "use-hnsw",
          "kind": "hnsw",
          "hnswParameters": {
             "m": 4,
             "efConstruction": 400,
             "efSearch": 500,
             "metric": "cosine"
          }
       }
    ],
    "compressions": [ 
      { 
        "name": "use-mrl", 
        "kind": "truncation", 
        "rerankWithOriginalVectors": true, 
        "defaultOversampling": 10, 
        "truncationDimension": 1024
      }, 
      { 
        "name": "use-bq", 
        "kind": "binaryQuantization", 
        "rerankWithOriginalVectors": true,
        "defaultOversampling": 10
       } 
    ] 
  } 
} 

다음은 MRL에 대한 요구 사항을 충족하는 완전히 지정된 벡터 필드 정의 의 예입니다.

벡터 필드는 형식 Edm.Half 이거나 Edm.Single. 벡터 필드에는 vectorSearchProfile 알고리즘 및 압축 설정을 결정하는 속성이 있어야 합니다. 벡터 필드에는 dimensions 점수 매기기 및 순위 결과에 대한 차원 수를 지정하는 데 사용되는 속성이 있습니다. 해당 값은 사용 중인 모델의 차원 제한이어야 합니다(텍스트 포함-3-small의 경우 1,536).

{
    "name": "text_vector",
    "type": "Collection(Edm.Single)",
    "searchable": true,
    "filterable": false,
    "retrievable": false,
    "stored": false,
    "sortable": false,
    "facetable": false,
    "key": false,
    "indexAnalyzer": null,
    "searchAnalyzer": null,
    "analyzer": null,
    "normalizer": null,
    "dimensions": 1536,
    "vectorSearchProfile": "use-bq-with-mrl",
    "vectorEncoding": null,
    "synonymMaps": []
}

옵션 2: 벡터 필드에 좁은 데이터 형식 할당

벡터 크기를 쉽게 줄이는 방법은 임베딩을 더 작은 데이터 서식으로 저장하는 것입니다. 대부분의 임베딩 모델은 32비트 부동 소수점 수를 출력하지만 벡터를 양자화하거나 임베딩 모델이 기본적으로 지원하는 경우 출력은 float16, int16 또는 int8일 수 있으며 float32보다 훨씬 작습니다. 좁은 데이터 형식을 벡터 필드에 할당하여 이러한 더 작은 벡터 크기를 수용할 수 있습니다. 벡터 인덱스에서 좁은 데이터 형식은 스토리지를 적게 사용합니다.

  1. 권장 사용량은 벡터 필드에 사용되는 데이터 형식을 검토합니다.

    • Collection(Edm.Single) 32비트 부동 소수점(기본값)
    • Collection(Edm.Half) 16비트 부동 소수점(좁은 형식)
    • Collection(Edm.Int16) 16비트 부호 있는 정수(좁은 형식)
    • Collection(Edm.SByte) 8비트 부호 있는 정수(좁은 형식)
    • Collection(Edm.Byte) 8비트 부호 없는 정수(압축된 이진 데이터 형식에서만 허용)
  2. 해당 목록에서 임베딩 모델의 출력 또는 사용자 지정 양자화를 거치는 벡터에 유효한 데이터 형식을 결정합니다.

    다음 표에서 추가 양자화 없이 좁은 데이터 형식(Collection(Edm.Half))을 사용할 수 있는 여러 임베딩 모델의 링크를 확인할 수 있습니다. 추가 작업 없이 float32에서 float16(사용 Collection(Edm.Half))으로 캐스팅할 수 있습니다.

    포함 모델 네이티브 출력 Azure AI 검색에서 이 형식 할당
    text-embedding-ada-002 Float32 Collection(Edm.Single) 또는 Collection(Edm.Half)
    text-embedding-3-small Float32 Collection(Edm.Single) 또는 Collection(Edm.Half)
    text-embedding-3-large Float32 Collection(Edm.Single) 또는 Collection(Edm.Half)
    int8 embedding_type을 사용하는 Cohere V3 포함 모델 Int8 Collection(Edm.SByte)

    모델이 더 작은 데이터 서식으로 임베딩을 내보내거나 벡터를 더 작은 형식으로 변환하는 사용자 지정 양자화가 있는 경우 다른 좁은 데이터 형식을 사용할 수 있습니다.

  3. 좁은 데이터 형식의 장단점을 이해해야 합니다. Collection(Edm.Half)은 정보가 더 적으므로 해상도가 낮습니다. 같은 유형의 데이터이거나 밀집 데이터인 경우 추가 세부 정보나 미묘한 차이가 손실되면 인접 벡터를 구별하는 데 사용할 수 있는 세부 정보가 적기 때문에 쿼리 시 허용할 수 없는 결과가 발생할 수 있습니다.

  4. 인덱스를 정의하고 작성합니다. 이 단계에서는 Azure Portal, 인덱스 만들기 또는 업데이트(REST API) 또는 Azure SDK 패키지를 사용할 수 있습니다.

  5. 결과를 확인합니다. 벡터 필드가 검색 가능한 것으로 표시되어 있다고 가정하고 검색 탐색기 또는 검색 - POST를 사용하여 필드 콘텐츠가 데이터 형식과 일치하는지 확인합니다.

    벡터 인덱스 크기를 확인하려면 Azure Portal 또는 통계 가져오기(REST API)를 사용합니다.

참고 항목

필드의 데이터 형식은 실제 데이터 구조를 만드는 데 사용됩니다. 나중에 데이터 형식을 변경하려면 인덱스를 삭제 후 다시 작성하거나 새 정의로 두 번째 필드를 만듭니다.

옵션 3: 검색 가능 스토리지를 제거하도록 stored 속성 설정

stored 속성은 검색 가능 벡터 필드 콘텐츠에 스토리지가 할당되는지 여부를 결정하는 벡터 필드 정의의 부울입니다. stored 속성의 기본값은 True입니다. 쿼리 응답에 벡터 콘텐츠가 필요하지 않은 경우 stored를 false로 설정하여 필드당 최대 50%의 스토리지를 절약할 수 있습니다.

stored을(를) false로 설정하기 위한 고려 사항:

  • 벡터는 사람이 읽을 수 없으므로 RAG 시나리오에서 LLM으로 전송된 결과와 검색 페이지에서 렌더링된 결과에서 생략할 수 있습니다. 그러나 벡터 콘텐츠를 사용하는 다운스트림 프로세스에서 벡터를 사용하는 경우 유지합니다.

  • 그러나 인덱싱 전략에 문서의 "merge" 또는 "mergeOrUpload"와 같은 부분 문서 업데이트가 포함된 경우 stored을(를) false로 설정하면 병합 중에 저장되지 않은 필드의 벡터가 생략됩니다. 각 "merge" 또는 "mergeOrUpload" 작업에서 업데이트 중인 다른 비벡터 필드 외에도 벡터 필드를 제공해야 합니다. 그렇지 않으면 벡터가 삭제됩니다.

stored 특성은 되돌릴 수 없습니다. 실제 데이터 구조를 만들 때 벡터 필드에서 인덱스 생성 중에 설정됩니다. 나중에 검색 가능 벡터 콘텐츠를 원하는 경우 인덱스를 삭제하고 다시 작성하거나 새 특성이 있는 새 필드를 만들고 로드해야 합니다.

다음 예에서는 검색 인덱스의 필드 컬렉션을 보여줍니다. 벡터 필드에 대해 검색 가능 스토리지를 영구적으로 제거하려면 stored를 false로 설정합니다.

PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2024-07-01 
   Content-Type: application/json  
   api-key: [admin key]  
 
     { 
       "name": "demo-index", 
       "fields": [ 
         { 
           "name": "vectorContent", 
           "type": "Collection(Edm.Single)", 
           "retrievable": false, 
           "stored": false, 
           "dimensions": 1536, 
           "vectorSearchProfile": "vectorProfile" 
         } 
       ] 
     } 

주요 정보:

  • 벡터 필드에만 적용됩니다.

  • 메모리가 아닌 디스크의 스토리지에 영향을 미치며 쿼리에는 영향을 주지 않습니다. 쿼리 실행은 stored 속성의 영향을 받지 않는 별도의 벡터 인덱스를 사용합니다.

  • stored 속성은 벡터 필드에서 인덱스를 만드는 동안 설정되며 되돌릴 수 없습니다. 나중에 검색 가능 콘텐츠를 원하는 경우 인덱스를 삭제하고 다시 작성하거나 새 특성이 있는 새 필드를 만들고 로드해야 합니다.

  • 기본값 설정은 stored가 true, retrievable이 false입니다. 기본 구성에서는 검색 가능 복사본이 저장되지만 결과에 자동으로 반환되지는 않습니다. stored가 true이면 인덱스를 다시 작성하지 않고도 언제든지 retrievable을 true 및 false로 전환할 수 있습니다. stored가 false인 경우 retrievable이 false여야 하며 변경할 수 없습니다.

예: 벡터 압축 기술

다음은 저장된 속성의 양자화, 좁은 데이터 형식 및 사용을 보여 주는 Python 코드입니다. 코드 샘플: Python을 사용한 벡터 양자화 및 스토리지 옵션

이 코드는 각 옵션에 대한 스토리지 및 벡터 인덱스 크기를 만들고 비교합니다.

****************************************
Index Name: compressiontest-baseline
Storage Size: 21.3613MB
Vector Size: 4.8277MB
****************************************
Index Name: compressiontest-compression
Storage Size: 17.7604MB
Vector Size: 1.2242MB
****************************************
Index Name: compressiontest-narrow
Storage Size: 16.5567MB
Vector Size: 2.4254MB
****************************************
Index Name: compressiontest-no-stored
Storage Size: 10.9224MB
Vector Size: 4.8277MB
****************************************
Index Name: compressiontest-all-options
Storage Size: 4.9192MB
Vector Size: 1.2242MB

검색 API는 인덱스 수준에서 스토리지 및 벡터 크기를 보고하므로 필드가 아닌 인덱스가 비교 기준이 되어야 합니다. Azure SDK에서 인덱스 통계 가져오기 또는 해당 API를 사용하여 벡터 크기를 가져옵니다.

오버샘플링을 사용하여 양자화된 벡터 필드 쿼리

기존 벡터로 과다 샘플링 또는 순위 재지정과 관련된 매개 변수를 재정의하려는 경우가 아니면 압축되거나 양자화된 벡터 필드에 대한 쿼리 구문은 압축되지 않은 벡터 필드에 대한 쿼리 구문과 동일합니다.

인덱스의 벡터 압축 정의 에는 더 작은 벡터 인덱스의 영향을 완화하기 위한 rerankWithOriginalVectorsdefaultOversampling 설정이 있습니다. 기본값을 재정의하여 쿼리 시 동작을 변경할 수 있습니다. 예를 들어 defaultOversampling이 10.0인 경우 쿼리 요청에서 다르게 변경할 수 있습니다.

인덱스에 명시적인 rerankWithOriginalVectors 또는 defaultOversampling 정의가 없더라도 오버샘플링 매개 변수를 설정할 수 있습니다. 쿼리 시 oversampling을 제공하면 해당 쿼리에 대한 인덱스 설정이 재정의되고 유효한 rerankWithOriginalVectors가 true로 설정된 쿼리가 실행됩니다.

POST https://[service-name].search.windows.net/indexes/demo-index/docs/search?api-version=2024-07-01   
  Content-Type: application/json   
  api-key: [admin key]   

    {    
       "vectorQueries": [
            {    
                "kind": "vector",    
                "vector": [8, 2, 3, 4, 3, 5, 2, 1],    
                "fields": "myvector",
                "oversampling": 12.0,
                "k": 5   
            }
      ]    
    }

주요 정보:

  • 벡터 프로필 할당에 따라 벡터 압축을 거치는 벡터 필드에 적용됩니다.

  • 인덱스의 압축 구성에서 오버샘플링 또는 순위 재지정 옵션을 지정하지 않은 경우에도 쿼리 시 defaultOversampling 값을 재정의하거나 오버샘플링을 도입합니다.

참고 항목