تخطَّ إلى المحتوى

FastEmbed - مكتبة التضمينات المحلية الخفيفة

FastEmbed - مكتبة التضمينات المحلية الخفيفة

FastEmbed (من Qdrant) هي مكتبة سريعة وخفيفة لإنشاء تضمينات النصوص محلياً. تقوم بتشغيل النماذج عبر ONNX Runtime (بدون اعتماد PyTorch الثقيل) الذي يجعلها صغيرة وسريعة التثبيت وفعالة على وحدة المعالجة المركزية. بالإضافة إلى التضمينات الكثيفة فإنها تدعم قليلة (BM25, SPLADE), تفاعل متأخر (ColBERT), وإعادة ترتيب النماذج — كل ما تحتاجه لبناء بحث كثيف+قليل هجين لـ RAG. يتكامل بإحكام مع قاعدة بيانات Qdrant المتجهة.

التثبيت

الطريقةالأمر
pippip install fastembed
GPU (CUDA)pip install fastembed-gpu
التحققpython -c "from fastembed import TextEmbedding; print('ok')"

تضمينات كثيفة

from fastembed import TextEmbedding

model = TextEmbedding("BAAI/bge-small-en-v1.5")   # التنزيلات مرة واحدة
docs = ["FastEmbed يعمل على ONNX.", "إنها صديقة للـ CPU."]
vectors = list(model.embed(docs))   # مولد مصفوفات numpy
print(len(vectors), vectors[0].shape)
استدعاءالوصف
TextEmbedding(model_name)قم بتحميل نموذج التضمين الكثيف
.embed(list)تضمين المستندات (مجموعة، كسول)
.query_embed(str)تضمين استعلام (بعض النماذج تختلف q/d)
.passage_embed(list)تضمين المقاطع
TextEmbedding.list_supported_models()انظر النماذج المتاحة

أنواع النماذج

النوعالفئةالاستخدام
كثيفTextEmbeddingالتشابه الدلالي
قليل (BM25/SPLADE)SparseTextEmbeddingمطابقة الكلمات الرئيسية/الحد الأدنى
تفاعل متأخر (ColBERT)LateInteractionTextEmbeddingاسترجاع إعادة ترتيب عالي الدقة
إعادة ترتيبTextCrossEncoderإعادة ترتيب المرشحين
صورةImageEmbeddingالتضمينات متعددة الأنماط

تضمينات قليلة (للبحث الهجين)

from fastembed import SparseTextEmbedding

sparse = SparseTextEmbedding("Qdrant/bm25")
sv = list(sparse.embed(["مصطلح دقيق ABC-123 يهم"]))
print(sv[0].indices, sv[0].values)   # متناثر: فهارس الرمز + الأوزان

المتجهات القليلة تلتقط المصطلحات الدقيقة (المعرفات والأرقام) التي تُتمع التضمينات الكثيفة — المفتاح لبحث هجين قوي.

إعادة الترتيب

from fastembed.rerank.cross_encoder import TextCrossEncoder

reranker = TextCrossEncoder("Xenova/ms-marco-MiniLM-L-6-v2")
scores = reranker.rerank("ما هو fastembed؟",
                         ["FastEmbed هي مكتبة تضمين.", "نص غير ذي صلة."])

البحث الهجين مع Qdrant

from fastembed import TextEmbedding, SparseTextEmbedding
# قم بحساب المتجهات الكثيفة والقليلة لكل مقطع، الإدراج إلى Qdrant،
# ثم الاستعلام عن كليهما وللسماح لـ Qdrant بدمج نتائج (RRF).
dense = TextEmbedding("BAAI/bge-small-en-v1.5")
sparse = SparseTextEmbedding("Qdrant/bm25")
خطوةالأداة
المتجهات الكثيفةTextEmbedding
المتجهات القليلةSparseTextEmbedding (BM25)
التخزين + الدمجاستعلام هجين أصلي Qdrant
إعادة ترتيب اختياريةTextCrossEncoder

لماذا FastEmbed (التصميم)

الملكيةالفائدة
ONNX Runtimeلا PyTorch؛ تثبيت صغير وسريع على وحدة المعالجة المركزية
نماذج مُحددة الكميةذاكرة منخفضة/زمن وصول
مولدات كسولةبث التضمينات والذاكرة المنخفضة
محليبدون استدعاءات API؛ البيانات تبقى خاصة

سير العمل العام

# دفعة - تضمين مجموعة بيانات لـ DB متجه (صديق CPU)
from fastembed import TextEmbedding
model = TextEmbedding("BAAI/bge-base-en-v1.5")
embeddings = list(model.embed(corpus, batch_size=64))

# بناء استرجاع هجين: كثيف + BM25 متناثر، مندمج في Qdrant

FastEmbed مقابل البدائل

الجانبFastEmbedجملة-محولاتOpenAI تضمين API
وقت التشغيلONNX (بدون torch)PyTorchAPI مستضاف
Sparse/ColBERTمدمجمكتبات إضافيةلا
محلي/خاصنعمنعملا
الأفضل لـمحلي خفيف + هجيننظام المشاعل الكاملبساطة مُدارة

الموارد