C
Claude Academy
Embeddings

Embeddings 入門

約 12 分 · クイズ 4 問 · 演習 1 問
重要キーワード (4 語)
Embedding (埋め込み) — テキストを高次元ベクトルに変換した表現
Voyage AI (ボヤージュAI) — Anthropic 推奨の embedding 提供企業
Cosine Similarity (コサイン類似度) — ベクトル間の角度で類似度を測る指標
Dimension (次元) — ベクトルの長さ (例: 1024)

Embeddings

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

用途

  • セマンティック検索
  • RAG の検索エンジン
  • 類似 Q&A の探索
  • クラスタリング・分類
  • 重複検知 (deduplication)
  • レコメンデーション

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 voyageai
vo = voyageai.Client()  # 環境変数 VOYAGE_API_KEY

result = vo.embed(
    texts=["猫が好きです", "犬が好きです", "天気がいいです"],
    model="voyage-3-large",
    input_type="document",   # or "query"
)
vectors = result.embeddings  # list[list[float]]

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 の前処理

  • 不要記号を除去 (改行や Markdown 記号)
  • 一定長に切り詰め (モデル上限あり)
  • 言語が混在する場合は多言語対応モデル必須

実装サンプル

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 行以内で。

Hands-on 演習

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

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

  • モデル: sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
  • ライブラリ: sentence-transformers, scikit-learn
  • 出力: 各クラスタに含まれる文の一覧 (Markdown)
▶ Playground を開いて実行
💡 ヒント

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

進捗保存にはログインが必要 クイズに挑戦 (4問)

💬 このレッスンへの質問 (0)

全質問を見る →
質問の投稿には ログイン が必要です。閲覧は誰でも可能です。

まだ質問はありません。最初の 1 件を投稿してみましょう。