다음을 통해 공유


Azure AI Search의 다중 벡터 필드 지원

비고

이 기능은 현재 공개 미리 보기로 제공됩니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

Azure AI Search의 다중 벡터 필드 지원 기능을 사용하면 단일 문서 필드 내에서 여러 자식 벡터를 인덱싱할 수 있습니다. 이 기능은 다중 모드 데이터 또는 긴 형식 문서와 같은 사용 사례에 유용하며, 단일 벡터로 콘텐츠를 표시하면 중요한 세부 정보가 손실됩니다.

제한점

  • 의미 순위는 복잡한 필드 내의 중첩된 청크에 대해 지원되지 않습니다. 따라서 의미 체계 순위는 다중 벡터 필드에서 중첩된 벡터를 지원하지 않습니다.

다중 벡터 필드 지원 이해

일반적으로 벡터 형식은 예를 들어 Collection(Edm.Single) 최상위 필드에서만 사용할 수 있습니다. 다중 벡터 필드 지원이 도입되면서 복합 컬렉션의 중첩 필드에 벡터 형식을 사용하면 여러 벡터를 단일 문서에 효과적으로 연결할 수 있습니다.

단일 문서에는 모든 복합 컬렉션 필드에 대해 총 100개의 벡터가 포함될 수 있습니다. 벡터 필드는 한 수준 깊이만 중첩할 수 있습니다.

다중 벡터 필드가 있는 인덱스 정의

이 기능에는 새 인덱스 속성이 필요하지 않습니다. 다음은 샘플 인덱스 정의입니다.

{
  "name": "multivector-index",
  "fields": [
    {
      "name": "id",
      "type": "Edm.String",
      "key": true,
      "searchable": true
    },
    {
      "name": "title",
      "type": "Edm.String",
      "searchable": true
    },
    {
      "name": "description",
      "type": "Edm.String",
      "searchable": true
    },
    {
      "name": "descriptionEmbedding",
      "type": "Collection(Edm.Single)",
      "dimensions": 3,
      "searchable": true,
      "retrievable": true,
      "vectorSearchProfile": "hnsw"
    },
    {
      "name": "scenes",
      "type": "Collection(Edm.ComplexType)",
      "fields": [
        {
          "name": "embedding",
          "type": "Collection(Edm.Single)",
          "dimensions": 3,
          "searchable": true,
          "retrievable": true,
          "vectorSearchProfile": "hnsw"
        },
        {
          "name": "timestamp",
          "type": "Edm.Int32",
          "retrievable": true
        },
        {
          "name": "description",
          "type": "Edm.String",
          "searchable": true,
          "retrievable": true
        },
        {
          "name": "framePath",
          "type": "Edm.String",
          "retrievable": true
        }
      ]
    }
  ]
}

샘플 수집 문서

다음은 실제로 다중 벡터 필드를 사용하는 방법을 보여 주는 샘플 문서입니다.

{
  "id": "123",
  "title": "Non-Existent Movie",
  "description": "A fictional movie for demonstration purposes.",
  "descriptionEmbedding": [1, 2, 3],
  "releaseDate": "2025-08-01",
  "scenes": [
    {
      "embedding": [4, 5, 6],
      "timestamp": 120,
      "description": "A character is introduced.",
      "framePath": "nonexistentmovie\\scenes\\scene120.png"
    },
    {
      "embedding": [7, 8, 9],
      "timestamp": 2400,
      "description": "The climax of the movie.",
      "framePath": "nonexistentmovie\\scenes\\scene2400.png"
    }
  ]
}

이 예제에서 장면 필드는 연결된 다른 데이터와 함께 여러 벡터(포함 필드)를 포함하는 복합 컬렉션입니다. 각 벡터는 영화의 장면을 나타내며, 다른 잠재적 사용 사례 중에서도 다른 영화에서 비슷한 장면을 찾는 데 사용할 수 있습니다.

다중 벡터 필드 지원을 사용하여 쿼리

