2026-04-30·実装·⏱ 約 3 分
ベクトル検索の基礎 ─ 埋め込み・コサイン類似度・ANN まで
RAG・推薦・画像検索の根幹となるベクトル検索を、埋め込みの作り方・距離関数の選び方・近似最近傍探索(ANN)アルゴリズムまでまとめて解説。
RAG・推薦システム・画像検索 ── すべての根底にあるのが ベクトル検索。本記事では「埋め込みとは何か」「どう距離を測るか」「どう高速化するか」の 3 軸で全体像を整理します。
1. 埋め込みベクトルを作る
テキストを意味の近さが反映された数百〜数千次元のベクトルに変換するのが 埋め込み(embedding)。OpenAI の text-embedding-3-small なら 1536 次元、Cohere・bge・E5 など多くのモデルが利用できます。
Python: 埋め込み生成
from openai import OpenAI
client = OpenAI()
docs = ['統計検定2級', 'G検定', 'E資格']
resp = client.embeddings.create(
model='text-embedding-3-small',
input=docs,
)
vectors = [d.embedding for d in resp.data]
print(len(vectors), len(vectors[0])) # 3 15362. 距離関数を選ぶ
- コサイン類似度 ─ 角度のみを見る。最も標準的
- 内積 ─ 正規化済みベクトルではコサインと等価。最速
- L2(ユークリッド距離) ─ 大きさも考慮。画像特徴量で時々使う
💡 なぜコサイン?
テキスト埋め込みは『方向 = 意味』『大きさ = 単語の出現量』に対応することが多い。意味だけ見たいので方向だけ比べるコサインがフィット。
3. ANN ─ 件数が増えても高速に
- HNSW(階層的グラフ): 近傍のグラフをマルチレイヤで構築。Pinecone・Qdrant・Weaviate のデフォルト
- IVF + PQ: クラスタリング + 量子化で省メモリ。Faiss の主力
- ScaNN(Google): IVF を高度化。低レイテンシ重視
🛠 実務での目安
1 万件以下: 総当たり(NumPy で十分)。10 万〜100 万件: HNSW(Qdrant・Faiss)。1000 万件以上: IVF+PQ・ScaNN・分散環境。
4. 落とし穴
- 埋め込みモデルの 次元・学習データ・正規化 が一致していないと類似度が壊れる
- チャンクサイズ が大きすぎると意味がぼやけ、小さすぎると文脈不足
- ベクトル検索だけだと固有名詞検索が弱い → ハイブリッド検索(BM25 + ベクトル)が定石
次のステップ
- [RAG 入門](/blog/rag-introduction) ─ ベクトル検索を LLM に繋げる
- [LangChain vs LlamaIndex](/blog/langchain-vs-llamaindex) ─ 実装フレームワーク選び
- [LLM 評価指標 完全ガイド](/blog/llm-evaluation-metrics) ─ 検索品質の測り方
Related Articles
関連記事
- 2026-04-30実装Slack Bot を LLM で作る ─ FastAPI + OpenAI で社内ツール化Slack の Slash Command と Events API を使い、社内チャンネル内で動く LLM Bot を構築。FastAPI バックエンド + OpenAI で 1 日で完成。
- 2026-04-30実装FastAPI 入門 ─ ML モデルを 5 分で API にするPython の高速 Web フレームワーク FastAPI を使って、ML モデルを REST API として公開する最短ルート。型ヒント・自動ドキュメント・非同期対応の 3 拍子。
- 2026-04-30実装Docker 入門 ─ ML 環境の再現性を担保する「自分の PC では動く問題」を解決する Docker。ML プロジェクトの Dockerfile・GPU 対応・docker-compose・Multi-Stage Build までを実用視点で。