pgvector使用ガイド
pgvector
はPostgreSQLのサードパーティ製拡張モジュールで、ベクトルデータ型およびIVFFlatとHNSWアクセス方法を提供します。これは機械学習、画像処理、自然言語処理などのベクトルデータが必要なシーンで効果的に使用できます。この記事では、ServBayでのpgvector
のインストールと使用方法について詳しく説明します。
pgvectorのインストール
ServBayにはすでにpgvector
拡張モジュールが含まれているため、データベースで有効化するだけで済みます。以下はpgvector
を有効化する手順です:
PostgreSQLデータベースに接続:
bashpsql -U your_username -d your_database
1拡張の作成:
sqlCREATE EXTENSION vector;
1インストールの検証:
sql\dx
1
pgvectorの設定
pgvector
を有効化した後、ベクトルデータを作成・管理し、様々なアクセス方法を使用できます。
ベクトルデータテーブルの作成
ベクトルデータを含むテーブルを作成する方法の例を示します。
テーブルの作成:
sqlCREATE TABLE embeddings ( id SERIAL PRIMARY KEY, vector VECTOR(3) );
1
2
3
4サンプルデータの挿入:
sqlINSERT INTO embeddings (vector) VALUES ('[0.1, 0.2, 0.3]'), ('[0.4, 0.5, 0.6]'), ('[0.7, 0.8, 0.9]');
1
2
3
4
ベクトルインデックスの作成
クエリパフォーマンスを向上させるためには、ベクトル列にインデックスを作成することをお勧めします。
IVFFlatインデックスの作成:
sqlCREATE INDEX idx_ivfflat_vector ON embeddings USING ivfflat (vector) WITH (lists = 100);
1HNSWインデックスの作成:
sqlCREATE INDEX idx_hnsw_vector ON embeddings USING hnsw (vector) WITH (m = 16, ef_construction = 200);
1
pgvectorを使用したベクトルクエリ
以下は一般的なベクトルクエリの例です。
近傍クエリ
- 最も近いベクトルのクエリ:sql
SELECT id, vector FROM embeddings ORDER BY vector <-> '[0.2, 0.3, 0.4]' LIMIT 5;
1
2
3
ベクトル類似度クエリ
- ベクトル類似度のクエリ:sql
SELECT id, vector, (vector <-> '[0.2, 0.3, 0.4]') AS similarity FROM embeddings ORDER BY similarity LIMIT 5;
1
2
3
ベクトルデータの可視化
pgvector
のベクトルデータを可視化するために、様々なデータ可視化ツール(例えばMatplotlib)を使用できます。
Matplotlibの使用
Matplotlibのインストール:
bashpip install matplotlib
1Pythonスクリプトの作成:
pythonimport psycopg2 import matplotlib.pyplot as plt # PostgreSQLデータベースに接続 conn = psycopg2.connect( dbname="your_database", user="your_username", password="your_password", host="localhost" ) cur = conn.cursor() # ベクトルデータのクエリ cur.execute("SELECT vector FROM embeddings") vectors = cur.fetchall() # ベクトル座標の抽出 x = [v[0][0] for v in vectors] y = [v[0][1] for v in vectors] z = [v[0][2] for v in vectors] # 3D散布図の作成 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x, y, z) ax.set_xlabel('X Label') ax.set_ylabel('Y Label') ax.set_zlabel('Z Label') plt.show() # データベース接続の終了 cur.close() conn.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
まとめ
pgvector
は強力なベクトル拡張モジュールで、簡単な設定と使用によって、PostgreSQLで効率的なベクトルデータの保存とクエリを実現できます。ServBayにはすでにpgvector
が組み込まれているため、この記事の手順に従ってインストールと設定を行うだけで、使用を開始できます。さまざまなベクトルクエリと分析機能を通じて、ベクトルデータをより有効に活用し、アプリケーションに信頼性の高いデータベースサポートを提供することができます。