ベクトルデータベースとは?AI検索を支える次世代DB技術を解説

what-is-vector-database Uncategorized

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

検討ポイント

  1. データ量:数万件以下なら pgvector やChroma、数百万件以上なら Pinecone や Milvus
  2. 予算:コスト重視なら Weaviate や Chroma(オープンソース)
  3. 運用体制:インフラ管理したくないなら Pinecone(SaaS)
  4. 技術スタック:既に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の無料枠から試してみよう。

関連記事


参考リンク

コメント