Jak włączyć i używać pgvector
w usłudze Azure Cosmos DB for PostgreSQL
DOTYCZY: Usługa Azure Cosmos DB for PostgreSQL (obsługiwana przez rozszerzenie bazy danych Citus do bazy danych PostgreSQL)
Rozszerzenie pgvector
dodaje wyszukiwanie wektorów typu open source do bazy danych PostgreSQL.
W tym artykule przedstawiono dodatkowe możliwości włączone przez pgvector
usługę . Obejmuje ona pojęcia podobieństwa wektorów i osadzania oraz zawiera wskazówki dotyczące włączania pgvector
rozszerzenia. Dowiemy się, jak tworzyć, przechowywać i wykonywać zapytania dotyczące wektorów.
Możesz również odwołać się do oficjalnego pliku README projektu.
Włączanie rozszerzenia
Aby można było ich używać, rozszerzenia PostgreSQL muszą być włączone w bazie danych. Aby włączyć rozszerzenie, uruchom polecenie z narzędzia psql, aby załadować spakowane obiekty do bazy danych.
SELECT CREATE_EXTENSION('vector');
Uwaga
Aby wyłączyć użycie rozszerzenia drop_extension()
Pojęcia
Podobieństwo wektorów
Podobieństwo wektorów to metoda służąca do mierzenia, jak podobne dwa elementy są reprezentowane jako wektory, które są seriami liczb. Wektory są często używane do reprezentowania punktów danych, gdzie każdy element wektora reprezentuje funkcję lub atrybut punktu danych.
Podobieństwo wektorów jest często obliczane przy użyciu metryk odległości, takich jak Euclidean distance
lub cosine
podobieństwo. Odległość euklidesowa mierzy odległość linii prostej między dwoma wektorami w przestrzeni nwymiarowej, podczas gdy podobieństwo cosinusu mierzy cosinus kąta między dwoma wektorami. Wartości metryk podobieństwa zwykle wahają się między 0
i 1
, a higher
wartości wskazują większą podobieństwo między wektorami.
Podobieństwo wektorów jest szeroko stosowane w różnych aplikacjach, takich jak systemy rekomendacji, klasyfikacja tekstu, rozpoznawanie obrazów i klastrowanie. Na przykład w systemach rekomendacji podobieństwo wektorów może służyć do identyfikowania podobnych elementów na podstawie preferencji użytkownika. W klasyfikacji tekstu podobieństwo wektorów może służyć do określania podobieństwa między dwoma dokumentami lub zdaniami na podstawie ich reprezentacji wektorowych.
Osadzanie
Osadzanie to technika oceny "związku" tekstu, obrazów, filmów wideo lub innych typów informacji. Ocena pozwala modelom uczenia maszynowego efektywnie identyfikować relacje i podobieństwa między danymi, umożliwiając algorytmom identyfikowanie wzorców i dokładne przewidywanie. Na przykład w zadaniu analizy tonacji wyrazy z podobnymi osadzaniami mogą mieć podobne wyniki tonacji.
Wprowadzenie
Utwórz tabelę tblvector
z kolumną embedding
typu vector(3)
reprezentującą wektor trójwymiarowy.
CREATE TABLE tblvector(
id bigserial PRIMARY KEY,
embedding vector(3)
);
Po wygenerowaniu osadzania przy użyciu usługi, takiej jak interfejs API OpenAI, możesz przechowywać wynikowy wektor w bazie danych. Definiowanie wektora jako vector(3)
wyznaczanego na płaszczyźnie [x,y,z] coordinates
trójwymiarowej. Polecenie wstawia pięć nowych wierszy do tblvector
tabeli z podanymi osadzaniami.
INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]'), (3, '[5,4,6]'), (4, '[3,5,7]'), (5, '[7,8,9]');
Za pomocą instrukcji INSERT INTO ... ON CONFLICT
można określić alternatywną akcję, taką jak aktualizowanie rekordów spełniających kryteria. Umożliwia ona obsługę potencjalnych konfliktów w bardziej wydajny i skuteczny sposób.
INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;
Polecenie DELETE
usuwa wiersze z określonej tabeli na podstawie warunków określonych w klauzuli WHERE. Gdy klauzula WHERE nie jest obecna, wszystkie wiersze w tabeli zostaną usunięte.
DELETE FROM tblvector WHERE id = 1;
Aby pobrać wektory i obliczyć podobieństwo, użyj SELECT
instrukcji i wbudowanych operatorów wektorów. Na przykład zapytanie oblicza odległość euklidesy (odległość L2) między danym wektorem a wektorami przechowywanymi w tblvector
tabeli, sortuje wyniki według odległości obliczeniowej i zwraca najbliższe pięć najbardziej podobnych elementów.
SELECT * FROM tblvector
ORDER BY embedding <-> '[3,1,2]'
LIMIT 5;
Zapytanie używa operatora "<->", który jest "operatorem odległości" używanym do obliczania odległości między dwoma wektorami w przestrzeni wielowymiarowej. Zapytanie zwraca wszystkie wiersze o odległości mniejszej niż 6 od wektora [3,1,2].
SELECT * FROM tblvector WHERE embedding <-> '[3,1,2]' < 6;
Polecenie pobiera średnią wartość kolumny "osadzanie" z tabeli "tblvector". Jeśli na przykład kolumna "osadzanie" zawiera wyrazy osadzania dla modelu językowego, średnia wartość tych osadzeń może służyć do reprezentowania całego zdania lub dokumentu.
SELECT AVG(embedding) FROM tblvector;
Operatory wektorowe
pgvector
wprowadza sześć nowych operatorów, które mogą być używane w wektorach:
Operator | opis |
---|---|
+ | dodawanie elementu mądrego |
- | odejmowanie elementu mądrego |
* | mnożenie mnożenia elementów |
<-> | Odległość euklidesowa |
<#> | ujemny produkt wewnętrzny |
<=> | odległość cosinusu |
Funkcje wektorowe
cosine_distance
Oblicza odległość cosinusu między dwoma wektorami.
cosine_distance(vector, vector)
Argumenty
vector
Najpierw vector
.
vector
Drugi vector
.
Typ zwracany
double precision
jako odległość między dwoma podanymi wektorami.
inner_product
Oblicza wewnętrzny iloczyn dwóch wektorów.
inner_product(vector, vector)
Argumenty
vector
Najpierw vector
.
vector
Sekunda vector
Typ zwracany
double precision
jako wewnętrzny iloczyn dwóch wektorów.
l2_distance
Oblicza odległość euklidy (znaną również jako L2) między dwoma wektorami.
l2_distance(vector, vector)
Argumenty
vector
Najpierw vector
.
vector
Sekunda vector
Typ zwracany
double precision
jako odległość euklidesowa między dwoma wektorami.
l1_distance
Oblicza odległość taxicab (znaną również jako L1) między dwoma wektorami.
l1_distance(vector, vector)
Argumenty
vector
Najpierw vector
.
vector
Sekunda vector
Typ zwracany
double precision
jako odległość taksykowa między dwoma wektorami.
vector_dims(vector)
Zwraca wymiary danego wektora.
Argumenty
vector
Klasa vector
.
Typ zwracany
integer
reprezentujący liczbę wymiarów danego wektora.
vector_norms(vector)
Oblicza normę euklidesową danego wektora.
Argumenty
vector
Klasa vector
.
Typ zwracany
double precision
reprezentującą normę euklidesa danego wektora.
Agregacje wektorów
AVG
Oblicza średnią przetworzonych wektorów.
Argumenty
vector
Klasa vector
.
Typ zwracany
vector
reprezentujące średnią przetworzonych wektorów.
SUM
Argumenty
vector
Klasa vector
.
Typ zwracany
vector
reprezentujący sumę przetworzonych wektorów.
Następne kroki
Dowiedz się więcej na temat wydajności, indeksowania i ograniczeń przy użyciu polecenia pgvector
.