← レッスンに戻る
第8章 · 実践プロジェクト

Embeddings 入門

Embeddings · 約 12 分

重要キーワード

English日本語説明
Embedding 埋め込み テキストを高次元ベクトルに変換した表現
Voyage AI ボヤージュAI Anthropic 推奨の embedding 提供企業
Cosine Similarity コサイン類似度 ベクトル間の角度で類似度を測る指標
Dimension 次元 ベクトルの長さ (例: 1024)

Embeddings

Embedding はテキストを 数値ベクトル に変換する技術。 意味が近いテキストはベクトル空間で近くに配置されます。

用途

Anthropic は embedding API を提供しない

Claude は 生成専門。embedding は外部サービスを使います。 Anthropic 公式は Voyage AI を推奨しています。

主要プロバイダ比較

プロバイダ 代表モデル 多言語 特徴
Voyage AI voyage-3-large, voyage-multilingual-2 Anthropic 推奨、高精度
OpenAI text-embedding-3-small/large 普及度 No.1
Cohere embed-multilingual-v3.0 多言語強い
ローカル bge-large, e5, multilingual-e5 無料・自社管理

Voyage AI の使い方

import numpy as np

def cosine(a: list[float], b: list[float]) -> float:
    a, b = np.array(a), np.array(b)
    return float(a @ b / (np.linalg.norm(a) * np.linalg.norm(b)))

Cosine 類似度の計算

import numpy as np

def cosine(a: list[float], b: list[float]) -> float:
    a, b = np.array(a), np.array(b)
    return float(a @ b / (np.linalg.norm(a) * np.linalg.norm(b)))

入力タイプ (input_type)

Voyage と Cohere には: - document (検索対象) - query (ユーザー質問) の区別があり、それぞれ別の最適化がされています。 両方を正しく使い分け ると精度が上がります。

ベクトル DB 選択

用途 特徴
FAISS ローカル/単機 Facebook 製、高速
Chroma プロト/中規模 Python で扱いやすい
pgvector PostgreSQL 拡張 既存 DB と統合
Pinecone / Weaviate / Qdrant クラウド/大規模 マネージド、スケール

Embedding の前処理

実装サンプル

def index_documents(docs: list[str]) -> None:
    res = vo.embed(docs, model="voyage-3-large", input_type="document")
    for doc, vec in zip(docs, res.embeddings):
        save_to_db(doc, vec)

def search(query: str, k: int = 5) -> list[str]:
    qv = vo.embed([query], model="voyage-3-large", input_type="query").embeddings[0]
    return top_k_by_cosine(qv, k)

Eval を忘れずに

Embedding 性能はタスクで変わるので、自分のドメインで MRR / NDCG / Recall@K などを測定して選びましょう。

試す

Embedding の利用例を Claude に説明させる。

▶ Embedding チュートリアル
Voyage AI と FAISS を使った最小限の社内 FAQ セマンティック検索を Python で書いてください。FAQ は 5 件のダミー、検索結果は上位 3 件を表示。20 行以内で。

演習問題

演習 1: ローカル多言語 Embedding でクラスタリング

30 件の短文 (日本語/英語混在) を多言語 embedding でベクトル化し、KMeans で 3 クラスタに分けてください。

  • モデル: sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
  • ライブラリ: sentence-transformers, scikit-learn
  • 出力: 各クラスタに含まれる文の一覧 (Markdown)
スタータープロンプト:
Python スクリプトを書いてください:
1. ダミー 30 件の短文 (日英混在、3 トピック程度に偏らせる) を用意
2. sentence-transformers の paraphrase-multilingual-MiniLM-L12-v2 でベクトル化
3. scikit-learn KMeans n_clusters=3 で分類
4. 各クラスタの文を Markdown で出力
完全コードを示してください。
ヒントを見る

pip install sentence-transformers scikit-learn が必要。クラスタの番号と意味的なラベルは別問題なので、必要なら最後に Claude に「各クラスタに名前を付けて」と頼むと自然な命名が得られます。

理解度チェック

  1. Anthropic 公式が推奨する embedding プロバイダは?
    1. OpenAI
    2. Voyage AI
    3. Cohere
    4. Hugging Face Hub
  2. ベクトル間の類似度を測る最も一般的な指標は?
    1. Hamming 距離
    2. Cosine 類似度
    3. Manhattan 距離
    4. Levenshtein 距離
  3. Voyage や Cohere の embedding でクエリと文書を区別するパラメータは?
    1. model_size
    2. input_type
    3. lang
    4. tier
  4. 次のうちベクトル DB でないのは?
    1. FAISS
    2. Chroma
    3. pgvector
    4. Photoshop
解答と解説を見る
  1. B — Anthropic は Voyage AI を推奨しています。
  2. B — 高次元ベクトルでは cosine 類似度が標準です。
  3. B — input_type="query" / "document" で最適化が変わります。
  4. D — Photoshop は画像編集ソフトです。