このドキュメントでは、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
最近傍演算子のいずれか(L2 距離の <->
など)に適用して、意味的に最も類似したエンベディングを含むデータベース行を見つけます。
embedding()
は real
配列を返すため、これらの値を pgvector
演算子で使用するには、embedding()
呼び出しを vector
に明示的にキャストする必要があります。
CREATE EXTENSION IF NOT EXISTS google_ml_integration VERSION '1.2';
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> 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
: ベクトル エンベディングに変換するテキスト。
次のステップ
- ベクトル検索チュートリアルを実行する
- ベクトル クエリのパフォーマンスを調整する
- ベクトル インデックスの指標
- AlloyDB、pgvector、モデル エンドポイント管理を使用してスマート ショッピング アシスタントを構築する方法