importosimportglobimportjsonfromdotenvimportload_dotenvfromtransformersimportAutoTokenizer,AutoModelForCausalLM,Trainer,TrainingArguments,DataCollatorForLanguageModeling,LlamaTokenizerFastfromdatasetsimportDataset,load_datasetimporttorchload_dotenv()MODEL_NAME="deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"# Changé pour le modèle spécifié
OUTPUT_DIR="modèle_entraîné"TRAIN_FILE="train.jsonl"MAX_LENGTH=512BATCH_SIZE=8EPOCHS=3defcréer_données_entraînement(répertoire_posts):tous_les_textes=[]forlangue_dirinos.listdir(répertoire_posts):chemin_langue=os.path.join(répertoire_posts,langue_dir)ifnotos.path.isdir(chemin_langue):continueforchemin_fichieringlob.glob(os.path.join(chemin_langue,"*.md")):try:withopen(chemin_fichier,'r',encoding='utf-8')asf:contenu=f.read()# Supprimer la matière frontale
contenu=contenu.split("---",2)[-1].strip()tous_les_textes.append(contenu)exceptExceptionase:print(f"Erreur de lecture du fichier {chemin_fichier}: {e}")returntous_les_textesdefpréparer_jeu_de_données(textes,tokeniseur):encodages=tokeniseur(textes,truncation=True,padding=True,max_length=MAX_LENGTH,return_tensors="pt")returnDataset.from_dict(encodages)defentraîner_modèle(jeu_de_données,tokeniseur):arguments_entraînement=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,)modèle=AutoModelForCausalLM.from_pretrained(MODEL_NAME,trust_remote_code=True)data_collator=DataCollatorForLanguageModeling(tokenizer=tokeniseur,mlm=False)entraîneur=Trainer(model=modèle,args=arguments_entraînement,train_dataset=jeu_de_données,data_collator=data_collator,)entraîneur.train()entraîneur.save_model(OUTPUT_DIR)defmain():répertoire_posts="_posts"textes=créer_données_entraînement(répertoire_posts)tokeniseur=LlamaTokenizerFast.from_pretrained(MODEL_NAME,trust_remote_code=True,use_fast=True)tokeniseur.pad_token=tokeniseur.eos_tokenjeu_de_données=préparer_jeu_de_données(textes,tokeniseur)entraîner_modèle(jeu_de_données,tokeniseur)if__name__=="__main__":main()