Databases for PostgreSQL、pgvectorを使用してベクトルベースの検索を探索する
pgVector は、ベクトル類似検索のサポートを追加する IBM Cloud® Databases for PostgreSQL 用の拡張機能です。 ベクトル(数値の配列)を保存して照会したり、互いの類似度を計算したりすることができる。 これは特に機械学習アプリケーションで、与えられたベクトルと類似しているベクトル(たとえば画像特徴や単語の埋め込み)を見つけたい場合に便利だ。
pgVector は バージョン15以上でサポートされています。 PostgreSQL
ベクトル列の定義と管理
pgVector を使用して、 Databases for PostgreSQL にベクトル・データを保存し、類似性検索を実行するには、以下の手順を実行する:
-
拡張機能を有効にするには、以下のクエリーを使用します:
CREATE EXTENSION pg_vector; -
以下のクエリのように、格納するベクトルの次元を指定することで、ベクトル・カラムを持つテーブルを作成することができる:
eg: exampledb=# CREATE TABLE sample_image (id SERIAL PRIMARY KEY, embedded_vector vector(5)); CREATE TABLE -
データ・エントリーを挿入し、SELECT ステートメントを使ってフェッチする。
eg: exampledb=# INSERT INTO sample_image (embedded_vector) values ('[1,2,3,4,5]'); INSERT 0 1 exampledb=# INSERT INTO sample_image (embedded_vector) values (array[0.1, 0.2, 0.3, 0.4, 0.5]); INSERT 0 1 exampledb=# select * from sample_image; id | embedded_vector ----+----------------------- 1 | [1,2,3,4,5] 2 | [0.1,0.2,0.3,0.4,0.5] (2 rows) -
検索のパフォーマンスを向上させるには、ベクトル・カラムにインデックスを作成する。
HNSW(Hierarchical Navigable Small World )とIVFFlat(Inverse Vertex File Flat)は、機械学習、データマイニング、情報検索を含むアプリケーションで一般的に採用されているベクトル類似検索の文脈で使用されるインデックス作成手法である。
exampledb=# CREATE INDEX sample_image_embedded_vector_idx on sample_image using hnsw(embedded_vector vector_l2_ops); CREATE INDEX -
pgvectorには、最近傍検索を効率的に行うための様々な演算子が用意されています。 サポートされる演算子や使用例に関する詳細は、 pgvector ドキュメント {: external} を参照してください。
exampledb=# select * from sample_image ORDER BY embedded_vector <=>'[0.1,0.2,0.3,0.4,0.5]'::vector ; id | embedded_vector ----+----------------------- 2 | [0.1,0.2,0.3,0.4,0.5] 1 | [1,2,3,4,5] (2 rows)