ChatGPTやClaude、Geminiなどの生成AIが急速に普及する中で、「ベクトルデータベース」という言葉を耳にする機会が増えている。
ベクトルデータベースは、従来のリレーショナルデータベース(MySQL、PostgreSQL)やNoSQLデータベース(MongoDB)とは根本的に異なる設計思想を持ち、AI時代の「意味的検索」を可能にする次世代のデータベース技術だ。
本記事では、ベクトルデータベースの仕組み、従来のデータベースとの違い、主要製品(Pinecone、Weaviate、Chroma等)の比較、RAGへの活用方法まで、初心者にもわかりやすく解説する。
ベクトルデータベースとは
ベクトルデータベース(Vector Database)とは、データを高次元の数値ベクトルとして保存し、類似度検索を高速に実行できるデータベースである。
従来のデータベースが「完全一致検索」や「範囲検索」を得意とするのに対し、ベクトルデータベースは「意味が似ているデータ」を探すことに特化している。
具体例:従来の検索との違い
従来のキーワード検索:
検索クエリ:「犬の飼い方」
結果:
✓ 「犬の飼い方ガイド」← 完全一致
✗ 「ペットの育て方」← キーワードが一致しないため除外
✗ 「子犬のしつけ方法」← 「犬」は含むが順位は低い
ベクトルデータベースでの意味的検索:
検索クエリ:「犬の飼い方」
結果:
✓ 「犬の飼い方ガイド」← 意味が一致
✓ 「ペットの育て方」← 意味的に関連
✓ 「子犬のしつけ方法」← 意味的に関連
✓ 「愛犬との生活」← 意味的に関連
このように、キーワードが一致しなくても、意味が似ていれば検索結果に含まれるのがベクトルデータベースの特徴だ。
ベクトルデータベースの仕組み
1. Embedding(埋め込み)
まず、テキストや画像などのデータをEmbeddingモデルでベクトル(数値の配列)に変換する。
例:テキストのベクトル化
"犬の飼い方" → [0.23, -0.45, 0.67, ..., 0.12] (1536次元)
"猫の飼い方" → [0.25, -0.43, 0.65, ..., 0.10]
"車の運転方法" → [-0.12, 0.78, -0.34, ..., 0.56]
このベクトルは、「意味」を数値的に表現したものであり、意味が似ているテキストは似たベクトルになる。
Embeddingには以下のようなモデルが使われる:
– OpenAI Embeddings API (text-embedding-3-large)
– Cohere Embed
– Google Vertex AI Embeddings
– Sentence Transformers(オープンソース)
2. ベクトルの保存
生成されたベクトルをベクトルデータベースに保存する。
import pinecone
from openai import OpenAI
# OpenAI Embeddingでベクトル化
client = OpenAI()
response = client.embeddings.create(
model="text-embedding-3-large",
input="犬の飼い方について"
)
vector = response.data[0].embedding
# Pineconeに保存
index = pinecone.Index("my-index")
index.upsert([
("doc1", vector, {"text": "犬の飼い方について"})
])
3. 類似度検索
検索クエリも同じEmbeddingモデルでベクトル化し、データベース内の既存ベクトルとの「距離」を計算する。
# 検索クエリをベクトル化
query_response = client.embeddings.create(
model="text-embedding-3-large",
input="ペットの育て方"
)
query_vector = query_response.data[0].embedding
# 類似ベクトルを検索
results = index.query(
vector=query_vector,
top_k=5,
include_metadata=True
)
距離の計算方法:
– コサイン類似度(Cosine Similarity):最も一般的
– ユークリッド距離(Euclidean Distance)
– ドット積(Dot Product)
4. インデックス構造
高次元ベクトル(1000次元以上)の検索は計算コストが高いため、ベクトルデータベースは以下のようなインデックス技術を使用する。
- HNSW(Hierarchical Navigable Small World):高速かつ高精度
- IVF(Inverted File Index):大規模データに対応
- LSH(Locality-Sensitive Hashing):近似検索
これにより、数百万〜数億件のベクトルでも数ミリ秒で検索できる。
従来のデータベースとの比較
| 項目 | リレーショナルDB(MySQL, PostgreSQL) | NoSQL(MongoDB) | ベクトルDB(Pinecone, Weaviate) |
|---|---|---|---|
| データ構造 | テーブル(行・列) | ドキュメント(JSON) | ベクトル(数値配列) |
| 検索方式 | 完全一致、範囲検索 | キーワード、フィールド検索 | 類似度検索(意味的) |
| 検索例 | WHERE age > 30 |
{category: "tech"} |
類似度 > 0.9 |
| 主な用途 | トランザクション処理、業務システム | ログ、カタログ | AI検索、推薦システム、RAG |
| スケーラビリティ | 垂直スケール | 水平スケール | 水平スケール |
PostgreSQL + pgvector拡張
なお、PostgreSQLにはpgvectorという拡張機能があり、既存のリレーショナルDBにベクトル検索機能を追加できる。小規模プロジェクトではこの選択肢も有効だ。
主要なベクトルデータベース製品
Pinecone
特徴:
– フルマネージドSaaS
– セットアップが簡単
– スケーラビリティが高い
メリット:
– インフラ管理不要
– 無料枠あり(100万ベクトルまで)
– 公式ドキュメントが充実
デメリット:
– コストが高い(大規模利用時)
– オンプレミス不可
料金:
– 無料枠:100万ベクトル、100GB
– 有料:$70/月〜
import pinecone
pinecone.init(api_key="YOUR_API_KEY", environment="us-west1-gcp")
index = pinecone.Index("example-index")
index.upsert([("id1", [0.1, 0.2, ...], {"text": "sample"})])
Weaviate
特徴:
– オープンソース
– GraphQL API
– マルチモーダル対応(テキスト、画像)
メリット:
– 自前サーバーで運用可能
– 柔軟なスキーマ設計
– Hugging FaceやOpenAIと連携
デメリット:
– セットアップがやや複雑
料金:
– オープンソース版:無料
– クラウド版(Weaviate Cloud Services):$25/月〜
import weaviate
client = weaviate.Client("http://localhost:8080")
client.data_object.create(
{"text": "sample document"},
"Document"
)
Chroma
特徴:
– オープンソース
– ローカル開発に最適
– LangChain公式推奨
メリット:
– インストール簡単(pip install chromadb)
– ローカルで動作(外部サービス不要)
– 無料
デメリット:
– 大規模データには不向き
– 本番運用には別途スケーリング対策が必要
料金:
– 完全無料(オープンソース)
import chromadb
client = chromadb.Client()
collection = client.create_collection("docs")
collection.add(
documents=["This is a document"],
ids=["doc1"]
)
その他の製品
- Qdrant:Rust製、高速、オープンソース
- Milvus:大規模向け、CNCF卒業プロジェクト
- Faiss(Meta):ライブラリとして利用、DBではない
- pgvector(PostgreSQL拡張):既存DBに追加可能
RAG(検索拡張生成)への活用
ベクトルデータベースの最も重要な用途の一つがRAG(Retrieval-Augmented Generation)だ。
RAGは、LLMの回答精度を向上させるため、関連情報をベクトルデータベースから検索し、プロンプトに含める技術である。
RAGの基本フロー
ユーザー質問:「2024年の売上はいくらですか?」
↓
[ベクトル化]
↓
[ベクトルDBで類似文書を検索]
↓
検索結果:「2024年の売上は120億円でした」
↓
[LLMに質問+検索結果を渡す]
↓
LLM回答:「2024年の売上は120億円です。」
RAGのメリット
- 最新情報の利用:LLMの学習データにない情報も回答可能
- ハルシネーション削減:事実に基づく回答が可能
- カスタマイズ性:社内文書やプライベートデータを活用
RAG実装例(LangChain + Chroma + OpenAI)
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
# 1. ベクトルDBにドキュメントを保存
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_texts(
texts=["2024年の売上は120億円でした", "2023年は100億円でした"],
embedding=embeddings
)
# 2. RAGチェーンを構築
llm = ChatOpenAI(model="gpt-4o")
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever()
)
# 3. 質問
result = qa_chain.run("2024年の売上はいくらですか?")
print(result) # → "2024年の売上は120億円です。"
詳細は以下の記事で解説している。
– RAG(検索拡張生成)とは?ChatGPTの限界を超える最新技術(※未公開の場合はリンク削除)
ベクトルデータベースの実用例
1. 社内文書検索
従来のキーワード検索では見つからなかった関連文書を、意味的に検索できる。
例:
– 質問「有給休暇の申請方法は?」
– 検索結果:「休暇制度について」「勤怠管理規定」など
2. カスタマーサポート
過去の問い合わせ履歴から、類似の質問と回答を自動提示。
3. 推薦システム
ユーザーの興味や行動履歴をベクトル化し、類似商品・記事を推薦。
4. 画像検索
画像をベクトル化し、「似た画像」を検索。
– 例:不動産サイトで「この部屋に似た物件」を検索
5. コード検索
プログラムコードを意味的に検索し、類似実装を発見。
– 例:GitHub Copilotの内部でも使用されている
ベクトルデータベースの選び方
| ケース | 推奨製品 |
|---|---|
| 個人・小規模プロジェクト | Chroma(無料、簡単) |
| 中小企業の業務システム | Weaviate(自前サーバー)または Pinecone(管理不要) |
| 大規模エンタープライズ | Milvus または Pinecone Enterprise |
| 既存PostgreSQLあり | pgvector |
| 実験・プロトタイピング | Chroma または Faiss |
検討ポイント
- データ量:数万件以下なら pgvector やChroma、数百万件以上なら Pinecone や Milvus
- 予算:コスト重視なら Weaviate や Chroma(オープンソース)
- 運用体制:インフラ管理したくないなら Pinecone(SaaS)
- 技術スタック:既にPostgreSQLを使っているなら pgvector
よくある質問
Q1. ベクトルデータベースは従来のDBを置き換えるものですか?
いいえ。ベクトルデータベースは「類似度検索」に特化しており、トランザクション処理や集計処理は従来のRDBMSやNoSQLが得意です。多くの場合、両者を併用することになります。
Q2. ベクトル化(Embedding)のコストはどのくらいですか?
OpenAI Embeddings API(text-embedding-3-large)の場合、100万トークンあたり約$0.13です。日本語テキスト1万文字を変換しても数円程度なので、コストは比較的低いです。
Q3. ベクトルデータベースのセキュリティは?
Pinecone や Weaviate Cloud などのマネージドサービスは、暗号化やアクセス制御をサポートしています。オンプレミスで運用する場合は、自前でセキュリティ対策が必要です。
Q4. 日本語でも使えますか?
はい。OpenAI Embeddings、Cohere Embed、Google Vertex AI Embeddings などは日本語に対応しています。ただし、モデルによって精度が異なるため、事前にテストすることをお勧めします。
まとめ
ベクトルデータベースは、AI時代の情報検索を革新する次世代技術だ。
ポイント:
– 「意味的な類似性」で検索できる
– Embeddingモデルでテキストをベクトルに変換
– Pinecone(SaaS)、Weaviate(OSS)、Chroma(ローカル)など多様な選択肢
– RAGによってLLMの回答精度を向上
– 従来のDBとは併用が基本
ChatGPTやClaudeを使った社内システム構築、カスタマーサポート自動化、推薦システムなど、ベクトルデータベースの活用シーンは急速に拡大している。まずは無料のChromaやPineconeの無料枠から試してみよう。
関連記事
- RAG(検索拡張生成)とは?ChatGPTの限界を超える最新技術(※未公開の場合はリンク削除)
- Embedding(埋め込み)とは?AIがテキストを理解する仕組み(※未公開の場合はリンク削除)
- ChatGPT APIの使い方入門|Python実装からコスト管理まで
参考リンク
- Pinecone Documentation: docs.pinecone.io
- Weaviate Documentation: weaviate.io/developers/weaviate
- Chroma Documentation: docs.trychroma.com
- OpenAI Embeddings Guide: platform.openai.com/docs/guides/embeddings


コメント