Sari la conținutul principal

Codarea pozițională explicată: oferind transformerelor un simț al ordinii

Înțelege cum urmăresc transformerele ordinea cuvintelor, compară codările sinusoidale, învățate, relative, RoPE și ALiBi și vezi o implementare în PyTorch.
Actualizat 14 aug. 2026  · 14 min. citire

Explorează cu AI

ChatGPTClaudePerplexity

Imaginează-ți că încerci să citești un roman în care fiecare cuvânt de pe pagină este amestecat într-o ordine aleatorie. Chiar dacă înțelegi fiecare cuvânt, firul poveștii se pierde complet, deoarece ordinea cuvintelor dictează sensul. Când inginerii au început să proiecteze modele mari de limbaj (LLM-uri), s-au confruntat cu un obstacol similar. Cum înveți un model să înțeleagă succesiunea cuvintelor când mecanismul său de bază procesează totul simultan?

Aici intervine codarea pozițională. În acest articol, vom explora mecanismele interne ale codării poziționale și modul în care acestea le oferă transformerelor simțul ordinii. Vom desface evoluția ei de la formulele sinusoidale originale până la embeddingurile rotaționale moderne și cum să o implementezi în următorul tău proiect de machine learning. Dacă ești nou în arhitectura de bază, îți recomand să începi cu ghidul nostru despre cum funcționează transformerele.

Ce este codarea pozițională?

Codarea pozițională este o tehnică prin care rețelele neuronale înțeleg ordinea secvențială a datelor de intrare. Ea acționează ca un set de coordonate care reprezintă poziția relativă sau absolută a unui token și este îmbinată cu reprezentarea ta standard a datelor.

Înainte ca textul să intre într-o rețea neuronală, cuvintele sunt convertite în formate numerice continue numite embeddinguri. Totuși, embeddingurile standard surprind doar sensul semantic: nu îți spun nimic despre poziția unui cuvânt într-un text dat. Poți afla exact cum funcționează acest proces urmând cursul nostru Introducere în embeddinguri cu OpenAI API.

O codare pozițională este un strat matematic suplimentar adăugat direct la aceste embeddinguri de token. Combinând reprezentarea semantică cu o amprentă pozițională, modelul transformer poate distinge între cuvinte identice care apar în părți diferite ale unei propoziții.

Problema invariabilității la permutare

Datele secvențiale depind puternic de ordine. În limbajul natural, propoziția „câinele a mușcat bărbatul” are un sens cu totul diferit față de „bărbatul a mușcat câinele”.

Problema invariabilității la permutare în self-attention

Istoric, Recurrent Neural Networks (RNN) și Long Short-Term Memory (LSTM) gestionau acest lucru în mod inerent. Ele procesau tokenii secvențial, ceea ce însemna că rețeaua ingera matematic al doilea cuvânt abia după ce îl termina pe primul. În mod similar, Convolutional Neural Networks (CNN) procesează datele folosind ferestre glisante locale care surprind aranjamentul spațial al pixelilor sau al cuvintelor vecine.

Transformerele renunță complet la procesarea secvențială. Ele procesează toți tokenii în paralel. Motorul de bază al unui transformer este mecanismul de self-attention, care calculează scoruri de relație pereche între fiecare token din secvență în exact același timp. Din punct de vedere matematic, self-attention este invariant la permutare. Dacă amesteci secvența de intrare, mecanismul de self-attention va produce exact aceleași scoruri de atenție pentru perechile de cuvinte.

Fără un mecanism de păstrare a ordinii, modelul suferă o pierdere totală de informație secvențială. Sensul semantic se prăbușește într-un sac dezordonat de cuvinte. Codarea pozițională rezolvă problema invariabilității la permutare prin modificarea forțată a vectorilor de intrare astfel încât mecanismul de self-attention să înregistreze tokenii de la poziția 1 diferit față de tokenii de la poziția 10.

Cum funcționează codarea pozițională?

Codarea pozițională operează prin modificarea matematică a vectorilor de token înainte ca aceștia să ajungă la straturile de self-attention. Astfel, modelul calculează relații bazate atât pe sens, cât și pe poziție.

