Udostępnij za pośrednictwem


Włączanie i używanie narzędzia pgvector w usłudze Azure Database for PostgreSQL — serwer elastyczny

DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny

Rozszerzenie pgvector dodaje wyszukiwanie wektorów typu open source do bazy danych PostgreSQL.

W tym artykule przedstawiono dodatkowe możliwości włączone przez pgvectorusł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

Przed włączeniem pgvector w wystąpieniu serwera elastycznego usługi Azure Database for PostgreSQL należy dodać go do listy dozwolonych zgodnie z opisem w temacie how to use PostgreSQL extensions (Jak używać rozszerzeń PostgreSQL) i sprawdzić, czy dodano je poprawnie, uruchamiając polecenie SHOW azure.extensions;.

Ważne

Zwróć uwagę, że chociaż cała społeczność postgreSQL ma tendencję do odwoływania się do tego rozszerzenia jako pgvector, nazwa pliku binarnego i samo rozszerzenie to po prostu vector. Należy to wziąć pod uwagę, ponieważ jest to nazwa, której należy użyć do jej listy dozwolonych lub utworzenia jej w dowolnej bazie danych za pomocą polecenia CREATE EXTENSION.

Następnie możesz zainstalować rozszerzenie, łącząc się z docelową bazą danych i uruchamiając polecenie CREATE EXTENSION . Należy powtórzyć polecenie oddzielnie dla każdej bazy danych, w której ma być dostępne rozszerzenie.

CREATE EXTENSION vector;

Uwaga

Aby usunąć rozszerzenie z aktualnie połączonej bazy danych, użyj polecenia DROP EXTENSION vector;.

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.

Podziel się swoimi sugestiami i usterkami z zespołem produktu usługi Azure Database for PostgreSQL.