Udostępnij przez


Wektory i osadzanie: często zadawane pytania

Dotyczy: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL Database w usłudze Microsoft Fabric

Ten artykuł zawiera często zadawane pytania dotyczące wektorów i embeddingów w aparacie bazy danych SQL.

Uwaga / Notatka

Funkcje wektorowe są dostępne w usłudze Azure SQL Managed Instance skonfigurowane przy użyciu zasad Always-up-to-date .

Jak utrzymywać aktualność osadzonych treści?

Aktualizuj osadzenia za każdym razem, gdy zmieniają się dane bazowe, które one reprezentują. Jest to szczególnie ważne w przypadku scenariuszy, w których dane są dynamiczne, takie jak zawartość generowana przez użytkownika lub często aktualizowane bazy danych. Aby dowiedzieć się więcej o kilku strategiach aktualizowania osadzania, zobacz Baza danych i sztuczna inteligencja: rozwiązania do aktualizowania osadzania.

Obciążenie związane z wyszukiwaniem wektorów obejmuje przede wszystkim przechowywanie typu danych wektorowych i zasobów obliczeniowych wymaganych do indeksowania i wyszukiwania. Typ danych wektorów został zaprojektowany tak, aby był wydajny pod względem magazynu, ale dokładne obciążenie może się różnić w zależności od rozmiaru — liczby wymiarów — przechowywanych wektorów.

Aby uzyskać więcej informacji na temat wybierania odpowiedniego rozmiaru wektora, zobacz Osadzanie modeli i wymiarów: optymalizowanie współczynnika użycia zasobów wydajności.

Strona danych programu SQL Server może zawierać maksymalnie 8060 bajtów, więc rozmiar wektora wpływa na liczbę wektorów, które mogą być przechowywane na jednej stronie. Jeśli na przykład masz wektor z 1024 wymiarami, a każdy wymiar jest zmiennoprzecinkową pojedynczej precyzji (4 bajty), całkowity rozmiar wektora będzie wynosić 4 104 bajty (4 096 bajtów danych + 8 bajtów nagłówka). Ogranicza to liczbę wektorów, które mogą mieścić się na jednej stronie, do jednego.

Jakiego modelu osadzania należy używać i kiedy?

Dostępnych jest wiele modeli osadzania, a wybór, który z nich ma być używany, zależy od konkretnego przypadku użycia i typu przetwarzanych danych. Niektóre modele obsługują wiele języków, a inne obsługują dane wielomodalne (tekst, obrazy itp.). Niektóre są dostępne tylko w trybie online. Inne mogą być uruchamiane lokalnie.

Oprócz samego modelu należy wziąć pod uwagę rozmiar modelu i liczbę generowanych wymiarów. Większe modele mogą zapewnić lepszą dokładność, ale wymagają większej ilości zasobów obliczeniowych i miejsca do magazynowania, ale w wielu przypadkach posiadanie większej liczby wymiarów nie zmienia jakości w przypadku typowych przypadków użycia.

Aby uzyskać więcej informacji na temat wybierania odpowiedniego modelu osadzania, zobacz Osadzanie modeli i wymiarów: optymalizowanie współczynnika użycia zasobów wydajności.

Jak zdecydować, kiedy używać wartości zmiennoprzecinkowych o pojedynczej precyzji (4 bajtów) a pół-bajtowej (2-bajtowej) dla wektorów?

Podczas przechowywania wektorów osadzania w bazie danych wybór między zmiennoprzecinkami o pojedynczej precyzji (float32) i połowie precyzji (float16) często sprowadza się do równoważenia wydajności magazynowania z dokładnością liczbową.

Na szczęście osadzanie nie jest zwykle bardzo wrażliwe na niewielkie zmiany w precyzji.

Osadzanie to gęste reprezentacje wektorów używane w zadaniach, takich jak wyszukiwanie semantyczne, systemy rekomendacji i przetwarzanie języka naturalnego. Te wektory są często danymi wyjściowymi sieci neuronowych, które są z natury odporne na małe różnice liczbowe. W rezultacie zmniejszenie dokładności od float32 do float16 zwykle ma minimalny wpływ na jakość porównań podobieństw lub zadań podrzędnych — zwłaszcza podczas wnioskowania.

Użycie float16 może znacznie zmniejszyć użycie magazynu i pamięci, co jest szczególnie korzystne podczas pracy z zestawami danych osadzania na dużą skalę.

A co z rozrzedłymi wektorami?

Obecnie typ danych wektor w aparacie bazy danych SQL jest przeznaczony dla gęstych wektorów, które są tablicami liczb zmiennoprzecinkowych, w których większość elementów ma wartości niezerowe. Wektory rozrzedłe, które zawierają znaczną liczbę elementów zerowych, nie są obsługiwane natywnie.

Wydajność może się znacznie różnić w zależności od konkretnego przypadku użycia, rozmiaru zestawu danych i złożoności zapytań. Jednak możliwości wyszukiwania wektorowego programu SQL Server zostały zaprojektowane tak, aby było wydajne i skalowalne, wykorzystując techniki indeksowania w celu zoptymalizowania wydajności wyszukiwania.

Co zrobić, jeśli mam więcej niż jedną kolumnę, której chcę użyć do generowania osadzania?

Jeśli masz wiele kolumn, których chcesz użyć do generowania osadzania, masz dwie główne opcje:

  • Utwórz jedno osadzanie dla każdej kolumny lub
  • Połącz wartości wielu kolumn w jeden ciąg, a następnie wygeneruj pojedyncze osadzanie dla tego łączonego ciągu.