Să construim puțină intuiție. Imaginează-ți embeddingurile standard ale tokenilor ca niște ecusoane la o conferință. Ecusonul îți spune cine este persoana, dar locul în care se află în sală nu schimbă cine este sau relațiile cu alți oameni. Codarea pozițională e ca și cum ai adăuga un număr de scaun pe acel ecuson. Când le combini, știi atât cine este persoana, cât și unde stă. Asta adaugă context interacțiunilor potențiale pe care le-ar putea avea la conferință.

Într-un transformer, această combinație este realizată de obicei printr-o simplă adunare element cu element. Modelul ia vectorul de embedding semantic al unui cuvânt și adaugă un vector de codare pozițională de exact aceeași dimensiune. Vectorul rezultat conține o modulație subtilă pe care straturile următoare o învață ca pe niște coordonate spațiale.

Exemplu de calcul

Să privim un exemplu simplificat. Imaginează-ți un spațiu de embedding minuscul cu dimensiunea 4. Vrem să procesăm cuvântul „DataCamp” aflat la poziția 0 în secvență.

  1. Embedding semantic: Rețeaua neuronală recuperează embeddingul pentru „DataCamp”, care ar putea arăta ca [0.51, -0.22, 0.88, 0.14].
  2. Codare pozițională: Formula pozițională generează un vector de coordonate pentru poziția 0. Pentru acest exemplu, să presupunem că calculează [0.00, 1.00, 0.00, 1.00].
  3. Combinare: Adunăm cei doi vectori element cu element.
  4. Intrarea finală: Forward pass-ul primește [0.51, 0.78, 0.88, 1.14].

Chiar dacă același token „DataCamp” apare mai târziu la poziția 5, vectorul de codare pozițională va fi diferit. În consecință, vectorul de intrare final va arăta complet diferit pentru mecanismul de self-attention.

Codare pozițională sinusoidală

Articolul original „Attention Is All You Need” a introdus o metodă strălucitoare de generare a vectorilor poziționali folosind trigonometrie de bază. Această abordare nu necesită greutăți de învățat și se bazează în întregime pe funcții matematice fixe.

Fundament matematic

Codarea pozițională sinusoidală folosește funcții sinus și cosinus la frecvențe diferite pentru a codifica informația pozițională. Formula originală spune că, pentru o poziție dată (pos) și un anumit indice de dimensiune (i) în vectorul de embedding, codarea se calculează astfel:

  • Pentru dimensiuni pare (2i): PE(pos, 2i) = sin(pos / 10000^(2i/dmodel))

  • Pentru dimensiuni impare (2i+1): PE(pos, 2i+1) = cos(pos / 10000^(2i/dmodel))

În această formulă, dmodel este dimensiunea totală a vectorului de embedding. Pe măsură ce avansezi pe dimensiunile vectorului de la indexul 0 până la dmodel, lungimea de undă a funcțiilor sinusoidale crește geometric.

Avantaje și proprietăți

Această progresie geometrică a frecvențelor oferă mai multe avantaje clare. 

  1. Ieșirile sinus și cosinus sunt strict încadrate între -1 și 1. Această limitare asigură că codările poziționale nu copleșesc numeric embeddingurile semantice.
  2. Funcțiile sunt periodice. Datorită formularelor trigonometrice de adunare, o transformare liniară poate reprezenta cu ușurință codarea pozițională a unei poziții viitoare (pos + k) ca funcție a poziției curente (pos). Această proprietate permite în mod natural modelului să învețe codare a poziției relative.
  3. Codarea sinusoidală folosește parametri fixați. Nu necesită greutăți învățabile, reducând mult memoria necesară. Deoarece operează pe o funcție matematică continuă, modelul are o capacitate teoretică de extrapolare, adică poate mapa coordonate poziționale pentru secvențe mai lungi decât cele văzute în timpul antrenării.

Vizualizare

Pentru a înțelege codarea sinusoidală, ajută să o vizualizezi ca pe o hartă termică.

Matricea de codare pozițională sinusoidală

Axa x a vizualizării reprezintă dimensiunea embeddingului, iar axa y indică poziția tokenului. 

Dimensiunile inferioare din stânga oscilează rapid între valori negative și pozitive, permițându-le să distingă poziții de token apropiate. Pe măsură ce indexul dimensiunii crește, lungimea de undă devine mai mare, iar codarea se schimbă mai gradual. Aceste dimensiuni surprind diferențe poziționale pe distanțe mai mari.

