Azure Cosmos DB for PostgreSQL で
Important
Azure Cosmos DB for PostgreSQL は、新しいプロジェクトではサポートされなくなりました。 このサービスは、新しいプロジェクトには使用しないでください。 代わりに、次の 2 つのサービスのいずれかを使用します。
Azure Cosmos DB for NoSQL は、99.999% 可用性サービス レベル アグリーメント (SLA)、インスタント 自動スケール、および複数のリージョン間の自動フェールオーバーを使用する 大規模 なシナリオ向けに設計された分散データベース ソリューションに使用します。
オープンソースの Citus 拡張機能を使用して、シャード化された PostgreSQL 用の Azure Database For PostgreSQL のエラスティック クラスター機能 を使用します。
pgvector 拡張機能により、オープンソース ベクトルの類似性検索が PostgreSQL に追加されます。
この記事では、pgvector で有効になっている追加の機能について説明します。 ベクトルの類似性と埋め込みの概念について説明し、pgvector 拡張機能を有効にする方法に関するガイダンスを提供します。 ベクトルを作成、保存、クエリする方法について学習します。
プロジェクトの公式 README を参照することもできます。
拡張機能を有効にする
PostgreSQL 拡張機能を使用するには、その拡張機能がデータベースで有効にされている必要があります。 拡張機能を有効にするには、psql ツールからコマンドを実行して、パッケージ化されたオブジェクトをデータベースに読み込みます。
SELECT CREATE_EXTENSION('vector');
Note
拡張機能を無効にするには、drop_extension() を使用します。
概念
ベクトルの類似性
ベクトルの類似性は、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。
次の手順
詳細については、pgvector を使用して、パフォーマンス、インデックス作成、制限事項を参照してください。