Indeksowanie wektorów binarnych na potrzeby wyszukiwania wektorów
Usługa Azure AI Search obsługuje zapakowany typ Collection(Edm.Byte)
binarny w celu dalszego zmniejszenia ilości miejsca do magazynowania i pamięci danych wektorowych. Tego typu danych można użyć dla danych wyjściowych z modeli, takich jak Osadzanie binarne modele osadzania Cohere w wersji 3.
Istnieją trzy kroki konfigurowania indeksu dla wektorów binarnych:
- Dodawanie algorytmu wyszukiwania wektorów, który określa odległość Hamming dla porównania wektorów binarnych
- Dodawanie profilu wektorowego wskazującego algorytm
- Dodawanie profilu wektora do definicji pola binarnego
W tym artykule założono, że znasz tworzenie indeksu w usłudze Azure AI Search. Używa on interfejsów API REST do zilustrowania każdego kroku, ale można również dodać pole binarne do indeksu w witrynie Azure Portal.
Typy danych binarnych są ogólnie dostępne, począwszy od interfejsu API w wersji 2024-07-01 i są przypisywane do pól przy użyciu interfejsów API tworzenia indeksu lub tworzenia lub aktualizowania indeksu .
Napiwek
Jeśli badasz obsługę wektorów binarnych pod kątem mniejszego śladu, możesz również rozważyć funkcje kwantyzacji wektorów i redukcji magazynu w usłudze Azure AI Search. Dane wejściowe to osadzanie float32 lub float16. Dane wyjściowe są przechowywane w znacznie mniejszym formacie. Aby uzyskać więcej informacji, zobacz Zmniejszanie rozmiaru wektora poprzez kwantyzację, wąskie typy danych i opcje magazynu.
Wymagania wstępne
- Wektory binarne, z 1 bitem na wymiar, spakowane w wartościach uint8 z 8 bitami na wartość. Można je uzyskać przy użyciu modeli, które bezpośrednio generują "spakowane wektory binarne" lub kwantyzując wektory binarne po stronie klienta podczas indeksowania i wyszukiwania.
Ograniczenia
- Brak obsługi witryny Azure Portal w kreatorze importowania i wektoryzacji danych.
- Brak obsługi pól binarnych w umiejętności AML używanych do zintegrowanej wektoryzacji modeli w katalogu modeli usługi Azure AI Studio.
Dodawanie algorytmu wyszukiwania wektorowego i profilu wektora
Algorytmy wyszukiwania wektorowego służą do tworzenia struktur nawigacji zapytań podczas indeksowania. W przypadku pól wektorów binarnych porównania wektorów są wykonywane przy użyciu metryki odległości Hamming.
Aby dodać pole binarne do indeksu, skonfiguruj
Create or Update Index
żądanie przy użyciu interfejsu API REST lub witryny Azure Portal.W schemacie indeksu dodaj sekcję określającą
vectorSearch
profile i algorytmy.Dodaj co najmniej jeden algorytm wyszukiwania wektorowego, który ma metrykę podobieństwa .
hamming
Często używa się hierarchicznych małych światów (HNSW), ale można również używać odległości Hamming z wyczerpującymi K najbliższych sąsiadów.Dodaj co najmniej jeden profil wektorów określający algorytm.
W poniższym przykładzie przedstawiono podstawową vectorSearch
konfigurację:
"vectorSearch": {
"profiles": [
{
"name": "myHnswProfile",
"algorithm": "myHnsw",
"compression": null,
"vectorizer": null
}
],
"algorithms": [
{
"name": "myHnsw",
"kind": "hnsw",
"hnswParameters": {
"metric": "hamming"
}
},
{
"name": "myExhaustiveKnn",
"kind": "exhaustiveKnn",
"exhaustiveKnnParameters": {
"metric": "hamming"
}
}
]
}
Dodawanie pola binarnego do indeksu
Kolekcja pól indeksu musi zawierać pole dla klucza dokumentu, pól wektorów i innych pól, które są potrzebne w scenariuszach wyszukiwania hybrydowego.
Pola binarne są typu Collection(Edm.Byte)
i zawierają osadzanie w postaci zapakowanej. Jeśli na przykład oryginalny wymiar osadzania to 1024
, spakowana długość wektora binarnego to ceiling(1024 / 8) = 128
. Spakowany formularz można uzyskać, ustawiając vectorEncoding
właściwość w polu.
- Dodaj pole do kolekcji pól i nadaj mu nazwę.
- Ustaw typ danych na
Collection(Edm.Byte)
. - Ustaw
vectorEncoding
wartość napackedBit
dla kodowania binarnego. - Ustaw wartość opcji
dimensions
na1024
. Określ oryginalny (rozpakowany) wymiar wektora. - Ustaw
vectorSearchProfile
profil zdefiniowany w poprzednim kroku. - Umożliwia wyszukiwanie pól.
Poniższa definicja pola to przykład właściwości, które należy ustawić:
"fields": [
. . .
{
"name": "my-binary-vector-field",
"type": "Collection(Edm.Byte)",
"vectorEncoding": "packedBit",
"dimensions": 1024,
"vectorSearchProfile": "myHnswProfile",
"searchable": true
},
. . .
]
Zobacz też
Przykłady kodu w repozytorium azure-search-vector-samples przedstawiają kompleksowe przepływy pracy, które obejmują definicję schematu, wektoryzację, indeksowanie i zapytania.
Dostępny jest kod demonstracyjny dla języków Python, C# i JavaScript.