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