back

Knowlegde

Knowledge Centre

Reglarea fină a LLaMA pentru a recrea stilul literar al lui Eminescu

by editor | 23.01.2025

Reglarea fină a LLaMA pentru a recrea stilul literar al lui Eminescu

Pe măsură ce inteligența artificială continuă să evolueze, ne-am angajat într-un proiect distractiv care face legătura între literatura clasică și tehnologia modernă. Scopul nostru a fost să dezvoltăm cu succes un model AI care poate genera text în stilul distinctiv al lui Mihai Eminescu, cel mai proeminent poet al României și o voce definitorie a poeziei românești.

Am folosit Google Collab cu Python pentru acest proiect. 

Înțelegerea Provocării

Înainte de a ne scufunda în detaliile tehnice, este important să înțelegem ce face acest proiect unic. Învățarea unui model AI să scrie ca Eminescu nu este doar despre vocabular și gramatică - este vorba despre capturarea esenței stilului său romantic, a profunzimii sale filosofice și a utilizării magistrale a limbii române. Acest lucru prezintă mai multe provocări interesante, de la gestionarea diacriticelor românești la înțelegerea structurilor complexe ale limbii literare românești din secolul al XIX-lea.

Fundația Tehnică: Modelul LLaMA

Am ales să construim pe modelul LLaMA al Meta pentru mai multe motive. LLaMA este deosebit de potrivit pentru sarcinile de fine-tuning datorită arhitecturii sale eficiente și a capacităților sale multilingve puternice. Am experimentat cu două versiuni:

  • LLaMA-3.2-3B: Implementarea noastră inițială
  • LLaMA-3.1-8B: O versiune alternativă pentru comparație
  • LLaMA-3.3-70B-Instruct: Ultima noastră iterație

Procesul de Fine-Tuning

Pregătirea Datelor
Pasul crucial a fost pregătirea datelor noastre de antrenament și împărțirea acestora în bucăți mici pentru partea de tokenizare. Iată cum am gestionat procesarea textului:

def prepare_dataset(file_paths, chunk_size=1024, overlap=128):
   chunks = []
   total_chunks = 0
   
   for file_path in file_paths:
       with open(file_path, 'r', encoding='utf-8') as file:
           text = file.read()
           
       # Split text into overlapping chunks for better context preservation
       words = text.split()
       for i in range(0, len(words), chunk_size - overlap):
           chunk = ' '.join(words[i:i + chunk_size])
           chunks.append(chunk)
           
   return Dataset.from_dict({"text": chunks})

Acest cod descompune operele lui Eminescu în bucăți gestionabile, menținând contextul prin suprapunere. Suprapunerea este crucială deoarece ajută modelul să înțeleagă dependențele pe termen lung din text.

Optimizarea Memoriei

Una dintre cele mai mari provocări ale noastre a fost gestionarea eficientă a modelului mare. Am implementat mai multe tehnici de optimizare a memoriei:

bnb_config = BitsAndBytesConfig(
   load_in_4bit=True,  # Use 4-bit quantization
   bnb_4bit_compute_dtype=torch.float16,  # Use float16 for calculations
   bnb_4bit_quant_type="nf4",  # Normal format 4-bit quantization
   bnb_4bit_use_double_quant=False,  # Avoid double quantization
   bnb_4bit_cpu_offload=True  # Offload to CPU when necessary
)

Această configurație ne permite să rulăm modele de limbă mari pe hardware de consum, menținând în același timp calitatea modelului. Cuantizarea pe 4 biți reduce semnificativ utilizarea memoriei, în timp ce descărcarea pe CPU ajută la gestionarea restricțiilor de memorie GPU.

Adaptarea cu Rang Redus (LoRA)

Am folosit LoRA pentru a fine-tune modelul în mod eficient, fără a actualiza toți parametrii:

lora_config = LoraConfig(
   r=16,  # Rank of the update matrices
   lora_alpha=32,  # Scaling factor
   target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],  # Which layers to fine-tune
   lora_dropout=0.05,  # Dropout for regularization
   bias="none",
   task_type="CAUSAL_LM"
)

Această abordare ne permite să fine-tune modelul cu semnificativ mai puțini parametri, făcând procesul mai eficient, menținând în același timp performanța. Modulele țintă se concentrează asupra mecanismelor de atenție, care sunt cruciale pentru captarea elementelor stilistice ale scrisului lui Eminescu.

Evaluare și Rezultate

Am dezvoltat un sistem de evaluare cuprinzător care compară ieșirea modelului nostru fine-tuned cu modelul de bază LLaMA:

def generate_text(model, tokenizer, prompt, max_length=200):
   with torch.no_grad():
       inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
       outputs = model.generate(
           **inputs,
           max_length=max_length,
           num_return_sequences=1,
           temperature=0.8,  # Controls randomness
           do_sample=True,   # Enable sampling
           top_p=0.92,       # Nucleus sampling parameter
           top_k=50,         # Limit vocabulary choices
           repetition_penalty=1.1  # Avoid repetition
       )
       return tokenizer.decode(outputs[0], skip_special_tokens=True)

Această funcție de generare echilibrează creativitatea și coerența prin parametrii atent reglați. Temperatura de 0,8 oferă un echilibru bun între diversitate și focalizare, în timp ce parametrii top_p și top_k ajută la menținerea calității și relevanței.

Aplicații în Lumea Reală

Implicațiile acestui proiect se extind dincolo de generarea de text în stilul lui Eminescu. Această tehnologie poate fi aplicată pentru:

  • Instrumente educaționale pentru studiul literaturii române
  • Asistență pentru scrierea creativă
  • Conservarea patrimoniului cultural
  • Analiza și cercetarea stilului literar

Continuăm să îmbunătățim modelul cu mai multe inițiative:

  • Extinderea setului de date de antrenament cu mai multe opere ale lui Eminescu
  • Experimentarea cu variante de model mai mari
  • Dezvoltarea unor metrici de evaluare mai bune pentru poezia românească
  • Crearea de instrumente interactive pentru scriitori și cercetători

Codul complet este disponibil pe repositoriul nostru GitHub, iar modelele noastre sunt disponibile pe HuggingFace pentru comunitățile mai largi de AI și literatură să le folosească și să le dezvolte. 

Puteți urmări videoclipurile noastre din serie pe YouTube. Sperăm că veți replica pașii noștri și vă veți distra la fel de mult ca noi. Primul episod din această serie este pe YouTube și linkul este aici.

Gata să Transformați Afacerea cu Soluții AI Personalizate?

La Softescu, ne specializăm în dezvoltarea de aplicații AI inteligente care înțeleg nevoile unice ale afacerii dumneavoastră. Echipa noastră de ingineri AI și experți în învățare automată vă poate ajuta să exploatați puterea modelelor de limbă mare și a AI-ului conversațional, asigurând în același timp integrarea fără probleme cu sistemele existente. Fie că doriți să automatizați procese, să îmbunătățiți experiențele clienților sau să obțineți perspective mai profunde asupra afacerii, contactați-ne pentru o consultare personalizată a soluției AI.

  • Knowlegde
    Knowledge Centre
    Extinde validarea câmpurilor cu expresii regulate
    editor
  • Knowlegde
    Knowledge Centre
    Înțelegerea arhitecturii CMS decuplate complet vs. decuplate progresiv
    editor
  • Knowlegde
    Knowledge Centre
    AngularJS sau Angular: Înțelegerea diferențelor și luarea deciziei corecte
    editor