pgvecto.rs は、ベクトル類似性検索機能を提供する Postgres 拡張機能です。これは Rust で書かれており、pgrx に基づいています。
詳細については、pgvecto.rs と pgvector をチェックしてください。
特徴 | pgvecto.rs | ベクター |
---|---|---|
フィルタリング | ベクトル検索およびリレーショナル クエリ用の VBASE メソッドを導入します (例: 単一ベクトル TopK + フィルター + 結合)。 | フィルターを適用すると、結果が不完全になる場合があります。たとえば、当初結果を 10 件に制限するつもりだった場合、フィルターを使用すると結果が 5 件のみになる可能性があります。 |
ベクトルの次元 | 最大 65535 次元をサポートします。 | 最大 2000 次元をサポートします。 |
SIMD | SIMD 命令は実行時に動的にディスパッチされ、特定のマシンの機能に基づいてパフォーマンスを最大化します。 | 0.7.0 の Linux x86-64 で距離関数の CPU ディスパッチを追加しました。 |
データ型 | 追加のデータ型、バイナリ ベクトル、FP16 (16 ビット浮動小数点)、および INT8 (8 ビット整数) が導入されました。 | - |
インデックス作成 | インデックスのストレージとメモリを PostgreSQL とは別に処理します | PostgreSQL のネイティブ ストレージ エンジンに依存 |
WALのサポート | データの先行書き込みログ (WAL) サポートを提供します。インデックスのサポートは進行中です。 | インデックスとデータの先行書き込みログ (WAL) サポートを提供します。 |
新規ユーザーの場合は、すぐに使い始めるために Docker イメージを使用することをお勧めします。
docker run
--name pgvecto-rs-demo
-e POSTGRES_PASSWORD=mysecretpassword
-p 5432:5432
-d tensorchord/pgvecto-rs:pg16-v0.2.1
その後、 psql
コマンド ライン ツールを使用してデータベースに接続できます。デフォルトのユーザー名はpostgres
、デフォルトのパスワードはmysecretpassword
です。
psql -h localhost -p 5432 -U postgres
次の SQL を実行して、拡張機能が有効になっていることを確認します。
DROP EXTENSION IF EXISTS vectors;
CREATE EXTENSION vectors;
pgvecto.rs では、n 次元ベクトルを表す新しいデータ型vector(n)
が導入されています。括弧内のn
ベクトルの次元を表します。
次の SQL を使用してテーブルを作成できます。
-- create table with a vector column
CREATE TABLE items (
id bigserial PRIMARY KEY ,
embedding vector( 3 ) NOT NULL -- 3 dimensions
);
ヒント
vector(n)
次の場合にのみ有効なデータ型です。 vector(3)
型の値を作成することができます。 vector
も有効なデータ型です。ただし、まだ置くことはできませんvector
使用する場合、または列によって示される次元と一致しない値がある場合、その列にインデックスを作成することはできません。
次に、次のようにテーブルにベクトル データを入力できます。
-- insert values
INSERT INTO items (embedding)
VALUES ( ' [1,2,3] ' ), ( ' [4,5,6] ' );
-- or insert values using a casting from array to vector
INSERT INTO items (embedding)
VALUES (ARRAY[ 1 , 2 , 3 ]:: real []), (ARRAY[ 4 , 5 , 6 ]:: real []);
2 つのベクトル間の距離を計算する 3 つの演算子をサポートしています。
<->
: ユークリッドの二乗距離、次のように定義されます。 <#>
: 負の内積、次のように定義されます。 <=>
: コサイン距離、次のように定義されます。 -- call the distance function through operators
-- squared Euclidean distance
SELECT ' [1, 2, 3] ' ::vector < - > ' [3, 2, 1] ' ::vector;
-- negative dot product
SELECT ' [1, 2, 3] ' ::vector < # > '[3, 2, 1]'::vector;
-- cosine distance
SELECT ' [1, 2, 3] ' ::vector <=> ' [3, 2, 1] ' ::vector;
このように簡単にベクトルを検索できます。
-- query the similar embeddings
SELECT * FROM items ORDER BY embedding < - > ' [3,2,1] ' LIMIT 5 ;
質問応答アプリケーションのチュートリアルをご覧ください。
vecf16
型はスカラー型以外はvector
と同じです。 16 ビット浮動小数点数を格納します。メモリ使用量を減らしてパフォーマンスを向上させたい場合は、 vector
型をvecf16
型に置き換えてみることができます。
ロードマップをご覧ください。飛び込んでみませんか?ディスカッションや貢献を歓迎します!
good first issue ?
問題! 私たちは、オープンソース コミュニティ、個人、パートナーからのあらゆる種類の貢献を歓迎します。
これらの素晴らしい人々に感謝します (絵文字キー):
あなたの貢献を追加してください |
このプロジェクトは、全員参加者の仕様に従っています。あらゆる種類の貢献を歓迎します!
以下のプロジェクトのおかげで: