pgvector 拡張機能により、オープンソース ベクトルの類似性検索が PostgreSQL に追加されます。
この記事では、pgvector で有効になっている追加の機能について説明します。 ベクトルの類似性と埋め込みの概念について説明し、pgvector 拡張機能を有効にする方法に関するガイダンスを提供します。 ベクトルを作成、保存、クエリする方法について学習します。
プロジェクトの公式 README を参照することもできます。
拡張機能を有効にする
Azure Database for PostgreSQL フレキシブル サーバー インスタンスで pgvector を有効にする前に、「PostgreSQL 拡張機能の使用方法」で説明されているように、それを許可リストに追加し、正しく追加されているかを SHOW azure.extensions; を実行して確認する必要があります。
重要
すべての PostgreSQL コミュニティが、この拡張機能を pgvector として参照する傾向がありますが、バイナリと拡張機能自体の名前は、単純に vector であることに注意してください。 この名前は、CREATE EXTENSION コマンドを介し任意のデータベース上で許可リストに使用したり作成したりする際に、使用する必要があるという点を考慮に入れてください。
その後、ターゲット データベースに接続して CREATE EXTENSION コマンドを実行することで、拡張機能をインストールできます。 拡張機能を使用できるようにしたいデータベースごとに、このコマンドを個別に繰り返す必要があります。
CREATE EXTENSION vector;
Note
現在接続されているデータベースから拡張機能を削除するには、DROP EXTENSION vector; を使用します。
概念
ベクトルの類似性
ベクトルの類似性は、2 つの項目をベクトル (一連の数値) として表すことによってどのように類似しているかを測定するために使用されるメソッドです。 ベクトルは、多くの場合、データ ポイントを表すために使用され、ベクトルの各要素は、データ ポイントの特徴または属性を表します。
ベクトルの類似性は通常、Euclidean distance または cosine の類似性などの距離メトリックを使用して計算されます。 ユークリッド距離は、n 次元空間内の 2 つのベクトル間の直線距離を測定し、コサイン類似性は 2 つのベクトル間の角度のコサインを測定します。 類似性メトリックの値は通常、0 から 1 までの範囲にあり、higher 値はベクトル間の類似性がより高いことを示します。
ベクトルの類似性は、レコメンデーション システム、テキスト分類、画像認識、クラスタリングなどのさまざまなアプリケーションで広く使用されています。 たとえば、レコメンデーション システムでは、ベクトルの類似性を使用して、ユーザーの好みに基づいて同様の項目を識別できます。 テキスト分類では、ベクトルの類似性を使用して、ベクトル表現に基づいて 2 つのドキュメントまたは文間の類似性を判断できます。
埋め込み
埋め込みは、テキスト、画像、ビデオ、またはその他の種類の情報の「関連性」を評価する手法です。 この評価により、機械学習モデルはデータ間の関係と類似性を効率的に識別でき、アルゴリズムはパターンを識別し、正確な予測を行うことができます。 たとえば、感情分析タスクでは、埋め込みの類似した単語のセンチメント スコアが似ていると予想される場合があります。
作業の開始
3 次元ベクトルを表すembedding型の列vector(3)を持つテーブル tblvector を作成します。
CREATE TABLE tblvector(
id bigserial PRIMARY KEY,
embedding vector(3)
);
OpenAI API などのサービスを使用して埋め込みを生成したら、結果のベクトルをデータベースに保存できます。 ベクトルを vector(3) として定義すると、3 次元平面で [x,y,z] coordinates が指定されます。 このコマンドは、この提供された埋め込みを使用して tblvector テーブルに 5 つの新しい行を挿入します。
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]');
INSERT INTO ... ON CONFLICT ステートメントを使用すると、条件に一致するレコードの更新などの代替アクションを指定できます。 これにより、潜在的な競合をより効率的かつ効果的に処理できるようになります。
INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;
DELETE コマンドは、WHERE 句で指定された条件に基づいて、指定されたテーブルから行を削除します。 WHERE 句が存在しない場合、テーブル内のすべての行が削除されます。
DELETE FROM tblvector WHERE id = 1;
ベクトルを取得して類似性を計算するには、SELECT ステートメントと組み込みのベクトル演算子を使用します。 たとえば、クエリは、指定されたベクトルと tblvector テーブルに格納されているベクトルの間のユークリッド距離 (L2 距離) を計算し、計算された距離によって結果を並べ替え、5 つの最も近い、最も類似した項目を返します。
SELECT * FROM tblvector
ORDER BY embedding <-> '[3,1,2]'
LIMIT 5;
クエリでは、多次元空間内の 2 つのベクトル間の距離を計算するために使用される「距離演算子」である「<->」演算子が使用されます。 クエリは、ベクトル [3,1,2] からの距離が 6 未満のすべての行を返します。
SELECT * FROM tblvector WHERE embedding <-> '[3,1,2]' < 6;
このコマンドは、"tblvector" テーブルから "embedding" 列の平均値を取得します。 たとえば、"埋め込み" 列に言語モデルの単語埋め込みが含まれている場合、これらの埋め込みの平均値を使用して、文全体またはドキュメント全体を表すことができます。
SELECT AVG(embedding) FROM tblvector;
ベクトル演算子
pgvector には、ベクトルに対し使用できる 6 つの新しい演算子が導入されています。
| 演算子 | 説明 |
|---|---|
| + | 要素ごとの加算 |
| - | 要素ごとの減算 |
| * | 要素ごとの乗算 |
| <-> | ユークリッド距離 |
| <#> | 負の内積 |
| <=> | コサイン距離 |
ベクトル関数
cosine_distance
2 つのベクトル間のコサイン距離を計算します。
cosine_distance(vector, vector)
引数
vector
1 番目の vector。
vector
2 番目の vector。
の戻り値の型 :
2 つの指定されたベクトル間の距離を表す double precision。
inner_product
2 つのベクトルの内積を計算します。
inner_product(vector, vector)
引数
vector
1 番目の vector。
vector
2 番目の vector
の戻り値の型 :
2 つのベクトルの内積を表す double precision。
l2_distance
2 つのベクトル間のユークリッド距離 (L2 とも呼ばれます) を計算します。
l2_distance(vector, vector)
引数
vector
1 番目の vector。
vector
2 番目の vector
の戻り値の型 :
2 つのベクトル間のユークリッド距離を表す double precision。
l1_distance
2 つのベクトル間のタクシー距離 (L1 とも呼ばれます) を計算します。
l1_distance(vector, vector)
引数
vector
1 番目の vector。
vector
2 番目の vector
の戻り値の型 :
2 つのベクトル間のタクシー距離を表す double precision。
vector_dims(vector)
指定されたベクトルの次元を返します。
引数
vector
vector です。
の戻り値の型 :
指定されたベクトルの次元数を表す integer。
vector_norms(vector)
特定のベクトルのユークリッド ノルムを計算します。
引数
vector
vector です。
の戻り値の型 :
指定されたベクトルのユークリッド ノルムを表す double precision。
ベクトル集計
AVG
処理されたベクトルの平均を計算します。
引数
vector
vector です。
の戻り値の型 :
処理されたベクトルの平均を表す vector。
SUM
引数
vector
vector です。
の戻り値の型 :
処理されたベクトルの合計を表す vector。
関連コンテンツ
- Azure Database for PostgreSQL フレキシブル サーバーで pgvector を使用する場合のパフォーマンスを最適化します。
- Azure Database for PostgreSQL フレキシブル サーバーを Azure Cognitive Services と統合します。
- ローカルにデプロイされた LLM (プレビュー) を使用して、Azure Database for PostgreSQL フレキシブル サーバーにベクター埋め込みを生成します。
- Azure Database for PostgreSQL と Azure Machine Learning サービスを統合する。
- Azure Database for PostgreSQL フレキシブル サーバーで Azure OpenAI を使用してベクター埋め込みを生成します。
- Azure Database for PostgreSQL フレキシブル サーバーの Azure AI 拡張機能。
- Azure Database for PostgreSQL フレキシブル サーバーを使用した生成 AI。
- Azure Database for PostgreSQL フレキシブル サーバーと Azure OpenAI を使用したレコメンデーション システム。
- Azure Database for PostgreSQL フレキシブル サーバーと Azure OpenAI を使用したセマンティック検索。
- Azure Database for PostgreSQL フレキシブル サーバーで pgvector を有効にして使用します。