Aby uzyskać więcej informacji na temat dwóch opcji i powiązanych zagadnień dotyczących projektowania bazy danych, zobacz Efektywne i eleganckie modelowanie osadzania.

Co z ponownym klasyfikowaniem?

Ponowne klasyfikowanie to technika stosowana do poprawy istotności wyników wyszukiwania przez ponowne ocenianie początkowych wyników na podstawie dodatkowych kryteriów lub modeli. Aparat bazy danych SQL umożliwia zaimplementowanie ponownego klasyfikowania, łącząc wyszukiwanie wektorów z pełnym tekstem (który zapewnia klasyfikację BM25) lub dodatkowe zapytania SQL lub modele uczenia maszynowego w celu uściślenia wyników na podstawie określonej logiki biznesowej lub preferencji użytkownika.

Aby uzyskać więcej informacji, zapoznaj się z tematem Ulepszanie możliwości wyszukiwania za pomocą funkcji wyszukiwania hybrydowego i ponownego klasyfikowania RRF.

Kiedy używać funkcji wyszukiwania sztucznej inteligencji (teraz AI Foundry) a kiedy używać języka SQL w scenariuszach wyszukiwania wektorów?

Wyszukiwanie sztucznej inteligencji (teraz AI Foundry) to wyspecjalizowana usługa przeznaczona dla zaawansowanych scenariuszy wyszukiwania, w tym wyszukiwania wektorów, przetwarzania języka naturalnego i szczegółowych informacji opartych na sztucznej inteligencji. Udostępnia kompleksowy zestaw funkcji do tworzenia inteligentnych aplikacji wyszukiwania, takich jak wbudowana obsługa różnych modeli sztucznej inteligencji, zaawansowane algorytmy klasyfikacji i integracja z innymi usługami sztucznej inteligencji.

Aparat bazy danych SQL zapewnia możliwość przechowywania dowolnego rodzaju danych i uruchamiania dowolnego rodzaju zapytania: ustrukturyzowanego i nieustrukturyzowanego oraz wykonywania wyszukiwania wektorowego na tych danych. Jest to dobry wybór w scenariuszach, w których należy przeszukiwać wszystkie te dane razem i nie chcesz używać oddzielnej usługi do wyszukiwania, które komplikują architekturę. Silnik bazy danych SQL oferuje kluczowe funkcje ochrony danych na poziomie przedsiębiorstwa, aby zapewnić, że dane są zawsze chronione, takie jak zabezpieczenia na poziomie wiersza, dynamiczne maskowanie danych (DDM), funkcja Always Encrypted, tabele księgi niezmiennej i przezroczyste szyfrowanie danych (TDE).

Oto przykład pojedynczego zapytania, które można uruchomić w usłudze Azure SQL lub programie SQL Server, które łączy dane wektorowe, geoprzestrzenne, ustrukturyzowane i nieustrukturyzowane jednocześnie. Przykładowe zapytanie pobiera 50 najbardziej odpowiednich restauracji na podstawie opisu restauracji, lokalizacji restauracji i preferencji użytkownika, przy użyciu wyszukiwania wektorowego opisu i wyszukiwania geoprzestrzennego dla lokalizacji, filtrowania również według liczb gwiazdek, liczby recenzji, kategorii itd.:

DECLARE @p AS GEOGRAPHY = GEOGRAPHY::Point(47.6694141, -122.1238767, 4326);
DECLARE @e AS VECTOR(1536) = AI_GENERATE_EMBEDDINGS('I want to eat a good focaccia' USE MODEL Text3Embedding);

SELECT TOP (50) b.id AS business_id,
                b.name AS business_name,
                r.id AS review_id,
                r.stars,
                r.review,
                VECTOR_DISTANCE('cosine', re.embedding, @e) AS semantic_distance,
                @p.STDistance(geo_location) AS geo_distance
FROM dbo.reviews AS r
     INNER JOIN dbo.reviews_embeddings AS re
         ON r.id = re.review_id
     INNER JOIN dbo.business AS b
         ON r.business_id = b.id
WHERE b.city = 'Redmond'
      AND @p.STDistance(b.geo_location) < 5000 -- 5 km
      AND r.stars >= 4
      AND b.reviews >= 30
      AND JSON_VALUE(b.custom_attributes, '$.local_recommended') = 'true'
      AND VECTOR_DISTANCE('cosine', re.embedding, @e) < 0.2
ORDER BY semantic_distance DESC;

W poprzednim przykładzie wyszukiwanie dokładne najbliższego sąsiada (ENN) służy do znajdowania najbardziej odpowiednich recenzji na podstawie semantycznej odległości osadzania, oraz filtrowania według odległości geoprzestrzennej i innych atrybutów biznesowych. To zapytanie demonstruje możliwości łączenia wyszukiwania wektorów z tradycyjnymi funkcjami SQL w celu utworzenia zaawansowanego i wydajnego środowiska wyszukiwania.

Jeśli chcesz użyć wyszukiwania Przybliżonego Najbliższego Sąsiada (ANN), możesz utworzyć indeks wektorowy na tabeli reviews_embeddings i użyć funkcji VECTOR_SEARCH do wykonania wyszukiwania.

Przeglądaj laboratorium Azure SQL Cryptozoology AI Embeddings we własnym tempie.