統計ロードマップ
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 1536

2. 距離関数を選ぶ

  • コサイン類似度 ─ 角度のみを見る。最も標準的
  • 内積 ─ 正規化済みベクトルではコサインと等価。最速
  • 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

関連記事