【ぴーじーべくたー】

pgvector とは?

最終更新:
💡 PostgreSQLに、ベクトル検索を足す拡張機能

PostgreSQLにベクトル型と類似検索を追加する拡張機能。数値の列を通常のデータと一緒に保存し、距離を使って近いデータをSQLで検索できる。文章などの埋め込み生成は別途用意する。

📌 このページのポイント
PostgreSQLの中で、ベクトルを検索する 埋め込みモデル等 文章 → 数値の列 PostgreSQL + pgvector 通常の列とvector列 保存 検索するベクトル 比較するモデル・次元をそろえる 距離の小さい順に取得 ORDER BY embedding <-> q LIMIT 5 (L2距離の例) 条件 導入 → DBごとに有効化。近似検索は速度と検索漏れを調整
外部で作った埋め込みを保存し、距離の小さい順に検索する例。
ひよこ ひよこ
pgvectorって、PostgreSQLと何が違うの?
ペンギン先生 ペンギン先生
PostgreSQLにベクトルの保存と検索を足す拡張機能だよ。通常の列とベクトル列を一つのテーブルに置けて、SQLやJOIN、トランザクションも使える。独立したデータベース製品ではなく、PostgreSQLの中で機能を追加するんだ。
ひよこ ひよこ
ベクトル検索って何に使うの?
ペンギン先生 ペンギン先生
文章や画像を埋め込みモデルなどで数値の列に変換し、近いベクトルを探す用途があるよ。pgvector自体が文章の意味を理解して埋め込みを作るわけではない。比較できるモデルと次元をそろえ、用途に合う距離を選ぶ。近い結果が目的に合うかの評価も必要だね。
ひよこ ひよこ
PostgreSQLがあればすぐ使えるの?
ペンギン先生 ペンギン先生
まずサーバーにpgvectorのファイルを導入するか、対応しているサービスを使う。その後、利用するDBごとに権限のある利用者がCREATE EXTENSION vectorで有効にするよ。SQLを一行実行すれば未導入のサーバーでも使える、という意味ではないんだ。
ひよこ ひよこ
検索は必ず速くなるの?
ペンギン先生 ペンギン先生
通常は指定した距離で厳密な最近傍検索を行う。HNSWやIVFFlatの近似インデックスを使うと、検索漏れとのバランスを取って高速化を狙えるよ。図のように距離の小さい順で件数を絞る。実際の速度は件数・次元・絞り込み・設定などで変わるので、特定の規模なら必ず高速とは言えないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「pgvector」って出てきたら「PostgreSQLでベクトル検索ができる拡張機能」と思えればだいたいOK!
📖 おまけ:英語の意味
「pgvector」 = PostgreSQLのベクトル拡張
💬 pgはPostgreSQL、vectorはベクトルを表す名前。検索では、文章や画像などの特徴を数値の列として扱うよ

参考資料

← 用語集にもどる