Pentru cele 50 de poziții prezentate aici, multe dimensiuni superioare apar ca dungi verticale aproape uniforme. Asta se întâmplă deoarece lungimile lor de undă sunt atât de mari încât valorile sinus rămân aproape de 0 și valorile cosinus rămân aproape de 1 în această secvență scurtă, nu 0 și 1, respectiv. Așadar, dungile alternante reflectă dimensiuni sine–cosine adiacente, nu o codare binară simplă. Pe o secvență mai lungă, aceste dimensiuni ar începe și ele să varieze vizibil.

Concluzia este că frecvențele diferite oferă modelului informație pozițională la multiple scări: dimensiunile care se schimbă rapid captează diferențele fine între tokenii apropiați, în timp ce dimensiunile care se schimbă lent urmăresc poziția mai largă în secvențe lungi.

Codare pozițională învățată

Deși formulele matematice fixe sunt elegante, arhitecturile moderne de deep learning se bazează adesea pe date pentru a învăța reprezentări optime. Embeddingurile poziționale învățate mută întreaga sarcină a aranjamentului în faza de antrenare.

Concept și implementare

În loc să codifice în dur valorile poziționale cu funcții sinus și cosinus, embeddingurile poziționale învățate tratează coordonatele de poziție ca parametri standard, antrenabili. 

Modelul inițializează o matrice de embedding goală în care fiecare rând corespunde unei poziții specifice din secvență. În timpul buclei standard de antrenare prin backpropagation, rețeaua actualizează aceste greutăți poziționale împreună cu embeddingurile semantice ale tokenilor pentru a minimiza funcția de pierdere generală.

Avantaje comparative

Principalul avantaj al embeddingurilor poziționale învățate este flexibilitatea extremă. Au libertatea totală de a învăța reprezentările poziționale exacte care funcționează cel mai bine pentru un anumit set de date. Arhitecturi precum BERT și GPT-2 au popularizat cu succes această abordare datorită adaptabilității ridicate și performanței puternice pe sarcini din aval.

Limitări și provocări

Cea mai importantă limitare a embeddingurilor poziționale învățate este o limită strictă asupra lungimii secvenței. Dacă un model este antrenat cu maximum 2.048 vectori de poziție învățați, el nu poate procesa fizic un document de 2.049 tokeni. 

Această restricție limitează sever extrapolarea lungimii și deseori necesită reantrenare costisitoare pentru a extinde fereastra de context.

Codare pozițională relativă

Pe măsură ce modelele au evoluat pentru a gestiona documente mai lungi, inginerii au realizat că poziția absolută a unui cuvânt contează adesea mai puțin decât distanța lui relativă față de alte cuvinte.

Schimbare conceptuală către poziții relative

Ia în considerare expresia „rapidul avans al AI-ului”. Relația gramaticală dintre „avans” și „AI” rămâne identică, indiferent dacă expresia apare chiar la începutul unui document sau la final. Codarea pozițională relativă abandonează coordonatele absolute ale grilei. În schimb, se concentrează în întregime pe decalajele de distanță dintre tokenii care interacționează.

Implementare în mecanismele de atenție

Pentru a implementa codările relative, inginerii modifică direct calculele scorurilor de atenție, în loc să altereze embeddingurile de intrare chiar la începutul rețelei. 

Când se calculează scorul de atenție între o matrice „query” și o matrice „key”, operația include un termen de bias suplimentar învățat, care reprezintă distanța relativă. Această modificare garantează invarianța la translație în text. Pentru o aprofundare a modului în care operează aceste matrici, citește ghidul nostru despre mecanismul de atenție în LLM-uri.

Compromisuri practice

Această abordare oferă o înțelegere contextuală foarte precisă, dar introduce un cost computațional sever. Calcularea de matrici unice de distanță relativă pentru fiecare head de atenție crește drastic consumul de memorie. De asemenea, complică mecanismele interne de caching folosite pentru a accelera generarea de text.

Informație pozițională absolută vs relativă

Alegerea între codarea absolută și cea relativă depinde de sarcina specifică. 

  • Codarea absolută funcționează excelent când aranjamentul spațial exact este rigid și se prioritizează execuția rapidă. 
  • Codarea relativă se dovedește net superioară pentru procesarea limbajului natural în formă lungă, unde structura gramaticală depinde în întregime de distanțele de context local, nu de coordonatele absolute din document.

