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.
Użycie wektorów umożliwia wykonywanie złożonych zapytań i analiz, ponieważ można porównywać i analizować wektory przy użyciu zaawansowanych technik wyszukiwania podobnych elementów i organizowania danych w grupach, w tym klastrowania, kwantyzacji i wyszukiwania wektorów.
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.
W tym artykule przedstawiono podstawowe informacje na temat baz danych wektorów i wyjaśniono koncepcyjnie, jak można użyć Eventhouse jako wektorowej bazy danych w Real-Time Intelligence w Microsoft Fabric. Aby zapoznać się z praktycznym przykładem, zobacz Samouczek: używanie usługi Eventhouse jako wektorowej bazy danych.
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 jest przeznaczony do przechwytywania jego znaczenia semantycznego. 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. Proces tworzenia osadzania jest prosty. Można je tworzyć przy użyciu standardowych pakietów Python (na przykład spaCy, sent2vec, Gensim), duże modele językowe (LLM) generują najwyższej jakości osadzanie na potrzeby wyszukiwania semantycznego tekstu. Można na przykład wysłać tekst do modelu osadzania w Azure OpenAI i generuje reprezentację wektorową, którą można przechowywać na potrzeby analizy. Aby uzyskać więcej informacji, zobacz Zrozumienie osadzania w usłudze Azure OpenAI.
Ogólny przepływ pracy
Ogólny przepływ pracy do używania wektorowej bazy danych jest następujący:
- Osadzanie danych: konwertowanie danych na format wektorowy przy użyciu modelu osadzania. Można na przykład osadzić dane tekstowe przy użyciu modelu OpenAI.
- 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. To kodowanie służy do przechowywania osadzania wektorów, ponieważ zmniejsza wymagania dotyczące przechowywania przez współczynnik czterech i przyspiesza funkcje przetwarzania wektorowego, takie jak series_dot_product() i series_cosine_similarity() o rzędy wielkości. - 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.