المقدمة
هل أنت مهتم بالتقنيات المتطورة التي تعتمد على الاسترجاع؟ LLM 'bge-large-en-v1.5'؟ انضم إلينا في هذه المدونة لنستكشف هذا النموذج بعمق. ستكتشف دور نماذج التضمين وتطبيقاتها العملية. سنشرح لك كيفية نشر 'bge-large-en-v1.5' في الكود، وضبطه، ودمجه بسلاسة مع LLM API. استعد لإطلاق العنان لإمكانيات جديدة عند تقاطع نماذج التضمين و LLMs!
ما هو bge-large-en-v1.5؟
باختصار، bge-large-en-v1.5 هو نموذج تضمين مفتوح المصدر تم إنشاؤه بواسطة BAAI.
على وجه التحديد، يشير "bge" في "bge-large-en-v1.5" إلى "BAAI General Embedding". BAAI، المعروفة أيضًا باسم "FlagEmbedding" على Github، هي منظمة خاصة غير ربحية تُعنى بأبحاث وتطوير الذكاء الاصطناعي. تُركز على نماذج اللغات الكبيرة المُعززة بالاسترجاع (LLMأطلقت BAAI العديد من المشاريع ذات الصلة. وتشمل هذه المشاريع مشاريع طويلة الأمد LLM (منارة التنشيط)، الضبط الدقيق لـ LM (LM-Cocktail)، الاسترجاع الكثيف (BGE-M3، LLM نموذج التضمين (BGE)، نموذج إعادة الترتيب (BGE Reranker)، ونموذج المعايرة (C-MTEB). ينتمي Bge-large-en-v1.5 إلى سلسلة نماذج التضمين BGE، المُطوّرة خصيصًا لأغراض الاسترجاع الكثيف.

ماذا يفعل نموذج التضمين للاسترجاع الكثيف؟

يقوم نموذج التضمين للاسترجاع الكثيف بتحويل بيانات النص إلى تمثيلات دلالية كثيفة تلتقط معنى وسياق الإدخال. يتم استخدام هذه التمثيلات الكثيفة بواسطة المسترد الكثيف لاسترجاع المعلومات ذات الصلة بكفاءة. فيما يلي كيفية عملها وبعض الأمثلة:
تحويل النص إلى تمثيلات كثيفة
يأخذ نموذج التضمين الجمل أو الفقرات أو المستندات بأكملها كمدخلات ويحولها إلى متجهات ذات طول ثابت (تضمينات). تقوم هذه المتجهات بتشفير المعلومات الدلالية حول النص، مما يسمح بفهم أكثر دقة يتجاوز مطابقة الكلمات الأساسية البسيطة.
LLMغالبًا ما تُدمج نماذج التضمين كجزء من بنيتها. على سبيل المثال، يستخدم BERT تقنيات التضمين لتمثيل الكلمات وتسلسلات الإدخال قبل معالجتها عبر طبقات المحول. LLMيمكن للناس الاستفادة من نماذج التضمين من خلال الاستفادة من قدرتها على التقاط العلاقات الدلالية والفروق الدقيقة السياقية، والتي تعد ضرورية لتوليد استجابات متماسكة ومناسبة للسياق في مهام مثل توليد الحوار أو الترجمة الآلية.
دور المسترد الكثيف
يستخدم المسترد الكثيف هذه التضمينات لأداء مهام الاسترجاع. وعلى عكس طرق الاسترجاع المتفرقة التقليدية التي تعتمد على تطابقات الكلمات الرئيسية الدقيقة أو المؤشرات، يحسب المسترد الكثيف درجات التشابه مباشرة بين تضمينات الاستعلام وتضمينات المستندات. يسمح هذا النهج باسترجاع أكثر دقة عبر أطوال مختلفة من مدخلات النص، من الجمل القصيرة إلى المستندات الطويلة.
أمثلة على التطبيقات
في مهام استرجاع المعلومات، مثل محركات البحث أو أنظمة الإجابة على الأسئلة، تمكن هذه التمثيلات الكثيفة من استرجاع المستندات أو المقاطع ذات الصلة بكفاءة ودقة.
على سبيل المثال، يمكن تحويل استعلام مثل "ما هي أعراض مرض كوفيد-19؟" إلى متجه تضمين. وبالمثل، يتم أيضًا تحويل المستندات التي تناقش أعراض مرض كوفيد-19 إلى تضمينات. من خلال مقارنة التشابه بين تضمين الاستعلام وتضمينات المستندات (باستخدام تقنيات مثل تشابه جيب التمام)، يمكن تحديد المستندات الأكثر صلة وتصنيفها بسرعة.
هناك مثال آخر يتمثل في أنظمة التوصية. في هذه الحالة، تساعد عمليات التضمين في التوصية بالمنتجات أو المقالات أو مقاطع الفيديو من خلال فهم تفضيلات المستخدم وتشابه المحتوى.
بشكل عام، تلعب نماذج التضمين للاسترجاع الكثيف، إلى جانب المستردات الكثيفة، دورًا حاسمًا في تطبيقات الذكاء الاصطناعي الحديثة من خلال تحويل النص إلى تمثيلات ذات معنى واسترجاع المعلومات ذات الصلة بكفاءة استنادًا إلى التشابه الدلالي.
كيف يمكنني استخدام bge-large-en-v1.5 في الكود؟
استخدام bge-large-en-v1.5 مع Langchain
يمكنك استخدام bge في langchain مثل هذا:
from langchain.embeddings import HuggingFaceBgeEmbeddings
model_name = "BAAI/bge-large-en-v1.5"
model_kwargs = {'device': 'cuda'}
encode_kwargs = {'normalize_embeddings': True} # set True to compute cosine similarity
model = HuggingFaceBgeEmbeddings(
model_name=model_name,
model_kwargs=model_kwargs,
encode_kwargs=encode_kwargs,
query_instruction="Generate a representation for this sentence to be used for retrieving relevant articles:"
)
model.query_instruction = "Generate a representation for this sentence to be used for retrieving relevant articles:"
استخدام bge-large-en-v1.5 مع محولات Huggingface
باستخدام حزمة المحولات، يمكنك استخدام النموذج على هذا النحو: أولاً، مرر إدخالك عبر نموذج المحول، ثم حدد آخر حالة مخفية للرمز الأول (أي [CLS]) كتضمين الجملة.
from transformers import AutoTokenizer, AutoModel
import torch
# Sentences we want sentence embeddings for
sentences = ["Sample Data-1", "Sample Data-2"]
# Load model from HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-large-en-v1.5')
model = AutoModel.from_pretrained('BAAI/bge-large-en-v1.5')
model.eval()
# Tokenize sentences
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
# for s2p(short query to long passage) retrieval task, add an instruction to query (not add instruction for passages)
# encoded_input = tokenizer([instruction + q for q in queries], padding=True, truncation=True, return_tensors='pt')
# Compute token embeddings
with torch.no_grad():
model_output = model(**encoded_input)
# Perform pooling. In this case, cls pooling.
sentence_embeddings = model_output[0][:, 0]
# normalize embeddings
sentence_embeddings = torch.nn.functional.normalize(sentence_embeddings, p=2, dim=1)
print("Sentence embeddings:", sentence_embeddings)
لمزيد من المعلومات حول استخدام نماذج bge، يمكنك زيارة FlagEmbedding على Github.
كيف يمكنني ضبط bge-large-en-v1.5؟
الخطوة 1 التثبيت
- التثبيت باستخدام pip:
pip install -U FlagEmbedding - أو قم بالتثبيت من المصدر بعد استنساخ المستودع والانتقال إليه:
pip install . - للتطوير، استخدم التثبيت القابل للتعديل:
pip install -e .
الخطوة 2 تحضير البيانات
- يجب أن تكون بيانات التدريب بتنسيق JSON مع كل سطر كقاموس يحتوي على
query,pos(قائمة النصوص الإيجابية)، وneg(قائمة النصوص السلبية). - إذا لم تكن النصوص السلبية متاحة، فيمكن أخذ عينات منها بشكل عشوائي من المجموعة.
الخطوة الثانية: استخراج السلبيات الصعبة
- استخدم البرنامج النصي لاستخراج السلبيات الصعبة لتحسين جودة تضمين الجملة.
- يمكنك استخراج السلبيات الصعبة باتباع هذا الأمر:
python -m FlagEmbedding.baai_general_embedding.finetune.hn_mine \
--model_name_or_path BAAI/bge-base-en-v1.5 \
--input_file toy_finetune_data.jsonl \
--output_file toy_finetune_data_minedHN.jsonl \
--range_for_sampling 2-200 \
--negative_number 15 \
--use_gpu_for_searching
- ملف الإدخال:ملف JSON يحتوي على بيانات للضبط الدقيق، حيث يحدد البرنامج النصي أفضل k مستندات لكل استعلام ثم يختار عشوائيًا أمثلة سلبية من أفضل k نتائج هذه، مع استبعاد أي أمثلة إيجابية تم توفيرها بالفعل.
- ملف إلاخراج:الوجهة التي سيتم تخزين ملف JSON فيها، والذي تم إثراؤه الآن بالصور السلبية الصلبة المأخوذة حديثًا، لاستخدامه في عملية الضبط الدقيق.
- عدد السلبيات:يحدد عدد العينات السلبية التي يجب جمعها.
- نطاق أخذ العينات:يحدد النطاق الذي سيتم منه سحب العينات السلبية. على سبيل المثال، يشير النطاق من 2 إلى 100 إلى أنه سيتم أخذ العينات السلبية من أعلى 2 إلى أعلى 200 مستند. يؤدي توسيع هذا النطاق، مثل 60 إلى 300، إلى جعل اختيار العينات السلبية أقل تحديًا من خلال النظر في مجموعة أوسع من المستندات.
- مجموعة الاسترجاع:المصدر الذي سيستخرج منه البرنامج النصي المستندات لاسترجاعها. بشكل افتراضي، هذه هي مجموعة كل البيانات السلبية في ملف الإدخال، بتنسيق بيانات ما قبل التدريب. إذا تم تحديد مجموعة استرجاع معينة، فسيستخدم البرنامج النصي هذه المجموعة بدلاً من ذلك للعثور على أمثلة سلبية.
- GPUالبحث القائم على: خيار للإشارة إلى ما إذا كان GPU- ينبغي الاستفادة من وحدة معالجة الرسومات faiss المعجلة لتعزيز كفاءة عملية الاسترجاع السلبي.
الخطوة 4 التدريب
torchrun --nproc_per_node {number of gpus} \
-m FlagEmbedding.baai_general_embedding.finetune.run \
--output_dir {path to save model} \
--model_name_or_path BAAI/bge-large-en-v1.5 \
--train_data ./toy_finetune_data.jsonl \
--learning_rate 1e-5 \
--fp16 \
--num_train_epochs 5 \
--per_device_train_batch_size {large batch size; set 1 for toy data} \
--dataloader_drop_last True \
--normlized True \
--temperature 0.02 \
--query_max_len 64 \
--passage_max_len 256 \
--train_group_size 2 \
--negatives_cross_device \
--logging_steps 10 \
--save_steps 1000 \
--query_instruction_for_retrieval ""
- حجم دفعة التدريب لكل جهاز:كمية العينات التي تتم معالجتها في كل دفعة تدريب. عادةً، يعمل حجم الدفعة المتزايد على تعزيز أداء النموذج. يمكنك زيادة هذا الحجم من خلال الاستفادة من خيارات مثل التدريب بنصف الدقة (
--fp16), تكوين DeepSpeed (--deepspeed ./df_config.json، حيثdf_config.jsonقد يشار إليها أيضًا باسمds_config.json)، ونقاط تفتيش التدرج (--gradient_checkpointing). - حجم مجموعة التدريب:يحدد العدد الإجمالي للأمثلة، الإيجابية والسلبية، المستخدمة لكل استعلام أثناء التدريب. نظرًا لوجود مثال إيجابي مضمون، فإن هذا الإعداد يحدد عدد الأمثلة السلبية (المحسوبة على أنها
train_group_size - 1). انتبه إلى أن هذا الرقم لا ينبغي أن يتجاوز القيم السلبية المتاحة في بياناتكnegبالإضافة إلى هذه السلبيات الجماعية، يتم أيضًا دمج السلبيات الأخرى ضمن الدفعة في عملية الضبط الدقيق. - المشاركة السلبية عبر الأجهزة:يمكّن توزيع الأمثلة السلبية عبر جميع الأمثلة المتاحة GPUس، مما يؤدي إلى زيادة العدد الإجمالي للسلبيات المستخدمة في التدريب بشكل فعال.
- معدل التعليم:اختر قيمة تناسب طرازك المحدد. بالنسبة للنماذج الكبيرة أو الأساسية أو الصغيرة الحجم، يوصى عادةً بقيم مثل 1e-5 أو 2e-5 أو 3e-5.
- درجة الحرارة:يؤثر على انتشار توزيع درجات التشابه. تتراوح القيم المقترحة من 0.01 إلى 0.1.
- الحد الأقصى لطول الاستعلام:الحد الأقصى لطول الاستعلام، والذي يجب أن يتوافق مع متوسط طول الاستعلام في مجموعة البيانات الخاصة بك.
- الحد الأقصى لطول الممر:الحد الأقصى لطول الممر، يتم ضبطه وفقًا لمتوسط طول الممرات في بياناتك.
- تعليمات استعلام الاسترجاع:توجيه اختياري يتم إضافته إلى كل استعلام لأغراض الاسترجاع. يمكنك تركه فارغًا عن طريق تعيينه على سلسلة فارغة إذا لم تكن هناك حاجة إلى سياق إضافي.
- الاستخدام السلبي في الدفعة:علم يشير إلى ما إذا كان سيتم اعتبار المقاطع من نفس الدفعة أمثلة سلبية في التدريب. الإعداد الافتراضي هو تمكين (صحيح).
- نقطة تفتيش حفظ الفاصل الزمني:يحدد تردد حفظ نقاط تفتيش النموذج استنادًا إلى عدد خطوات التدريب المكتملة.
الخطوة 5 تحميل النموذج
بمجرد ضبط نموذج BGE، يمكنك تحميله بسهولة كما هو موضح في هذا المثال. إذا قمت بتحديد قيمة فريدة لـ --query_instruction_for_retrieval أثناء مرحلة الضبط الدقيق، تأكد من استبدال المعلمة الفائقة query_instruction_for_retrieval وفقا لذلك.
الخطوة 6 تحميل النموذج
لتقييم النموذج، يمكنك تشغيل هذا سيناريو تم تقديمه بواسطة FlagEmbedding.
إن تعديل نموذج bge الأساسي من خلال الضبط الدقيق قد يؤدي إلى تحسين الأداء الخاص بالمهمة، ولكنه قد يتسبب أيضًا في انخفاض ملحوظ في فعالية النموذج الإجمالية خارج النطاق المستهدف (على سبيل المثال، انخفاض الأداء في مهام c-mteb). للحصول على معلومات حول الحل (باستخدام LM-Cocktail) بالإضافة إلى عملية الضبط الدقيق، راجع "FlagEmbedding/examples/finetune" على Github.
كيف يمكنني دمج bge-large-en-v1.5 مع LLM API؟
دمج نموذج التضمين مع LLM يُثري هذا التكامل قدرات معالجة اللغة الطبيعية للذكاء الاصطناعي، مما يُتيح بحثًا دلاليًا أكثر تطورًا، وفهمًا سياقيًا، وتفاعلات شخصية. يُعدّ هذا التكامل مفيدًا بشكل خاص لتحسين مهام مثل التوصيات القائمة على المحتوى، وتجميع المستندات، واكتشاف الشذوذ، والمعالجة متعددة اللغات، وبناء الرسوم البيانية المعرفية. كما يدعم تلخيص النصوص المتقدم وتحسين الميزات لنماذج التعلم الآلي، مما يُحسّن الأداء في تحليل المشاعر وتصنيف المواضيع.
الخطوة 1: إعداد بيئتك
أولاً، تأكد من أن لديك بيئة Python اللازمة مع الحزم المطلوبة المثبتة.
pip install openai
# Install other necessary packages, e.g., requests, numpy, etc.
الخطوة 2: تهيئة ملف Novita AI عميل API
لقد قمت بالفعل بتوفير الكود لتهيئة Novita AI API العميل. هنا هو للرجوع إليه:
from openai import OpenAI
client = OpenAI(
base_url="https://api.novita.ai/v3/openai",
api_key="<YOUR Novita AI API Key>", # Replace with your actual API key
)
model = "nousresearch/nous-hermes-llama2-13b"
الخطوة 3: الحصول على نموذج التضمين
على افتراض أن لديك إمكانية الوصول إلى bge-large-en-v1.5 النموذج، يمكنك تحميله. إذا كان نموذج Hugging Face، فيمكنك استخدام transformers المكتبة مثل هذا:
from transformers import AutoModel, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-large-en-v1.5")
model = AutoModel.from_pretrained("BAAI/bge-large-en-v1.5")
الخطوة 4: قم بتعريف دالة للحصول على التضمينات
إنشاء وظيفة للحصول على التضمينات من bge-large-en-v1.5 نموذج.
def get_embeddings(text):
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
embeddings = model(**inputs)[0].mean(dim=1)
return embeddings.numpy()
الخطوة 5: التكامل مع Novita AI LLM API
الآن، قم بدمج نموذج التضمين مع LLM واجهة برمجة التطبيقات (API) لتحسين استجابات واجهة برمجة التطبيقات أو تنفيذ مهام مثل البحث الدلالي.
def enhanced_llm_response(prompt):
# Get initial response from LLM
response = client.completions.create(
model=model,
prompt=prompt,
stream=True,
max_tokens=512,
)
# Process the response (e.g., extract text)
# This is a placeholder for the actual response processing
response_text = next(response)['choices'][0]['text'].content
# Get embeddings for the response
response_embeddings = get_embeddings(response_text)
# Here, you can use the embeddings for various purposes,
# such as semantic search, filtering, etc.
return response_text, response_embeddings
الخطوة 6: استخدم الوظيفة المحسنة
الآن يمكنك استخدام ملف enhanced_llm_response وظيفة للحصول على ردود من LLM ومعالجتها باستخدام نموذج التضمين.
prompt = "A chat between a curious user and an artificial intelligence assistant"
response, embeddings = enhanced_llm_response(prompt)
print(response)
# Do something with the embeddings, e.g., store them, search for similar texts, etc.
الخطوة 7: معالجة الأخطاء وتسجيلها
أضف معالجة الأخطاء وتسجيلها إلى الكود الخاص بك لإدارة حدود واجهة برمجة التطبيقات، وفشل الطلبات، والمشكلات المحتملة الأخرى.
الخطوة 8: الاختبار والتكرار
اختبر التكامل جيدًا وكرر العملية بناءً على النتائج. قد تحتاج إلى ضبط المعلمات أو التعامل مع المزيد من الحالات غير المتوقعة أو تحسين الأداء.
يرجى ملاحظة أن تفاصيل التنفيذ الفعلية قد تختلف بناءً على القدرات والمتطلبات المحددة Novita AI LLM واجهة برمجة التطبيقات (API) و bge-large-en-v1.5 النموذج. يمكنك الاتصال Novita AI فريق الدعم الفني: الدعم @novita.ai.
خاتمة
باختصار، سلط استكشافنا لـ "bge-large-en-v1.5" الضوء على دوره الأساسي في مهام الاسترجاع الكثيفة، مما يوفر نظرة عميقة على قدراته وتطبيقاته وتنفيذه العملي. من تقديم النموذج وأهميته في مجال التضمين إلى إظهار استخدامه في التعليمات البرمجية وعملية ضبطه الدقيق، وضعنا دليلاً شاملاً. علاوة على ذلك، فإن التكامل مع Novita AI LLM يوضح API إمكانات النموذج في التضخيم LLMفهم الدلالة ودقة الاسترجاع.
ترقبوا المزيد من التحديثات على LLMs!
الأسئلة الشائعة
1. كيف يعمل جهاز إعادة ترتيب BGE؟
من خلال إدخال استعلام ومقطع في أداة إعادة الترتيب، يمكنك الحصول على درجة الصلة. ويمكن تحويل هذه الدرجة إلى قيمة فاصلة عائمة ضمن نطاق [0, 1] باستخدام دالة سيجمايد. وتهدف هذه العملية إلى ضمان أن تكون النتائج الأعلى مرتبة أكثر صلة وذات جودة أعلى، مما يؤدي إلى تحسين الأداء العام للنظام.
2. ما هو طول سياق BGE؟
أحدث طراز bge-m3 لديه طول سياق يبلغ 8 كيلو بايت.
3. ما هو حجم تضمين bge m3؟
يمكنه التعامل مع مدخلات ذات أطوال مختلفة، من الجمل القصيرة إلى المستندات الطويلة التي تحتوي على ما يصل إلى 8192 رمزًا.
Novita AI منصة سحابية متكاملة تُمكّنك من تحقيق طموحاتك في مجال الذكاء الاصطناعي. بفضل واجهات برمجة التطبيقات المتكاملة بسلاسة، والحوسبة بدون خوادم، GPU تسريع الأعمال، نوفر لك الأدوات الفعالة من حيث التكلفة لبناء أعمالك القائمة على الذكاء الاصطناعي وتوسيع نطاقها بسرعة. تخلص من مشاكل البنية التحتية وابدأ مجانًا. Novita AI يجعل أحلام الذكاء الاصطناعي الخاص بك حقيقة.
اقتراحات للقراءة
اكتشف المزيد من نوفيتا
اشترك للحصول على أحدث المشاركات المرسلة إلى بريدك الإلكتروني.





