Povolení a používání pgvector
ve službě Azure Cosmos DB for PostgreSQL
PLATÍ PRO: Azure Cosmos DB for PostgreSQL (využívající rozšíření databáze Citus do PostgreSQL)
Rozšíření pgvector
přidá do PostgreSQL hledání open source vektorové podobnosti.
V tomto článku se seznámíme s dalšími možnostmi, které pgvector
povoluje . Popisuje koncepty podobnosti vektorů a vkládání a poskytuje pokyny k povolení pgvector
rozšíření. Dozvíme se, jak vytvářet, ukládat a dotazovat vektory.
Můžete také chtít odkazovat na oficiální soubor README projektu.
Povolení rozšíření
Než je budete moct používat, musí být rozšíření PostgreSQL ve vaší databázi povolená. Pokud chcete rozšíření povolit, spusťte příkaz z nástroje psql, který načte zabalené objekty do databáze.
SELECT CREATE_EXTENSION('vector');
Poznámka:
Zakázání použití rozšíření drop_extension()
Koncepty
Podobnost vektorů
Vektorová podobnost je metoda, která se používá k měření, jak podobné dvě položky představují jako vektory, což jsou řady čísel. Vektory se často používají k reprezentaci datových bodů, kde každý prvek vektoru představuje funkci nebo atribut datového bodu.
Podobnost vektorů se běžně počítá pomocí metrik vzdálenosti, jako Euclidean distance
je nebo cosine
podobnost. Euklidská vzdálenost měří přímočarou vzdálenost mezi dvěma vektory v ndimenzionálním prostoru, zatímco kosinus úhlu měří kosinus úhlu mezi dvěma vektory. Hodnoty metrik podobnosti jsou obvykle v rozsahu mezi 0
a 1
, s higher
hodnotami označujícími větší podobnost mezi vektory.
Podobnost vektorů se běžně používá v různých aplikacích, jako jsou systémy doporučení, klasifikace textu, rozpoznávání obrázků a clustering. Například v systémech doporučení lze vektorovou podobnost použít k identifikaci podobných položek na základě předvoleb uživatele. Při klasifikaci textu lze pomocí vektorové podobnosti určit podobnost mezi dvěma dokumenty nebo větami na základě jejich vektorových reprezentací.
Vkládání
Vkládání je technika vyhodnocení "související" textu, obrázků, videí nebo jiných typů informací. Vyhodnocení umožňuje modelům strojového učení efektivně identifikovat vztahy a podobnosti mezi daty, což umožňuje algoritmům identifikovat vzory a provádět přesné předpovědi. Například v úloze analýzy mínění se může očekávat, že slova s podobnými vkládáními budou mít podobné skóre mínění.
Začínáme
Vytvořte tabulku tblvector
se sloupcem embedding
typu vector(3)
představujícím trojrozměrný vektor.
CREATE TABLE tblvector(
id bigserial PRIMARY KEY,
embedding vector(3)
);
Po vygenerování vkládání pomocí služby, jako je rozhraní OpenAI API, můžete výsledný vektor uložit do databáze. Definování vektoru tak, jak vector(3)
určuje [x,y,z] coordinates
v rovině tří dimenzí. Příkaz vloží do tblvector
tabulky pět nových řádků se zadanými vloženými položkami.
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]');
Pomocí INSERT INTO ... ON CONFLICT
příkazu můžete zadat alternativní akci, například aktualizaci záznamů, které splňují kritéria. Umožňuje zpracovávat potenciální konflikty efektivnějším a efektivnějším způsobem.
INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;
Příkaz DELETE
odebere řádky ze zadané tabulky na základě podmínek zadaných v klauzuli WHERE. Pokud klauzule WHERE neexistuje, odstraní se všechny řádky v tabulce.
DELETE FROM tblvector WHERE id = 1;
K načtení vektorů a výpočtu podobnosti použijte SELECT
příkazy a předdefinované vektorové operátory. Například dotaz vypočítá euklidskou vzdálenost (L2 vzdálenost) mezi daným vektorem a vektory uloženými v tblvector
tabulce, seřadí výsledky podle počítané vzdálenosti a vrátí nejbližší pět nejvíce podobných položek.
SELECT * FROM tblvector
ORDER BY embedding <-> '[3,1,2]'
LIMIT 5;
Dotaz používá< operátor "->", což je "operátor vzdálenosti", který se používá k výpočtu vzdálenosti mezi dvěma vektory v multidimenzionálním prostoru. Dotaz vrátí všechny řádky s vzdáleností menší než 6 od vektoru [3,1,2].
SELECT * FROM tblvector WHERE embedding <-> '[3,1,2]' < 6;
Příkaz načte průměrnou hodnotu sloupce embedding z tabulky tblvector. Pokud například sloupec vkládání obsahuje vkládání slov pro jazykový model, může být průměrná hodnota těchto vkládání použita k reprezentaci celé věty nebo dokumentu.
SELECT AVG(embedding) FROM tblvector;
Vektorové operátory
pgvector
zavádí šest nových operátorů, které lze použít u vektorů:
Operátor | Popis |
---|---|
+ | sčítání podle elementů |
- | odčítání podle elementů |
* | Násobení podle elementů |
<-> | Euklidská vzdálenost |
<#> | negativní vnitřní součin |
<=> | kosinus vzdálenost |
Vektorové funkce
cosine_distance
Vypočítá kosinus vzdálenost mezi dvěma vektory.
cosine_distance(vector, vector)
Argumenty
vector
První vector
.
vector
Druhý vector
.
Návratový typ
double precision
vzdálenosti mezi těmito dvěma zadanými vektory.
inner_product
Vypočítá vnitřní součin dvou vektorů.
inner_product(vector, vector)
Argumenty
vector
První vector
.
vector
Vteřina vector
Návratový typ
double precision
vnitřní součin dvou vektorů.
l2_distance
Vypočítá euklidskou vzdálenost (označovanou také jako L2) mezi dvěma vektory.
l2_distance(vector, vector)
Argumenty
vector
První vector
.
vector
Vteřina vector
Návratový typ
double precision
euklidová vzdálenost mezi těmito dvěma vektory.
l1_distance
Vypočítá vzdálenost taxicab (označovanou také jako L1) mezi dvěma vektory.
l1_distance(vector, vector)
Argumenty
vector
První vector
.
vector
Vteřina vector
Návratový typ
double precision
jako vzdálenost taxicab mezi těmito dvěma vektory.
vector_dims(vector)
Vrátí dimenze daného vektoru.
Argumenty
vector
Úloha vector
.
Návratový typ
integer
představující počet dimenzí daného vektoru.
vector_norms(vector)
Vypočítá euklidovou normu daného vektoru.
Argumenty
vector
Úloha vector
.
Návratový typ
double precision
euklidovské normě daného vektoru.
Vektorové agregace
AVG
Vypočítá průměr zpracovaných vektorů.
Argumenty
vector
Úloha vector
.
Návratový typ
vector
představující průměr zpracovaných vektorů.
SUM
Argumenty
vector
Úloha vector
.
Návratový typ
vector
představující součet zpracovaných vektorů.
Další kroky
Další informace o výkonu, indexování a omezeních pomocí pgvector
.