FastEmbed - 軽量ローカルエンベディング チートシート
FastEmbed(Qdrant)は高速な軽量ライブラリ — ローカルでテキストエンベディング生成。ONNX Runtime 経由でモデル実行(PyTorch 重い依存関係なし)で、小さく高速インストール、CPU 効率的。Dense エンベディング以外に Sparse(BM25、SPLADE)、後期相互作用(ColBERT)、リランキングモデルサポート — RAG 向けハイブリッド Dense+Sparse 検索構築に必要すべて。Qdrant ベクトルデータベースとタイト統合。
インストール
| 方法 | コマンド |
|---|
| pip | pip install fastembed |
| GPU(CUDA) | pip install fastembed-gpu |
| 確認 | python -c "from fastembed import TextEmbedding; print('ok')" |
Dense エンベディング
from fastembed import TextEmbedding
model = TextEmbedding("BAAI/bge-small-en-v1.5") # 初回ダウンロード
docs = ["FastEmbed runs on ONNX.", "It is CPU-friendly."]
vectors = list(model.embed(docs)) # numpy 配列のジェネレーター
print(len(vectors), vectors[0].shape)
| 呼び出し | 説明 |
|---|
TextEmbedding(model_name) | Dense エンベディングモデルをロード |
.embed(list) | ドキュメント埋め込み(バッチ処理、遅延) |
.query_embed(str) | クエリ埋め込み(モデルにより q/d 異なる) |
.passage_embed(list) | パッセージ埋め込み |
TextEmbedding.list_supported_models() | 利用モデル確認 |
モデルタイプ
| タイプ | クラス | 用途 |
|---|
| Dense | TextEmbedding | セマンティック類似度 |
| Sparse(BM25/SPLADE) | SparseTextEmbedding | キーワード/正確語マッチング |
| 後期相互作用(ColBERT) | LateInteractionTextEmbedding | 高精度リランキング検索 |
| リランキング | TextCrossEncoder | 候補の並べ替え |
| 画像 | ImageEmbedding | マルチモーダルエンベディング |
Sparse エンベディング(ハイブリッド検索向け)
from fastembed import SparseTextEmbedding
sparse = SparseTextEmbedding("Qdrant/bm25")
sv = list(sparse.embed(["exact term ABC-123 matters"]))
print(sv[0].indices, sv[0].values) # sparse: トークンインデックス + 重み
Sparse ベクトルは Dense エンベディングが平坦化する正確語(識別子、数字)を捉える — ハイブリッド検索での強力さの鍵。
リランキング
from fastembed.rerank.cross_encoder import TextCrossEncoder
reranker = TextCrossEncoder("Xenova/ms-marco-MiniLM-L-6-v2")
scores = reranker.rerank("what is fastembed?",
["FastEmbed is an embedding lib.", "Unrelated text."])
Qdrant でのハイブリッド検索
from fastembed import TextEmbedding, SparseTextEmbedding
# 各チャンク毎に Dense と Sparse ベクトル計算、Qdrant にアップサート
# その後 Dense・Sparse 両方でクエリして Qdrant に融合(RRF)させる
dense = TextEmbedding("BAAI/bge-small-en-v1.5")
sparse = SparseTextEmbedding("Qdrant/bm25")
| ステップ | ツール |
|---|
| Dense ベクトル | TextEmbedding |
| Sparse ベクトル | SparseTextEmbedding(BM25) |
| ストア + 融合 | Qdrant ネイティブハイブリッド query |
| オプション リランク | TextCrossEncoder |
FastEmbed の理由(設計)
| 特性 | 利点 |
|---|
| ONNX Runtime | PyTorch なし。小規模インストール、CPU 高速 |
| 量子化モデル | 低メモリ/レイテンシー |
| 遅延ジェネレーター | エンベディングストリーミング、低メモリ |
| ローカル | API 呼び出しなし。データはプライベート |
一般的なワークフロー
# コーパス一括埋め込みベクトルDB 向け(CPU 対応)
from fastembed import TextEmbedding
model = TextEmbedding("BAAI/bge-base-en-v1.5")
embeddings = list(model.embed(corpus, batch_size=64))
# ハイブリッド検索構築:Dense + BM25 Sparse、Qdrant で融合
FastEmbed vs 代替案
| 項目 | FastEmbed | sentence-transformers | OpenAI embeddings API |
|---|
| Runtime | ONNX(torch なし) | PyTorch | ホストされた API |
| Sparse/ColBERT | ビルトイン | 追加ライブ | なし |
| ローカル/プライベート | はい | はい | いいえ |
| 最適用途 | 軽量ローカル + ハイブリッド | 完全 torch 生態系 | 管理簡潔性 |
リソース