Udostępnij przez


Obsługa pól wielowektorowych w usłudze Azure AI Search

Uwaga / Notatka

Ta funkcja jest obecnie w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie jest zalecana w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą nie być obsługiwane lub mogą mieć ograniczone możliwości. Aby uzyskać więcej informacji, zobacz Warunki dodatkowe korzystania z testowych wersji Microsoft Azure.

Funkcja obsługi pól wielowektorowych w usłudze Azure AI Search umożliwia indeksowanie wielu wektorów podrzędnych w jednym polu dokumentu. Ta funkcja jest cenna w przypadku przypadków użycia, takich jak dane wielomodalne lub dokumenty długie, w których reprezentowanie zawartości za pomocą pojedynczego wektora doprowadziłoby do utraty ważnych szczegółów.

Ograniczenia

  • Klasyfikator semantyczny nie jest obsługiwany dla zagnieżdżonych fragmentów w złożonym polu. W związku z tym semantyczny ranker nie obsługuje zagnieżdżonych wektorów w polach wielowektorowych.

Omówienie obsługi pól wielowektorowych

Tradycyjnie typy wektorów, na przykład Collection(Edm.Single) mogą być używane tylko w polach najwyższego poziomu. Dzięki wprowadzeniu obsługi pól wielowektorowych można teraz używać typów wektorów w zagnieżdżonych polach złożonych kolekcji, co pozwala na skojarzenie wielu wektorów z jednym dokumentem.

Pojedynczy dokument może łącznie zawierać maksymalnie 100 wektorów we wszystkich złożonych polach kolekcji. Pola wektorowe mogą być zagnieżdżone tylko na jednym poziomie głębokości.

Definicja indeksu z polem wielowektorowym

Dla tej funkcji nie są potrzebne żadne nowe właściwości indeksu. Oto przykładowa definicja indeksu:

{
  "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
        }
      ]
    }
  ]
}

Przykładowy dokument importu danych

Oto przykładowy dokument ilustrujący sposób użycia pól wielowektorowych w praktyce:

{
  "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"
    }
  ]
}

W tym przykładzie pole scen jest złożoną kolekcją zawierającą wiele wektorów (pól osadzania) wraz z innymi skojarzonymi danymi. Każdy wektor reprezentuje scenę z filmu i może służyć do znajdowania podobnych scen w innych filmach, między innymi potencjalnych przypadków użycia.

Wykonywanie zapytań z obsługą pól wielowektorowych

Funkcja obsługi pól wielowektorowych wprowadza pewne zmiany w mechanizmie zapytań w usłudze Azure AI Search. Jednak główny proces wykonywania zapytań pozostaje w dużej mierze taki sam. vectorQueries Wcześniej mogła mieć za cel tylko pola wektorowe zdefiniowane jako pola indeksu najwyższego poziomu. Dzięki tej funkcji, łagodzimy to ograniczenie i pozwalamy vectorQueries na kierowanie do pól, które są zagnieżdżone w kolekcjach złożonych typów (do jednego poziomu głębokości). Ponadto dostępny jest nowy parametr czasu zapytania: perDocumentVectorLimit.

  • Ustawienie perDocumentVectorLimit na 1 zapewnia dopasowanie maksymalnie jednego wektora na dokument, co gwarantuje, że wyniki pochodzą z różnych dokumentów.
  • Ustawienie perDocumentVectorLimit na 0 (nieograniczone) umożliwia dopasowanie wielu odpowiednich wektorów z tego samego dokumentu.
{
  "vectorQueries": [
    {
      "kind": "text",
      "text": "whales swimming",
      "K": 50,
      "fields": "scenes/embedding",
      "perDocumentVectorLimit": 0
    }
  ],
  "select": "title, scenes/timestamp, scenes/framePath"
}

Ranga między wieloma wektorami w jednym polu

Gdy wiele wektorów jest skojarzonych z jednym dokumentem, usługa Azure AI Search używa maksymalnego wyniku wśród nich do klasyfikowania. System używa najbardziej odpowiedniego wektora do oceny każdego dokumentu, co zapobiega rozcieńczeniu przez mniej istotne.

Pobieranie odpowiednich elementów w kolekcji

Gdy kolekcja typów złożonych jest uwzględniona w parametrze $select , zwracane są tylko elementy pasujące do zapytania wektorowego. Jest to przydatne w przypadku pobierania skojarzonych metadanych, takich jak znaczniki czasu, opisy tekstu lub ścieżki obrazów.

Uwaga / Notatka

Aby zmniejszyć rozmiar ładunku, należy unikać dołączania samych wartości wektorów w parametrze $select . Rozważ całkowite pominięcie magazynu wektorów, jeśli nie jest to konieczne.

Debugowanie zapytań wielowektorowych (wersja zapoznawcza)

Gdy dokument zawiera wiele osadzonych wektorów, takich jak osadzanie tekstu i obrazu w różnych polach podrzędnych, system używa najwyższego wyniku wektora we wszystkich elementach do klasyfikacji dokumentu.

Aby debugować sposób współautora każdego wektora innerHits , użyj trybu debugowania (dostępnego w najnowszej wersji zapoznawczej interfejsu API REST).

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"
}

Przykładowy kształt odpowiedzi

"@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
            }
          }
        ]
      }
    ]
  }
}

Opisy pól

(No changes needed) Opis
ordinal Indeks zerowy elementu wewnątrz kolekcji.
vectors Jeden wpis dla pola wektora możliwego do wyszukiwania zawartego w elemencie.
searchScore Końcowy wynik dla tego pola, po każdym ponownym punktowaniu i wzmocnieniach.
vectorSimilarity Podobieństwo w formie surowej zwracane przez funkcję odległości.

Uwaga / Notatka

innerHits obecnie raportuje tylko pola wektorowe.

Relacja z debug=vector

Oto kilka faktów dotyczących tej właściwości:

  • Istniejący debug=vector przełącznik pozostaje niezmieniony.

  • W przypadku użycia z polami @search.documentDebugInfo.vector.subscore wielowektorowymi pokazuje maksymalny wynik używany do klasyfikacji dokumentu nadrzędnego, ale nie szczegółów poszczególnych elementów.

  • Służy innerHits do uzyskiwania wglądu w sposób, w jaki poszczególne elementy przyczyniły się do wyniku.