コンテンツにスキップ

FastEmbed - 軽量ローカルエンベディング チートシート

FastEmbed - 軽量ローカルエンベディング チートシート

FastEmbed(Qdrant)は高速な軽量ライブラリ — ローカルでテキストエンベディング生成ONNX Runtime 経由でモデル実行(PyTorch 重い依存関係なし)で、小さく高速インストール、CPU 効率的。Dense エンベディング以外に Sparse(BM25、SPLADE)、後期相互作用(ColBERT)、リランキングモデルサポート — RAG 向けハイブリッド Dense+Sparse 検索構築に必要すべて。Qdrant ベクトルデータベースとタイト統合。

インストール

方法コマンド
pippip 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()利用モデル確認

モデルタイプ

タイプクラス用途
DenseTextEmbeddingセマンティック類似度
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 RuntimePyTorch なし。小規模インストール、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 代替案

項目FastEmbedsentence-transformersOpenAI embeddings API
RuntimeONNX(torch なし)PyTorchホストされた API
Sparse/ColBERTビルトイン追加ライブなし
ローカル/プライベートはいはいいいえ
最適用途軽量ローカル + ハイブリッド完全 torch 生態系管理簡潔性

リソース