このドキュメントでは、pgvector 拡張機能を使用して AlloyDB for PostgreSQL でベクトル類似性検索を行う方法について説明します。ベクトル類似性検索(最近傍探索とも呼ばれます)を使用すると、指定されたクエリベクトルに最も類似するデータポイントを見つけることができます。
エンベディングを保存してインデックスに登録した後、AlloyDB データベースに対して意味的に類似したベクトルをクエリできます。pgvector クエリ機能を使用して、エンベディング ベクトルの最近傍を検索します。
ベクトル エンベディングの保存とインデックスの作成の詳細については、ベクトル エンベディングを保存するとインデックスを作成するをご覧ください。
ベクトル入力を使用して類似性検索を実行する
類似性検索を実行するには、テーブル、エンベディング列、距離関数、ターゲット エンベディング、返す行数を指定します。embedding() 関数を使用してテキストをベクトルに変換し、pgvector 演算子を使用してベクトルと保存されたエンベディングを比較することもできます。
エンベディング ベクトルの最も近いセマンティック ネイバーを見つけるには、次のサンプルクエリを実行します。ここでは、インデックスの作成時に使用した距離関数を設定します。
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
LIMIT ROW_COUNT
次のように置き換えます。
TABLE: テキストを比較するエンベディングを含むテーブル。EMBEDDING_COLUMN: 保存されたエンベディングを含む列。DISTANCE_FUNCTION_QUERY: このクエリで使用する距離関数。インデックスの作成時に使用した距離関数に基づいて、次のいずれかを選択します。L2 距離:
<->内積:
<#>コサイン距離:
<=>
EMBEDDING: 保存されているセマンティック ネイバーの中で最も近いものを見つけるエンベディング ベクトル。ROW_COUNT: 返される行数。最も適合するものが 1 つだけ必要な場合は、
1を指定します。
他のクエリの例については、クエリをご覧ください。
テキスト入力で pgvector を使用して類似性検索を実行する
embedding() 関数を使用してテキストをベクトルに変換し、意味的に最も類似したエンベディングを含むデータベース行を見つけることもできます。標準の pgvector PostgreSQL 拡張機能は AlloyDB 用にカスタマイズされており、vector と呼ばれます。ベクトルを pgvector 最近傍演算子(コサイン距離の <=> など)のいずれかに適用します。
embedding() は real 配列を返すため、これらの値を pgvector 演算子で使用するには、embedding() 呼び出しを vector に明示的にキャストする必要があります。
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')
LIMIT ROW_COUNT
次のように置き換えます。
MODEL_ID: クエリするモデルの ID。Vertex AI Model Garden を使用している場合は、モデル ID として
text-embedding-005を指定します。これらは、AlloyDB がテキスト エンベディングに使用できるクラウドベースのモデルです。詳細については、テキスト エンベディングをご覧ください。省略可:
VERSION_TAG: クエリするモデルのバージョンタグ。タグの前に@を付けます。Vertex AI で
text-embedding-005英語モデルのいずれかを使用している場合は、モデル バージョンに記載されているバージョンタグのいずれかを指定します(例:text-embedding-005)。バージョンタグは常に指定することを強くおすすめします。バージョンタグを指定しない場合、AlloyDB は最新のモデル バージョンを使用します。これにより、予期しない結果が生じる可能性があります。
TEXT: ベクトル エンベディングに変換するテキスト。
フィルタされた KNN 検索を高速化するには、AlloyDB カラム型エンジンを使用します。詳細については、フィルタ付きベクトル検索を高速化する(プレビュー)とカラム型エンジンを構成するをご覧ください。
次のステップ
- ベクトル検索のチュートリアルを実行する
- ベクトルクエリのパフォーマンスをチューニングする
- ベクトル インデックス指標
- AlloyDB、pgvector、モデル エンドポイント管理を使用してスマート ショッピング アシスタントを構築する方法について学習する。