pgvectorは、PostgreSQLリレーショナルデータベース管理システム向けのオープンソース拡張機能であり、ベクトル類似性検索のサポートを追加するものです。これにより、ユーザーは高次元のベクトル埋め込みをPostgreSQLのテーブルに直接格納し、意味的に類似したレコードを見つけるための効率的な最近傍検索を実行できます。この拡張機能は2021年4月に初めてリリースされ、以来、既存のデータベースワークフローにベクトル検索を統合するための広く採用されたツールとなっており、特に人工知能や機械学習を伴うアプリケーションで利用されています。
この拡張機能は、階層的ナビゲーショナブルスモールワールド(HNSW)グラフや、積量子化を伴う転置ファイル(IVFFlat)を含む近似最近傍アルゴリズムを実装し、大規模なベクトルコレクションに対する高速な類似性検索を可能にします。PostgreSQLの成熟したトランザクションおよびインデックス基盤を活用することで、pgvectorは、ベクトル検索を従来のリレーショナルクエリ、メタデータフィルタリング、およびハイブリッド検索ワークフローと組み合わせる必要がある開発者に、馴染みのあるSQLインターフェースを提供します。
アーキテクチャと機能
pgvectorはネイティブなPostgreSQL拡張機能として動作し、別個のサービスとして実行されるのではなく、データベースエンジンに直接統合されます。これにより、設定可能な次元(通常は数百から数千の範囲)を持つ浮動小数点数の配列を格納できる新しいvectorデータ型が導入されます。この拡張機能は、正確な最近傍検索と近似最近傍検索の両方をサポートしており、後者はHNSWグラフまたはIVFFlatインデックスを使用して、検索速度と再現精度のバランスを取ります。
pgvectorの主要な設計原則は、標準SQL操作との互換性です。ユーザーはベクトル列を作成し、深層学習モデルによって生成された埋め込みを挿入し、ユークリッド距離には<->、コサイン距離には<=>、負の内積には<#>などの馴染みのある演算子を使用してクエリを実行できます。この拡張機能は、ベクトル列のインデックス作成もサポートしてクエリを高速化し、部分インデックス、並列クエリ実行、高可用性のためのレプリケーションなど、PostgreSQLの組み込み機能と組み合わせることができます。
検索拡張生成
pgvectorの最も一般的なユースケースの1つは、検索拡張生成(RAG)パイプラインであり、大規模言語モデルの応答をドメイン固有の知識で強化します。典型的なRAG設定では、テキスト文書がチャンクに分割され、各チャンクがニューラルネットワークモデルを使用して埋め込みに変換され、結果のベクトルがpgvector対応のPostgreSQLテーブルに格納されます。ユーザーがプロンプトを送信すると、システムはプロンプトの埋め込みを計算し、pgvectorに最も類似した文書チャンクをクエリし、それらのチャンクを追加のコンテキストとして言語モデルに渡します。
このアプローチにより、組織は基盤となるモデルを再トレーニングすることなく、独自の情報や最新の情報を活用する質問応答システム、チャットボット、知識アシスタントを構築できます。pgvectorがベクトル検索と並行してメタデータフィルタリングを処理できることは、RAGにおいて特に価値があり、日付範囲、文書タイプ、アクセス権限などの制約を検索中に適用できるようになります。
専用ベクトルデータベースとの比較
pgvectorは、Milvus、Pinecone、Weaviateなどの専用ベクトルデータベースシステムや、アマゾンウェブサービス、アズール、グーグルクラウドなどのクラウドプロバイダーが提供するベクトル検索機能と競合します。これらのスタンドアロンシステムとは異なり、pgvectorは別個のインフラストラクチャコンポーネントの展開を必要とせず、多くの組織が主要なデータストレージとしてすでに運用している既存のPostgreSQLインスタンス内で実行されます。これにより、運用の複雑さが軽減され、ソースデータを保持する同じデータベースでベクトル検索を実行できるため、システム間のデータ同期の必要性がなくなります。
ただし、専用のベクトルデータベースは、分散シャーディングの組み込みサポート、より洗練された量子化技術、特定の埋め込みモデルエコシステムとの緊密な統合など、pgvectorに欠けている追加機能を提供することがよくあります。数十億のベクトルを超える非常に大規模な展開では、専用システムの方が優れたパフォーマンスやスケーラビリティを提供する場合があります。それでも、pgvectorのシンプルさとSQLとの緊密な結合は、使いやすさとデータ一貫性を優先するスタートアップや企業にとって人気のある選択肢となっています。
採用とエコシステム
この拡張機能は、導入以来大きな勢いを得ています。PostgreSQLコミュニティによって維持されており、主要なLinuxディストリビューションやmacOS向けの標準パッケージマネージャーを通じて利用可能です。アマゾンウェブサービス RDS、Google Cloud SQL、アズール Database for PostgreSQLなどのいくつかのマネージドPostgreSQLプロバイダーが、pgvectorをサポートされる拡張機能として提供しており、データベースを自己ホストしないことを好むユーザーにもアクセス可能にしています。
pgvectorは、オープンAI、アンスロピック、グーグルディープマインドなどの組織からの埋め込みモデルや、BERTやGPTファミリーのオープンソースモデルと組み合わせて使用されることがよくあります。この拡張機能のドキュメントには、Python、JavaScript、Goなどの人気プログラミング言語で埋め込みを生成し、類似性検索を実行するための例が提供されています。このエコシステムのサポートは、eコマースのレコメンデーションエンジンから科学研究、エンタープライズ検索アプリケーションに至るまでの分野での採用に貢献しています。
制限事項と考慮事項
pgvectorは強力なツールですが、ユーザーが認識すべき特定の制限事項があります。この拡張機能はすべてのベクトル操作をネイティブにサポートしているわけではなく、たとえば、一部の専用ベクトルデータベースで利用可能なベクトル演算やクラスタリングのための組み込み関数が欠けています。近似最近傍検索のパフォーマンスは、IVFFlatのリスト数やHNSWのM値とef_construction値など、選択されたインデックスパラメータに大きく依存しており、これらのパラメータの調整には特定のデータセットでの実験が必要です。
さらに、pgvectorはベクトルをテーブルの列に格納するため、非常に大きなベクトルコレクションはかなりのストレージスペースを消費する可能性があります。この拡張機能は、デフォルトでは積量子化などの高度な圧縮技術を実装していませんが、ユーザーは次元を削減したり、バイナリ量子化を手動で使用したりできます。1日あたり数百万のベクトルのリアルタイム取り込みを必要とするワークロードでは、トランザクショナルデータベースでインデックスを維持するオーバーヘッドがボトルネックになる可能性があり、一部のユーザーはPostgreSQLをシステムオブレコードとして維持しながら、ベクトル検索を専用システムにオフロードすることを余儀なくされます。