importosimportglobimportjsonمنمكتبةالنقاطالبيضاءimportload_dotenvمنمكتبةالتحولاتimportAutoTokenizer,AutoModelForCausalLM,Trainer,TrainingArguments,DataCollatorForLanguageModeling,LlamaTokenizerFastمنمجموعةالبياناتimportDataset,load_datasetimporttorchload_dotenv()اسم_النموذج="deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"# تم تغييره الى النموذج المحدد
دليل_الاخراج="trained_model"ملف_التدريب="train.jsonl"حد_الطول_القصوى=512حجم_الدفعة=8العوارض=3defإنشاء_بيانات_التدريب(دليل_المنشورات):جميع_النصوص=[]forدليل_اللغةinos.listdir(دليل_المنشورات):دليل_اللغة=os.path.join(دليل_المنشورات,دليل_اللغة)ifnotos.path.isdir(دليل_اللغة):استمرforمسار_الملفinglob.glob(os.path.join(دليل_اللغة,"*.md")):نشطه_بالقراءة_في_الملف=سعة_فتح(مسار_الملف,'r',encoding='utf-8')محتوى=القراءة.read()# تبديل بيانات البداية
محتوى=محتوى.split("---",2)[-1].strip()النصوص.append(محتوى)exceptExceptionase:print(f"خطأ في قراءة الملف {مسار_الملف}: {e}")returnالنصوصdefإعداد_مجموعة_البيانات(نصوص,توكنايزر):تشفير=توكنايزر(نصوص,truncation=True,padding=True,max_length=MAX_LENGTH,return_tensors="pt")استرجاعمجموعة_البيانات.from_dict(تشفير)defتدريب_النموذج(مجموعة_البيانات,توكنايزر):الإعدادات_التدريبية=TrainingArguments(output_dir=OUTPUT_DIR,overwrite_output_dir=True,num_train_epochs=EPOCHS,per_device_train_batch_size=BATCH_SIZE,save_steps=10_000,save_total_limit=2,prediction_loss_only=True,remove_unused_columns=False,)النموذج=AutoModelForCausalLM.from_pretrained(MODEL_NAME,trust_remote_code=True)جمع_البيانات=DataCollatorForLanguageModeling(توكنايزر=توكنايزر,mlm=False)المدرب=Trainer(model=النموذج,args=الإعدادات_التدريبية,train_dataset=مجموعة_البيانات,data_collator=جمع_البيانات,)المدرب.train()المدرب.save_model(OUTPUT_DIR)defمن_خلال():دليل_المنشورات="_posts"النصوص=إنشاء_بيانات_التدريب(دليل_المنشورات)التوكنايزر=LlamaTokenizerFast.from_pretrained(MODEL_NAME,trust_remote_code=True,use_fast=True)التوكنايزر.pad_token=التوكنايزر.eos_tokenمجموعة_البيانات=إعداد_مجموعة_البيانات(النصوص,التوكنايزر)تدريب_النموذج(مجموعة_البيانات,التوكنايزر)if__name__=="__main__":من_خلال()