다중 벡터 필드 지원 기능은 Azure AI Search의 쿼리 메커니즘을 약간 변경합니다. 그러나 기본 쿼리 프로세스는 거의 동일하게 유지됩니다. vectorQueries 이전에는 최상위 인덱스 필드로 정의된 벡터 필드만 대상으로 지정할 수 있습니다. 이 기능을 사용하면 이 제한을 완화하고 벡터 쿼리가 복합 형식 컬렉션(최대 한 수준 깊이) 내에 중첩된 필드를 대상으로 지정할 수 있습니다. 또한 새 쿼리 시간 매개 변수를 사용할 수 있습니다 perDocumentVectorLimit.

  • perDocumentVectorLimit1로 설정하여 각 문서당 최대 하나의 벡터만 일치하도록 보장하여, 결과가 서로 다른 문서에서 나오도록 합니다.
  • perDocumentVectorLimit0 (무제한)으로 설정하면 동일한 문서의 여러 관련 벡터를 일치시킬 수 있습니다.
{
  "vectorQueries": [
    {
      "kind": "text",
      "text": "whales swimming",
      "K": 50,
      "fields": "scenes/embedding",
      "perDocumentVectorLimit": 0
    }
  ],
  "select": "title, scenes/timestamp, scenes/framePath"
}

단일 필드의 여러 벡터에서 순위 매기기

여러 벡터가 단일 문서와 연결된 경우 Azure AI Search는 순위에 최대 점수를 사용합니다. 시스템은 가장 관련성이 낮은 벡터를 사용하여 각 문서의 점수를 매기기 때문에 관련성이 낮은 벡터가 희석되지 않도록 방지합니다.

컬렉션에서 관련 요소 검색

복합 형식의 컬렉션이 매개 변수에 $select 포함되면 벡터 쿼리와 일치하는 요소만 반환됩니다. 타임스탬프, 텍스트 설명 또는 이미지 경로와 같은 연결된 메타데이터를 검색하는 데 유용합니다.

비고

페이로드 크기를 줄이려면 매개 변수에 벡터 값 자체를 $select 포함하지 마십시오. 불필요한 경우 벡터 스토리지를 완전히 생략하는 것이 좋습니다.

다중 벡터 쿼리 디버그(미리 보기)

문서에 여러 하위 필드의 텍스트 및 이미지 포함과 같은 포함된 여러 벡터가 포함된 경우 시스템은 모든 요소에서 가장 높은 벡터 점수를 사용하여 문서의 순위를 지정합니다.

각 벡터의 기여 방식을 디버그하려면 디버그 모드(최신 미리 보기 REST API에서 사용 가능)를 사용합니다 innerHits .

POST /indexes/my-index/docs/search?api-version=2025-11-01-preview
{
  "vectorQueries": [
    {
      "kind": "vector",
      "field": "keyframes.imageEmbedding",
      "kNearestNeighborsCount": 5,
      "vector": [ /* query vector */ ]
    }
  ],
  "debug": "innerHits"
}

응답 셰이프 예제

"@search.documentDebugInfo": {
  "innerHits": {
    "keyframes": [
      {
        "ordinal": 0,
        "vectors": [
          {
            "imageEmbedding": {
              "searchScore": 0.958,
              "vectorSimilarity": 0.956
            },
            "textEmbedding": {
              "searchScore": 0.958,
              "vectorSimilarity": 0.956
            }
          }
        ]
      },
      {
        "ordinal": 1,
        "vectors": [
          {
            "imageEmbedding": null,
            "textEmbedding": {
              "searchScore": 0.872,
              "vectorSimilarity": 0.869
            }
          }
        ]
      }
    ]
  }
}

필드 설명

분야 설명
ordinal 컬렉션 내 요소의 인덱스(0부터 시작)입니다.
vectors 요소에 포함된 검색 가능한 벡터 필드당 하나의 항목입니다.
searchScore 재득점 및 승격 후 해당 필드에 대한 최종 점수입니다.
vectorSimilarity 거리 함수에서 반환하는 원시 유사성입니다.

비고

innerHits 현재는 벡터 필드만 보고합니다.

debug=vector에 대한 관계

이 속성에 대한 몇 가지 사실은 다음과 같습니다.

  • 기존 debug=vector 스위치는 변경되지 않은 상태로 유지됩니다.

  • 다중 벡터 필드 @search.documentDebugInfo.vector.subscore 와 함께 사용하는 경우 부모 문서의 순위를 지정하는 데 사용되는 최대 점수를 표시하지만 요소별 세부 정보는 표시하지 않습니다.

  • 개별 요소가 점수에 어떻게 기여했는지에 대한 인사이트를 얻는 데 사용합니다 innerHits .