Rotary Position Embedding (RoPE)

În căutarea continuă de a perfecționa arhitecturile transformer, cercetătorii au introdus Rotary Position Embedding (RoPE). Acesta combină cele mai bune proprietăți ale codărilor poziționale absolute și relative și a devenit rapid un standard în industrie.

Abordare inovatoare

RoPE unifică plasarea absolută și distanțele relative folosind transformări rotaționale. În loc să adauge un vector la embeddinguri sau să adauge biase mari la scorurile de atenție, RoPE mapează vectorul de embedding într-un plan complex și îl rotește cu un unghi specific. Mărimea acestui unghi este determinată strict de poziția absolută a tokenului în secvență.

Codare pozițională RoPE

Intuiții matematice

Într-un spațiu 2D, rotația se aplică folosind o matrice standard de rotație 2D. Pentru dimensiuni mai mari, RoPE grupează pur și simplu dimensiunile embeddingului în perechi și aplică rotații 2D unice fiecărui segment, în funcție de indexul poziției absolute.

Datorită proprietăților geometrice ale matricilor de rotație, produsul scalar al unui vector query rotit și al unui vector key rotit ajunge să depindă doar de unghiul relativ dintre ele. Astfel, RoPE utilizează o mapare a poziției absolute pentru a codifica în mod natural distanța relativă dintre tokeni.

RoPE vs codare sinusoidală

După cum arată graficul de mai sus, codarea sinusoidală schimbă magnitudinea și direcția vectorului original. RoPE, în schimb, păstrează informația despre magnitudine și are nevoie doar de unghiul dintre două poziții diferite pentru a înțelege distanța lor relativă.

Attention With Linear Biases (ALiBi)

În timp ce RoPE se bazează pe matematică rotațională complexă, o altă tehnică numită Attention with Linear Biases (ALiBi) adoptă o abordare complet diferită.

Simplitate și eficiență

ALiBi renunță complet la ideea de a adăuga informație pozițională la embeddingurile inițiale ale tokenilor. Embeddingurile cuvintelor intră în transformer complet neatinse. 

În schimb, ALiBi intervine chiar în ultimul pas al calculelor de atenție. Chiar înainte ca logiturile de atenție să treacă prin funcția softmax, ALiBi scade o penalizare statică proporțională cu distanța dintre cei doi tokeni. Cu cât două cuvinte sunt mai îndepărtate, cu atât penalizarea scăzută din scorul lor de atenție este mai mare.

Performanță

Această metodă este foarte simplu de implementat și foarte eficientă. Cel mai mare beneficiu este eficacitatea extremă la sarcinile de extrapolare a lungimii. Un model antrenat cu ALiBi pe secvențe de 1.024 tokeni poate genera cu ușurință text coerent pe secvențe de două ori mai lungi fără să cedeze. 

Pentru practicienii interesați să exploreze alte tehnici avansate utilizate pentru generare rapidă de text și inferență, vezi ghidul nostru despre decodarea speculativă.

Când să folosești fiecare tip de codare pozițională

Pornește de la ce construiești, apoi alege metoda potrivită — uneori e una, alteori mai multe.

  • Vrei un baseline simplu, fără parametri: Sinusoidală (formule fixe, nimic de antrenat).
  • Lungimea secvenței e fixă și vrei performanță maximă pe un set de date specific: Învățată.
  • Trebuie să gestionezi secvențe mai lungi decât cele pe care le-ai antrenat: RoPE este cea mai puternică alegere dintre tehnicile care pot extrapola.
  • Gramatica depinde de distanța dintre tokeni, nu de poziția lor absolută: Relativă sau RoPE.
  • Construiești un LLM modern, cu scop general: RoPE.
  • Extrapolarea lungimii e prioritatea ta numărul unu și vrei cea mai simplă implementare: ALiBi.
  • Vrei beneficiile pozițiilor relative fără costurile de memorie și caching: RoPE (codările relative oferă beneficiul, dar sunt mai costisitoare).

Implementare practică și considerații arhitecturale

A trece de la teorie la practică necesită înțelegerea modului de integrare a codărilor poziționale în cod real și gestionarea limitărilor arhitecturale.

Implementarea codării poziționale în transformere

