Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wektorowa baza danych przechowuje dane i zarządza nimi w postaci wektorów, które są tablicami liczbowymi punktów danych.
Tradycyjne bazy danych nie nadają się do obsługi danych o wysokim wymiarach, które stają się coraz bardziej powszechne w analizie danych. Jednak wektorowe bazy danych są przeznaczone do obsługi danych o wysokim wymiarach, takich jak tekst, obrazy i dźwięk, reprezentując je jako wektory. Bazy danych wektorów są przydatne w przypadku zadań takich jak uczenie maszynowe, przetwarzanie języka naturalnego i rozpoznawanie obrazów, gdzie celem jest identyfikowanie wzorców lub podobieństw w dużych zestawach danych.
Ten artykuł zawiera podstawowe informacje na temat wektorowych baz danych i wyjaśnia koncepcyjnie, jak można użyć bazy danych eventhouse jako wektorowej bazy danych w Real-Time Intelligence w Microsoft Fabric. Aby zapoznać się z praktycznymi przykładami, zobacz Samouczek: używanie Eventhouse jako wektorowej bazy danych z osadzeniami LLM oraz Samouczek: używanie Eventhouse jako wektorowej bazy danych z osadzeniami SLM.
Najważniejsze pojęcia
W bazach danych wektorów są używane następujące kluczowe pojęcia:
Podobieństwo wektorów
Podobieństwo wektorów to miara tego, jak różne (lub podobne) są dwa lub więcej wektorów. Wyszukiwanie podobieństwa wektorów to technika używana do znajdowania podobnych wektorów w zestawie danych. Porównujesz wektory przy użyciu metryki odległości, takiej jak odległość euklidesowa lub podobieństwo cosinusu. Im bliżej znajdują się dwa wektory, tym bardziej podobne są.
Osadzanie
Osadzanie to typowy sposób reprezentowania danych w formacie wektorowym do użycia w wektorowych bazach danych. Osadzanie to matematyczna reprezentacja elementu danych, takiego jak słowo, dokument tekstowy lub obraz, który przechwytuje jego znaczenie semantyczne. Osadzanie jest tworzone przy użyciu algorytmów, które analizują dane i generują zestaw wartości liczbowych reprezentujących jego kluczowe funkcje. Na przykład osadzanie wyrazu może reprezentować jego znaczenie, kontekst i relację z innymi słowami. Osadzanie to typowy sposób reprezentowania danych w formacie wektorowym do użycia w wektorowych bazach danych. Osadzanie to matematyczna reprezentacja elementu danych, takiego jak słowo, dokument tekstowy lub obraz, który przechwytuje jego znaczenie semantyczne. Osadzanie jest tworzone przy użyciu algorytmów, które analizują dane i generują zestaw wartości liczbowych reprezentujących jego kluczowe funkcje. Na przykład osadzanie wyrazu może reprezentować jego znaczenie, kontekst i relację z innymi słowami. Usługa Eventhouse obsługuje dwie metody generowania embeddingów bezpośrednio w KQL:
ai_embeddings wtyczka: wywołuje zewnętrzny punkt końcowy Azure OpenAI w celu wygenerowania osadzania przy użyciu dużych modeli językowych (LLMs). Ta metoda generuje najwyższej jakości osadzanie i najlepiej nadaje się do obciążeń wyszukiwania semantycznego w środowisku produkcyjnym.
slm_embeddings_fl(): Uruchamia modele małych języków (SLM) lokalnie w piaskownicy usługi Kusto Python, generując osadzanie bez żadnego zewnętrznego punktu końcowego. Ta metoda nie wymaga Azure zasobu OpenAI i nie wiąże się z żadnymi kosztami osadzania.
Aby uzyskać więcej informacji na temat osadzania w programie Azure OpenAI, zobacz Understand embeddings in Azure OpenAI Service (Omówienie osadzania w Azure OpenAI Service).
Wybieranie metody osadzania
Skorzystaj z poniższej tabeli, aby wybrać metodę, która najlepiej pasuje do danego scenariusza:
| Rozważenie | wtyczka ai_embeddings (LLM) | slm_embeddings_fl() (SLM) |
|---|---|---|
| Jakość modelu | Najwyższa jakość; używa Azure modeli OpenAI, takich jaktext-embedding-3-large |
Dobra jakość; używa umów SLA typu open source, takich jak harrier-v1-270m, jina-v2-smalli e5-small-v2 |
| Zależność zewnętrzna | Wymaga zasobu Azure OpenAI z wdrożonym modelem osadzania | Brak; modele działają lokalnie w piaskownicy Python |
| Cost | Cennik za żądanie na podstawie użycia usługi Azure OpenAI | Brak kosztu osadzania |
| Throughput | Podlega limitom szybkości usługi Azure OpenAI; wymaga przetwarzania wsadowego i mechanizmu ponawiania prób | Ograniczone wyłącznie przez zasoby obliczeniowe klastra; skaluje się naturalnie wraz z rozmiarem klastra |
| Setup | Wymaga wdrożenia usługi Azure OpenAI, konfiguracji zasad wywołań i skonfigurowania tożsamości | Wymaga włączonej wtyczki Python oraz artefaktów SLM przesłanych do lakehouse |
| Maksymalna długość kontekstu | Zależy od wdrożonego modelu (na przykład 8192 tokenów dla programu text-embedding-3-large) |
Do 32 768 tokenów z harrier-v1-270m, 8 192 z jina-v2-small i 512 z e5-small-v2 |
| Najlepsze dla | Wyszukiwanie semantyczne w środowisku produkcyjnym, w którym jakość osadzania jest priorytetem | Przepływy pracy wymagające ochrony prywatności, szybkie prototypowanie, wsadowe generowanie osadzeń na dużą skalę lub scenariusze bez dostępu do usługi Azure OpenAI |
Ogólny przepływ pracy
Ogólny przepływ pracy do używania wektorowej bazy danych jest następujący:
- Osadzanie danych: konwertuj dane na format wektorowy przy użyciu modelu osadzania.
- Przechowuj wektory: W przechowuj osadzone wektory w bazie danych wektorów. Można wysłać osadzone dane do Eventhouse, aby zarządzać wektorami i je przechowywać.
- Zapytanie osadzania: przekonwertuj dane zapytania na format wektorowy przy użyciu tego samego modelu osadzania używanego do osadzania przechowywanych danych.
- Wektory zapytań: użyj wyszukiwania podobieństwa wektorów, aby znaleźć wpisy w bazie danych podobne do zapytania.
Eventhouse jako wektorowa baza danych
Trzonem wyszukiwania podobieństw wektorów jest możliwość przechowywania, indeksowania i przeszukiwania danych wektorowych. Eventhouses stanowią rozwiązanie do obsługi i analizowania dużych ilości danych, szczególnie w scenariuszach wymagających analizy i eksploracji w czasie rzeczywistym. Ta funkcja sprawia, że usługa Eventhouse jest doskonałym wyborem do przechowywania i wyszukiwania wektorów.
Następujące składniki usługi Eventhouse umożliwiają używanie jej jako wektorowej bazy danych:
- Dynamiczny typ danych, który może przechowywać dane bez struktury, takie jak tablice i kolekcje właściwości. Ten typ danych służy do przechowywania wartości wektorów. Możesz dodatkowo rozszerzyć wartość wektora, przechowując metadane powiązane z oryginalnym obiektem jako oddzielne kolumny w tabeli.
- Typ
Vector16przeznaczony do przechowywania wektorów liczb zmiennoprzecinkowych w 16-bitowej precyzji. To kodowanie używaBfloat16zamiast domyślnych 64 bitów. Użyj tego kodowania do przechowywania osadzeń wektorowych, ponieważ czterokrotnie zmniejsza ono zapotrzebowanie na pamięć masową i znacząco przyspiesza funkcje przetwarzające wektory, takie jak series_dot_product() i series_cosine_similarity(). - Funkcja series_cosine_similarity , której można użyć do wykonywania wyszukiwania podobieństwa wektorów na podstawie wektorów przechowywanych w usłudze Eventhouse.
Optymalizuj pod kątem skalowania
Aby uzyskać więcej informacji na temat optymalizacji wyszukiwania podobieństwa wektorów, zobacz blog.
Aby zmaksymalizować wydajność i wynikowe czasy wyszukiwania, wykonaj następujące kroki:
- Ustaw kodowanie kolumny osadzania na Vector16, kodowanie 16-bitowe współczynników wektorów (zamiast domyślnego 64-bitowego).
- Przechowuj tabelę wektorów osadzania na wszystkich węzłach klastra z co najmniej jednym fragmentem na procesor. Aby wykonać ten cel, wykonaj następujące kroki:
- Ogranicz liczbę wektorów osadzania na fragment, zmieniając ShardEngineMaxRowCountpolityki fragmentowania. To ustawienie rozmieszcza dane we wszystkich dostępnych zasobach obliczeniowych w celu szybszego wyszukiwania.
- Zmień element RowCountUpperBoundForMergezasady scalania. Zasady scalania są potrzebne do uniemożliwiania scalania zakresów po zgromadzeniu.
Przykładowe kroki optymalizacji
W poniższym przykładzie zdefiniujesz tabelę wektorów statycznych do przechowywania wektorów 1M. Zasady osadzania definiuje się jako Vector16 i ustawia zasady fragmentowania i scalania, aby zoptymalizować tabelę pod kątem wyszukiwania podobieństwa wektorów. W tym przykładzie załóżmy, że klaster ma 20 węzłów, a każdy węzeł ma 16 procesorów. Fragmenty tabeli powinny zawierać najwyżej 1000 000/(20*16)=3125 wierszy.
Uruchom następujące polecenia KQL jeden po drugim, aby utworzyć pustą tabelę i ustawić wymagane zasady i kodowanie:
.create table embedding_vectors(vector_id:long, vector:dynamic) // This is a sample selection of columns, you can add more columns .alter column embedding_vectors.vector policy encoding type = 'Vector16' // Store the coefficients in 16 bits instead of 64 bits accelerating calculation of dot product, suppress redundant indexing .alter-merge table embedding_vectors policy sharding '{ "ShardEngineMaxRowCount" : 3125 }' // Balanced data on all nodes and, multiple extents per node so the search can use all processors .alter-merge table embedding_vectors policy merge '{ "RowCountUpperBoundForMerge" : 3125 }' // Suppress merging extents after ingestionWprowadź dane do tabeli utworzonej i zdefiniowanej w poprzednim kroku.