يستغرق ذلك ملايين الدولارات و شهور من الوقت الحاسوبي لتدريب نموذج لغة كبيرة من البداية. قد لا تحتاج إلى القيام بذلك أبدا. هذا التدريب يجلب لك سوف تتعلم أربعة تقنيات أساسية للتقييم الجيد، وكيفية برنامج التدريب الكامل في Python، وتعلم التقنيات التي تختلف النماذج المستقبلية من التجارب الكبيرة. from theory to practice ما هو LLM Fine-Tuning؟ تدريبات التصحيح التلقائي على نموذج لغة موجودة على البيانات الخاصة بك لتعزيزها النماذج التي تم تدريبها على المدى القصير هي عملاء قويين، ولكن تظهر لهم يمكنك تحويلها إلى الخبراء لعملية استخدامك. performance on specific tasks focused examples بدلاً من بناء نموذج من البداية (الذي يتطلب حساباً كبيراً والبيانات) ، فإنك تمنح نموذجًا قادرًا بالفعل مسارًا صعبًا في ما يهمك ، سواء كان ذلك التشخيص الطبي أو تكنولوجيا دعم العملاء أو تحليل العلاقات أو أي مهام معينة أخرى. كيف يعمل LLM Fine-Tuning؟ تستمر Fine-tuning في عملية التدريب على النماذج اللغوية التي تم تدريبها سابقا باستخدام مجموعة البيانات الخاصة بك. لتكيف وتقليل الخسائر. updates internal weights يمكن أن تختلف هذه الطريقة اعتمادا على ، و و بعض المشاريع تتطلب التقييم الكامل ، حيث تقوم بتحديث جميع النماذج من النماذج ، في حين أن الآخرين يعملون بشكل أفضل مع طرق فعالة من النماذج مثل هذا يغير فقط مجموعة صغيرة. goals available data computational resources لورا LLM طرق التصحيح تقييم Fine-Tuning تعلم SFT النماذج لتعلم النماذج من زوجات الأسئلة والردود الصحيحة وتعدي الوزن النماذج للتوافق على هذه الإجابات بالطبع. استخدم هذا عندما تريد النتائج متواضعة، مثل جعل النموذج يرد دائمًا في شكل JSON، ثم اتبع سجل خدمة العملاء، أو كتابة البريد الإلكتروني في صوت الشركة. (Prompt, Ideal Response) التخطيط غير المباشر يغذية النماذج بطاقات متنوعة من النص الأسود (لا حاجة إلى أسئلة أو بيانات محددة) بحيث تعلم الكلمات والأشكال من مجال معين. على الرغم من أن هذه هي عملية التدريب المبكر المعروفة تقريباً باسم التدريب المبكر المستمر (CPT) ، فإن هذا عادة ما يتم بعد مرحلة التدريب المبكر. استخدم هذا أولاً عندما يحتاج النماذج إلى فهم المحتوى المتخصص الذي لم يتم تدريبه في البداية ، مثل المصطلحات الطبية أو العقود القانونية أو لغة جديدة. تحسين المفضلات المباشرة يدرس DPO النماذج لتفضل الإجابة أفضل عن طريق إظهار أمثلة من الإجابة الجيدة مقابل الإجابة السيئة على نفس السؤال وتعديلها لترقية الإجابة الجيدة. استخدم DPO بعد التدريب الأساسي لإصلاح السلوكيات المزعجة مثل وقف النموذج من صنع الأمور، أو أن يكون أكثر صراحة، أو إعطاء إجابة غير آمنة. (Prompt, Good Response, Bad Response) تحفيز Fine-Tuning في RLHF، يمكنك أولا تدريب نموذج مكافأة على الدعوات مع إجابات متعددة تم تقييمها من قبل البشر، وتدريسها لتنبؤ ما هي الإجابات التي يفضلها الناس. ثم، يمكنك استخدام تعزيز التعلم لتحديث وتقييم نموذج يولد الإجابات، والتي يقررها نموذج مكافأة. هذا يساعد نموذج التعلم مع مرور الوقت لإنتاج نتائج أعلى النتائج. هو الأفضل لمهام حيث من السهل أن تقيس الجودة من أجل إنشاء أمثلة مثالية، مثل التشخيصات الطبية، والبحوث القانونية، وغيرها من الأسباب المعقدة ذات الصلة بالمنطقة. (Prompt, [Response A, Response B, ...], [Rankings]) Step-by-Step Fine-Tuning LLM تدريبية وسوف نذهب من خلال كل خطوة من التكيف مع نموذج صغير مخصص لتسوية مشكلات الرياضيات القائمة على الكلمة، ما يواجهها من خارج الصندوق. الموقف تعليم نموذجًا متخصصًا، وتحسين أداء نموذجًا على مهام محددة، أو تكييفه إلى مجالك. works for virtually any use case of fine-tuning LLMs متطلبات تثبيت بطاقات Python القصيرة التي سوف نستخدمها طوال هذه الدراسة.في ملف المشروع الجديد، إنشاء وتشغيل بيئة Python الفريدة، ثم تثبيت هذه المكتبات باستخدام أو مدير البطاقة المفضلة لديك: pip pip install requests datasets transformers 'transformers[torch]' إرسال & تحميل مجموعة البيانات يبدأ العملية التكيفية مع اختيار مجموعة البيانات ، والتي من المحتمل أن تكون القرار الأكثر أهمية. . reflect the task you want your model to perform تحتاج المهام البسيطة مثل تحليل المشاعر إلى زوجات أساسية من الدخول والخروج. تحتاج المهام المعقدة مثل اتباع الإرشادات أو الإجابة على الأسئلة إلى مجموعة من البيانات الأكثر غنى بالواقع، والمقارنة ومعدلات متنوعة. أسهل نقطة بدء هي مكتبة مجموعة البيانات التي تستضيف آلاف مجموعة البيانات مفتوحة المصدر للبلدان والأنشطة المختلفة. أو البيانات المتاحة بشكل عام. Hugging Face Purchase specialized datasets build your own by scraping إزالة على سبيل المثال، إذا كنت ترغب في بناء نموذج تحليل الشعور لبيانات منتجات أمازون، قد ترغب في جمع البيانات من البيانات الحقيقية باستخدام أداة إزالة الشبكة. : Web Scraper API import json import requests # Web Scraper API parameters. payload = { "source": "amazon_product", # Query is the ASIN of a product. "query": "B0DZDBWM5B", "parse": True, } # Send a request to the API and get the response. response = requests.post( "https://realtime.oxylabs.io/v1/queries", # Visit https://dashboard.oxylabs.io to claim FREE API tokens. auth=("USERNAME", "PASSWORD"), json=payload, ) print(response.text) # Extract the reviews from the response. reviews = response.json()["results"][0]["content"]["reviews"] print(f"Found {len(reviews)} reviews") # Save the reviews to a JSON file. with open("reviews.json", "w") as f: json.dump(reviews, f, indent=2) For this tutorial, let’s keep it simple without building a custom data collection pipeline. Since we're teaching the base model to solve word-based math problems, we can use the openai/gsm8k dataset. It’s a collection of grade-school math problems with step-by-step solutions. Load it in your Python file: from datasets import load_dataset dataset = load_dataset("openai/gsm8k", "main") print(dataset["train"][0]) 2- تكسير البيانات للتحويل لا تفهم النماذج مباشرة، بل تعمل معها. تتحول Tokenization النص الخاص بك إلى تقييمات (تقييمات رقمية) التي يمكن معالجةها من قبل النماذج. كل النماذج لديها تقييمات خاصة تدريبية بجانبها، لذلك استخدم النماذج التي تتوافق مع النماذج الأساسية الخاصة بك: numbers from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B") tokenizer.pad_token = tokenizer.eos_token كيف نقوم بتطوير أنماط البيانات التي تعلمها النماذج، بالنسبة للمشاكل الرياضية، نرغب في التكيف مع النماذج لتعلم كيفية هنا هو الوسيلة: تقييم الأسئلة والردود بشكل منفصل، ثم استخدام تقنيات التخفيف. الإجابة إعداد سؤال تيمون إلى يخبر العملية التدريبية لتجاهلها عند الحساب على الخسائر، ويعلم النموذج فقط من الإجابة، مما يجعل التدريب أكثر التركيزية والفعالة. -100 def tokenize_function(examples): input_ids_list = [] labels_list = [] for question, answer in zip(examples["question"], examples["answer"]): # Tokenize question and answer separately question_tokens = tokenizer(question, add_special_tokens=False)["input_ids"] answer_tokens = tokenizer(answer, add_special_tokens=False)["input_ids"] + [tokenizer.eos_token_id] # Combine question + answer for input input_ids = question_tokens + answer_tokens # Mask question tokens with -100 so loss is only computed on the answer labels = [-100] * len(question_tokens) + answer_tokens input_ids_list.append(input_ids) labels_list.append(labels) return { "input_ids": input_ids_list, "labels": labels_list, } تطبق هذه الميزات على مجموعات البيانات من التدريب والتحقق. نحن نترك أمثلة أطول من 512 تريليونات للحفاظ على استهلاك الذاكرة قابلة للتحكم وتأكد من أن النماذج تتعامل مع المعلومات الكاملة دون التحكم. train_dataset = dataset["train"].map( tokenize_function, batched=True, remove_columns=dataset["train"].column_names, ).filter(lambda x: len(x["input_ids"]) <= 512) .shuffle(seed=42) eval_dataset = dataset["test"].map( tokenize_function, batched=True, remove_columns=dataset["test"].column_names, ).filter(lambda x: len(x["input_ids"]) <= 512) print(f"Samples: {len(dataset['train'])} → {len(train_dataset)} (after filtering)") print(f"Samples: {len(dataset['test'])} → {len(eval_dataset)} (after filtering)") Optional: هل ترغب في اختبار الشبكة الكاملة بسرعة قبل التعاقد مع عملية التدريب الكامل؟ يمكنك التدريب على النماذج على مجموعة أقل من البيانات. لذلك، بدلاً من استخدام مجموعة البيانات الكاملة 8.5K، يمكنك تقليلها إلى 3K بشكل كامل، مما يجعل العملية أسرع بكثير: train_dataset = train_dataset.select(range(2000)) eval_dataset = eval_dataset.select(range(1000)) إن مجموعات البيانات الصغيرة تزيد من مخاطر التكلفة ، حيث يذكر النماذج البيانات التدريبية بدلاً من التعلم النماذج العامة. Keep in mind: 3- إعادة تصميم نموذج الأساس ثم قم بتحميل النماذج الأساسية التي تم تدريبها سابقا لتعزيزها من خلال تحسين قدرتها على حل المشكلات الرياضية: from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B") model.config.pad_token_id = tokenizer.pad_token_id 4 - استخدام طريقة التمريض هذا هو المكان الذي يحدث فيه السحر. TrainingArguments يسيطر على كيفية تعلم النماذج الخاصة بك (تفكير في ذلك كوسيلة تحديد جودة النتائج النهائية الخاصة بك). هذه الإعدادات والتقنيات الكبيرة يمكن أن تجعل أو تقسيم التقييم الخاص بك، لذلك تجربة مع القيم المختلفة للعثور على ما يلائم حالة الاستخدام الخاص بك. Key parameters explained: ● المزيد من العصور تساوي المزيد من الفرص للتعلم، ولكن الكثير من السبب هو التكلفة. Epochs: ● يؤثر على استهلاك الذاكرة وارتفاع سرعة التدريب. Batch size: ● السيطرة على مدى سرعة التكيف من النماذج.لديه عالية جدا ويمكن أن تفوت الحل الأمثل، وهو منخفض جدا وتستغرق التدريب إلى الأبد. Learning rate: ● يمكن أن تساعد في منع التكلفة الضئيلة عن طريق منع النماذج من التكلفة الضئيلة على أي نموذج واحد.إذا انخفاض الوزن كبير جدا، فإنه يمكن أن يؤدي إلى التكلفة الضئيلة عن طريق منع النماذج من التعلم النماذج اللازمة. Weight decay: التكوين الأفضل أدناه هو متخصص لتدريب CPU (إزالة use_cpu=True إذا كان لديك GPU): from transformers import TrainingArguments, Trainer, DataCollatorForSeq2Seq training_args = TrainingArguments( output_dir="./qwen-math", # Custom output directory for the fine-tuned model use_cpu=True, # Set to False or remove to use GPU if available # Training duration num_train_epochs=2, # 3 may improve reasoning at the expense of overfitting # Batch size and memory management per_device_train_batch_size=5, # Adjust depending on your PC capacity per_device_eval_batch_size=5, # Adjust depending on your PC capacity gradient_accumulation_steps=4, # Decreases memory usage, adjust if needed # Learning rate and regularization learning_rate=2e-5, # Affects learning speed and overfitting weight_decay=0.01, # Prevents overfitting by penalizing large weights max_grad_norm=1.0, # Prevents exploding gradients warmup_ratio=0.1, # Gradually increases learning rate to stabilize training lr_scheduler_type="cosine", # Smoother decay than linear # Evaluation and checkpointing eval_strategy="steps", eval_steps=100, save_strategy="steps", save_steps=100, save_total_limit=3, # Keep only the best 3 checkpoints load_best_model_at_end=True, # Load the best checkpoint at the end of training metric_for_best_model="eval_loss", greater_is_better=False, # Logging logging_steps=25, logging_first_step=True, ) # Data collator handles padding and batching data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=model) # Initialize trainer trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=eval_dataset, data_collator=data_collator, ) # Fine-tune the base model print("Fine-tuning started...") trainer.train() Once training completes, save your fine-tuned model: trainer.save_model("./qwen-math/final") tokenizer.save_pretrained("./qwen-math/final") 5- تقييم النموذج بعد التقييم ، قم بتقييم مدى فعالية نموذجك باستخدام اثنين من التقييمات المشتركة: ● يحدد مدى استقرار توقعات النماذج من النتائج الهدف، حيث تظهر القيمة الأقل نمواً أفضل. Loss: ● يظهر نفس المعلومات على مقياس أكثر إثارة للجدل، حيث تعني الأرقام المنخفضة أن النماذج أكثر استقرارًا في توقعاتها. Perplexity (the exponential of loss): بالنسبة للبيئات الإنتاجية، فكر في إضافة مادة مثل أو لتقييم مدى توازن الإجابات التي تم إنشاؤها مع الإجابات المقارنة. BLEU ROUGE import math eval_results = trainer.evaluate() print(f"Final Evaluation Loss: {eval_results['eval_loss']:.4f}") print(f"Perplexity: {math.exp(eval_results['eval_loss']):.2f}") يمكنك أيضًا إضافة معدلات أخرى مثل F1، والتي تقييم مدى جودة نموذجك في التقاط ما يهم في حين البقاء دقيقًا. هو نقطة بداية جيدة لتعلم الأهمية من استخدام مكتبة التحويلات. إلقاء الضوء على القراءة نموذج لـ Fine Tuning Code بعد هذه الخطوات الخمسة ، يجب أن يكون لديك الكود التالي مشتركًا إلى ملف Python واحد: import math from datasets import load_dataset from transformers import ( AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer, DataCollatorForSeq2Seq, ) dataset = load_dataset("openai/gsm8k", "main") tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B") tokenizer.pad_token = tokenizer.eos_token # Tokenization function adjusted for the specific dataset format def tokenize_function(examples): input_ids_list = [] labels_list = [] for question, answer in zip(examples["question"], examples["answer"]): question_tokens = tokenizer(question, add_special_tokens=False)["input_ids"] answer_tokens = tokenizer(answer, add_special_tokens=False)["input_ids"] + [tokenizer.eos_token_id] input_ids = question_tokens + answer_tokens labels = [-100] * len(question_tokens) + answer_tokens input_ids_list.append(input_ids) labels_list.append(labels) return { "input_ids": input_ids_list, "labels": labels_list, } # Tokenize the data train_dataset = dataset["train"].map( tokenize_function, batched=True, remove_columns=dataset["train"].column_names, ).filter(lambda x: len(x["input_ids"]) <= 512) .shuffle(seed=42) eval_dataset = dataset["test"].map( tokenize_function, batched=True, remove_columns=dataset["test"].column_names, ).filter(lambda x: len(x["input_ids"]) <= 512) print(f"Samples: {len(dataset['train'])} → {len(train_dataset)} (after filtering)") print(f"Samples: {len(dataset['test'])} → {len(eval_dataset)} (after filtering)") # Optional: Use a smaller subset for faster testing # train_dataset = train_dataset.select(range(2000)) # eval_dataset = eval_dataset.select(range(1000)) model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B") model.config.pad_token_id = tokenizer.pad_token_id # Configuration settings and hyperparameters for fine-tuning training_args = TrainingArguments( output_dir="./qwen-math", use_cpu=True, # Training duration num_train_epochs=2, # Batch size and memory management per_device_train_batch_size=5, per_device_eval_batch_size=5, gradient_accumulation_steps=4, # Learning rate and regularization learning_rate=2e-5, weight_decay=0.01, max_grad_norm=1.0, warmup_ratio=0.1, lr_scheduler_type="cosine", # Evaluation and checkpointing eval_strategy="steps", eval_steps=100, save_strategy="steps", save_steps=100, save_total_limit=3, load_best_model_at_end=True, metric_for_best_model="eval_loss", greater_is_better=False, # Logging logging_steps=25, logging_first_step=True, ) data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=model) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=eval_dataset, data_collator=data_collator, ) # Fine-tune the base model print("Fine-tuning started...") trainer.train() # Save the final model trainer.save_model("./qwen-math/final") tokenizer.save_pretrained("./qwen-math/final") # Evaluate after fine-tuning eval_results = trainer.evaluate() print(f"Final Evaluation Loss: {eval_results['eval_loss']:.4f}") print(f"Perplexity: {math.exp(eval_results['eval_loss']):.2f}") قبل التشغيل ، استغرق بضع دقائق لتعديل تكوين المدرب الخاص بك والتقنيات العالية اعتمادا على ما يمكنك فعلا القيام به. للحصول على إشارة في العالم الحقيقي، إليك ما كان يعمل بشكل جيد بالنسبة لنا على MacBook Air مع شاشة M4 و 16 جيجابايت RAM. ● : 7 Batch size for training ● 7 Batch size for eval: ● 5 Gradient accumulation: في حين أن النماذج الخاصة بك تتحرك ، وحافظ على نظرة على إذا انخفضت في حين انخفضت فقدان التدريب ، فإن النموذج يتغير. في هذه الحالة ، يتم تعديل العصور ، وتخفيض معدل التعلم ، وتعديل فقدان الوزن ، وغيرها من التوازنات. في مثال أدنى ، نرى النتائج الصحية مع فقدان الوزن يقلل من 2 وأخيرًا، فشلًا في . evaluation loss 0.496 0.469 1.60 اختبار نموذج Fine-Tuned الآن لحظة الحقيقة - هل تمكننا من تحديد التكلفة بشكل جيد؟ يمكنك اختبار نموذج التكلفة بشكل يدوي باستخدام هذا الكود: from transformers import pipeline generator = pipeline( "text-generation", # Use `Qwen/Qwen2.5-0.5B` for testing the base model model="./qwen-math/final" ) output = generator( "James has 5 apples. He buys 3 times as many. Then gives half away. How many does he have?", return_full_text=False ) print(output[0]["generated_text"]) في هذه المقارنة الجانبية ، يمكنك أن ترى كيف تستجيب النماذج قبل وبعدها إلى نفس السؤال (الرد الصحيح هو 10): مع تمكين العينات ، يمكن لكل من النماذج في بعض الأحيان الحصول على شيء صحيح أو خاطئ بسبب الحوادث. يظهر وظيفتها الثقة الحقيقية: يختار النموذج دائمًا الإجابة الأكثر احتمالًا. الإيرادات الإيجابية ( ) ) ، في حين أن الإيرادات الإيجابية ( ) هذا هو التقييم الجيد في العمل. do_sample=False in the generator() base model -2 خطأ fine-tuned model 10 صحيح Fine-Tuning أفضل الممارسات نموذج اختيار ● النماذج ذات الصلة بالمنطقة والخلفية المناسبة تخزينك من القتال ضد المعرفة الحالية للمنتج. Choose the right base model: ● النماذج التي تعتمد على الكمبيوتر فقط (مثل BERT) تتميز في مهام التخصيص، النماذج التي تعتمد على الكمبيوتر فقط (مثل GPT) في إنتاج النص، والنماذج التي تعتمد على الكمبيوتر فقط (مثل T5) في مهام التغيير مثل الترجمة أو التقييم. Understand the model architecture: ● إذا تم تدريب نموذج البنية الأساسية الخاص بك باستخدام نموذجات الدعوات الخاصة، استخدم نفس النماذج في التصحيح. Match your model's input format: إعداد البيانات ● أمثلة صافية ودقيقة تسرق مجموعة من البيانات الكبيرة والصوتية كل مرة. Prioritize data quality over quantity: ● لا تدع النماذج الخاصة بك رؤية بيانات التقييم أثناء التدريب.هذا يسمح لك بالاطمئنان على التقييم قبل أن يدمج النماذج الخاصة بك. Split training and evaluation samples: ● لا تعلمين ما إذا كان النماذج تتبع الإرشادات أم لا تعلمين ما إذا كان النماذج تتبع الإرشادات أم لا تعلمين ما إذا كان النماذج تتبع الإرشادات أم لا تعلمين ما إذا كان النماذج تتبع الإرشادات. Establish a "golden set" for evaluation: استراتيجية التدريب ● أنت تجعل تعديلات صغيرة ، وليس تعلمها من البداية ، لذلك يمكن أن تُحذف الأسعار العدائية ما تعلمته أثناء التدريب المبكر. Start with a lower learning rate: ● تدريب 1% فقط من النماذج للحصول على 90٪ من الأداء مع استخدام أقل من الذاكرة والزمان. Use parameter-efficient fine-tuning (LoRA/PEFT): ● إزالة جميع الأقراص ( إلخ) تنتج النماذج التي تقول بشكل كبير أفضل، وليس فقط نموذج. Target all linear layers in LoRA: q_proj, k_proj, v_proj, o_proj, ● تشكل الضوضاء العشوائية في المكونات تشريعًا ، والذي يمكن أن يمنع التذكير وتحسين جودة المحادثة بنسبة 35 نقطة مئوية. Use NEFTune ( ): إدخال الضوء على Fine-Tuning إدخال الضوء على Fine-Tuning ● لا تتوقف فقط بعد SFT. SFT تعلم كيفية التحدث؛ DPO تعلم ما هو جيد من خلال التعلم من الأزواج المفضلة. After SFT, Run DPO: ما هي قيود LLM Fine-Tuning؟ ● تحديد التكلفة يغطي الأنماط العصبية الموجودة ، والتي يمكن إزالة المعرفة العامة القيمة التي تعلمها النماذج أثناء التدريب المبكر. التعلم متعدد المهام ، حيث يمكنك التدريب على مهامك المتخصصة جنبا إلى جنب مع أمثلة عامة ، يمكن أن تساعد في الحفاظ على القدرات الأوسع. Catastrophic forgetting: ● قد تتذكر النماذج التدريبية الخاصة بك بدلاً من نموذج التعلم ، مما يؤدي إلى فشلها على الملفات المختلفة قليلاً. Overfitting on small datasets: ● تحديد المليارات من النماذج يحتاج إلى GPU ضخمة، والذاكرة الكبيرة، والساعات إلى أيام أو أسابيع من الوقت التدريب. High computational cost: ● يرتبط النماذج الممتدة من التدريب بالفعل بالخلافات من بيانات التدريب الخاصة بهم ، ويمكن أن تزيد هذه الخلافات إذا لم يتم تحديد مجموعات البيانات الخاصة بك بعناية. Bias amplification: ● قد يتطلب المعرفة الجديدة والخارجية إعادة تدريب النماذج بأكملها أو تطبيق Retrieval-Augmented Generation (RAG) ، في حين أن التعديلات التكرارية المتكررة غالبا ما تؤدي إلى تدهور الأداء. Manual knowledge update: النتيجة يعمل التقييم الصحيح ، ولكن فقط إذا كانت البيانات نظيفة وتقوم بتقييم التقييم الصحيح.مكافحة ذلك مع الهندسة السريعة للحصول على أفضل النتائج ، حيث يقوم التقييم الصحيح بتقييم التخصصات العملية في حين أن الهندسة السريعة تقييم سلوك النماذج في وقت التقييم. استمر باستكشاف نموذج من Hugging Face الذي يناسب حالة الاستخدام الخاص بك لتقييم الخصائص الخاصة بالمنطقة، أو بناء مجموعة من البيانات الجيدة لعملك، وإجراء أول جلسة التقييم الخصائص الخاص بك على مجموعة صغيرة.بعد أن ترى النتائج الإيجابية، ارتفع وتجربة مع LoRA، DPO، أو NEFTune لتقييم أداء أفضل.