Pentru a adăuga codări poziționale într-un transformer în frameworkuri precum PyTorch, dezvoltatorii creează de obicei un modul dedicat. Acest modul generează o dată matricea de codare și o înregistrează ca buffer, astfel încât să nu se actualizeze accidental în timpul backpropagation. 

Mai jos este o implementare practică standard a unui forward pass care încorporează codări sinusoidale. Codările sunt calculate o singură dată din formulele sinus și cosinus și nu se schimbă niciodată în timpul antrenării, motiv pentru care sunt stocate într-un buffer, nu ca parametri învățabili (și de aceea nu adaugă cost la antrenare).

import torch
import torch.nn as nn
import math

class PositionalEncoding(nn.Module):
    def __init__(self, d_model: int, max_len: int = 5000):
        super().__init__()
        
        pe = torch.zeros(max_len, d_model)
        position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)
        
        # Calculate the division term for frequencies
        div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))
        
        # Apply sine to even indices and cosine to odd indices
        pe[:, 0::2] = torch.sin(position * div_term)
        pe[:, 1::2] = torch.cos(position * div_term)
        
        pe = pe.unsqueeze(0)
        
        # Register as a buffer
        self.register_buffer('pe', pe)

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        # Add positional encoding directly to the input embeddings
        seq_len = x.size(1)
        x = x + self.pe[:, :seq_len, :]
        return x

În __init__, modulul precomputează tabelul de codare până la max_len poziții: position este o coloană de indici (0, 1, 2, …) iar div_term sunt frecvențele, rezultând în 1 / 10000^(2i/d_model), astfel încât dimensiunile inferioare primesc unde rapide, iar cele superioare unde lente. 

Aplicarea sin pe dimensiuni pare (0::2) și cos pe dimensiuni impare (1::2) umple tabelul. Apoi forward face singura muncă la runtime: taie tabelul la lungimea secvenței de intrare și îl adaugă element cu element la embeddingurile de token. Observă că modulul presupune o formă batch-first [batch, seq_len, d_model], motiv pentru care forward taie pe dimensiunea 1.

Bias de poziție și fenomenul „pierdut la mijloc”

O consecință neintenționată a mapării secvențelor foarte lungi este biasul de poziție. Acesta se manifestă frecvent ca fenomenul „lost-in-the-middle”. Când procesează documente masive, modelele de limbaj tind să-și amintească mult mai bine informațiile de la începutul sau de la finalul promptului decât pe cele de la mijloc. S-ar putea să-ți sune cunoscut, deoarece memoria umană funcționează similar (cel puțin la mine; nu-mi spune că sunt singurul care își amintește începutul și sfârșitul cărților mai bine decât restul!).

Teoria este că acest lucru se întâmplă deoarece mecanismul de atenție este copleșit de context irelevant și se ancorează natural de tokenii timpurii (care setează instrucțiunea) și de cei mai recenți (care sunt proaspeți în memorie). Pentru a atenua acest bias, dezvoltatorii apelează la strategii avansate de împărțire în fragmente (chunking) și la sisteme de regăsire semantică.

Codare pozițională pentru domenii specializate

Transformerele nu mai sunt limitate strict la text. Conceptul de codare pozițională se adaptează rapid pentru a gestiona tipuri diferite de date în mai multe domenii.

Pentru transformere de viziune, imaginile sunt tăiate în grile de patch-uri. O codare secvențială 1D simplă nu surprinde proximitatea spațială în 2D. Prin urmare, modelele de viziune folosesc frecvent codări poziționale 2D învățate, care iau în calcul atât coordonatele X, cât și Y ale patch-ului din imagine. 

Există adaptări similare pentru modelele de serii temporale continue, unde codările specializate urmăresc distanțe temporale, sezonalitate și timestampuri.

Cercetări suplimentare despre codarea pozițională

Pe măsură ce cursa către ferestre de context mai mari se accelerează, rafinarea modului în care modelele înțeleg poziția rămâne un domeniu de cercetare extrem de activ și critic în machine learning.

Extrapolarea lungimii și extinderea contextului

Utilizatorii de astăzi cer ferestre de context masive pentru a procesa dintr-o dată coduri întregi sau serii de romane. Deoarece antrenarea de la zero pe lungimi uriașe de secvențe este prea costisitoare, cercetătorii se bazează pe tehnici de extindere a contextului. 

Metode precum interpolarea pozițională comprimă matematic coordonatele poziționale ale unei secvențe mult mai lungi în limitele lungimii originale de antrenare. Metode adaptive precum YaRN ajustează dinamic frecvența rotațională a parametrilor RoPE pentru a extinde fără întreruperi înțelegerea distanțelor de către model.

Transformere fără codare pozițională explicită

Surprinzător, unele cercetări sugerează că o codare pozițională explicită s-ar putea să nu fie întotdeauna strict necesară. În modelele de limbaj cauzale doar cu decodor, masca cauzală standard (un mecanism care forțează tokenii să privească doar înapoi) scurge în mod inerent informație despre ordonarea temporală. 

Asta înseamnă că ar putea fi posibilă învățarea implicită a regulilor poziționale doar din masca cauzală, prin reglarea strategică a temperaturii și ajustări arhitecturale.

Provocări și direcții viitoare

Frontiera finală evidențiază un compromis persistent între adaptarea strictă (optimizarea performanței pentru o lungime specifică a secvenței) și extrapolarea impecabilă (permiterea modelului să generalizeze la infinit). 

Zonele emergente de cercetare se concentrează intens pe codarea multimodală. Crearea unor reprezentări poziționale universale care îmbină coordonate video 3D cu fluxuri de text și audio este unul dintre obiectivele următoarei generații de modele de inteligență artificială.

Concluzie

Codarea pozițională face legătura dintre procesarea paralelă și înțelegerea secvențială și ne permite să creăm modele care pot procesa cantități mari de date în ordine. Am explorat cum embeddingurile învățate și relative oferă flexibilitate extremă și cum inovațiile moderne precum RoPE și ALiBi optimizează atât eleganța matematică, cât și eficiența computațională. 

Pe măsură ce ferestrele de context se extind de la câteva mii de tokeni la milioane, actul matematic simplu de a spune unei rețele neuronale exact unde sunt lucrurile va rămâne în centrul proiectării de modele. 

Dacă vrei să mergi mai în profunzime și să obții experiență practică, îți recomand să te înscrii la traseul nostru de competențe Developing Large Language Models.

Întrebări frecvente despre codarea pozițională

Ce este codarea pozițională în machine learning?

Codarea pozițională este o tehnică matematică folosită pentru a oferi rețelelor neuronale informații despre ordinea datelor într-o secvență.

De ce au nevoie modelele transformer de codare pozițională?

Spre deosebire de Rețelele Neuronale Recurente mai vechi, care procesează datele pas cu pas, transformerele procesează toate datele simultan folosind un mecanism de self-attention. Deoarece self-attention este în mod natural invariant la permutare, tratează intrarea ca pe un sac de cuvinte neordonat. Codarea pozițională rezolvă asta injectând coordonate secvențiale direct în date înainte ca modelul să le proceseze.

Care este diferența dintre codarea pozițională absolută și cea relativă?

Codarea pozițională absolută atribuie unui token o coordonată fixă pe baza indexului său exact într-o secvență. Codarea pozițională relativă ignoră locația exactă din grilă și în schimb calculează distanța dintre doi tokeni care interacționează, concentrându-se doar pe decalajul lor contextual.

Ce este Rotary Position Embedding (RoPE)?

RoPE este o metodă de codare utilizată pe scară largă, care mapează embeddingurile tokenilor pe un plan complex și le rotește cu un unghi determinat de poziția lor absolută. Când modelul calculează scorurile de atenție, relația dintre doi vectori rotiți depinde în întregime de distanța lor relativă.

Ce sunt embeddingurile poziționale învățate?

În loc să folosească formule matematice fixe precum sinus și cosinus, embeddingurile poziționale învățate tratează coordonatele spațiale ca greutăți antrenabile. Modelul inițializează o matrice goală de poziții și actualizează aceste coordonate în timpul antrenării pentru a învăța reprezentări spațiale optime pentru un set de date specific.

Subiecte

Cursuri de top despre Transformere

track

Dezvoltarea modelelor lingvistice mari

16 oră
Învață să dezvolți modele lingvistice mari (LLM-uri) cu PyTorch și Hugging Face, folosind cele mai noi tehnici de deep learning și NLP.
Vezi detaliiRight Arrow
Începeți Cursul
Vezi mai multRight Arrow