Skip to content

Translation chapter 6 #937

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 39 commits into from
Jun 4, 2025
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
6b5a6f9
Changed romanian folder name from rum to ro
Angroys Dec 28, 2024
d13ac2d
added chapter 3 first 3 sections
Angroys Jan 1, 2025
ade28a8
Finished translating chapter 3
Angroys Jan 2, 2025
2a10e3b
Finished chapter 4
Angroys Jan 2, 2025
1c9d20a
Finished chapter 5 for the ro language
Angroys Jan 4, 2025
bfe0baf
Done chapter 6
Angroys Jan 8, 2025
abd846c
Add chapter 3
Jan 8, 2025
1bd8547
fix: add toctree content
eduard-balamatiuc May 26, 2025
9026c66
fix: update toctree to only include the current chapter
eduard-balamatiuc May 27, 2025
8d7fd41
Merge branch 'main' into translation-chapter-3
eduard-balamatiuc May 27, 2025
444d4f4
Merge branch 'main' into translation-chapter-4
eduard-balamatiuc May 27, 2025
ea4af07
Merge branch 'main' into translation-chapter-5
eduard-balamatiuc May 27, 2025
9724363
Merge branch 'main' into translation-chapter-6
eduard-balamatiuc May 27, 2025
e61e11e
fix: remove unnecessary files
eduard-balamatiuc May 27, 2025
2550453
fix: remove unecessary files from wrong folder
eduard-balamatiuc May 27, 2025
0904819
feat: add chapter 4 content
eduard-balamatiuc May 27, 2025
6f98827
fix: solve formatting
eduard-balamatiuc May 27, 2025
e5722ca
fix: revert deletion of chapter 0
eduard-balamatiuc May 27, 2025
1b93f33
fix: solve gitignore diff
eduard-balamatiuc May 27, 2025
0cea075
fix: solve bad folder structure
eduard-balamatiuc May 27, 2025
7e95b1f
feat: add content for chapter 5
eduard-balamatiuc May 27, 2025
16a2692
fix: revert missing line
eduard-balamatiuc May 27, 2025
9ebc1a0
fix: add missing link
eduard-balamatiuc May 27, 2025
c312f44
fix: solve typos in files 3 4 6
eduard-balamatiuc May 27, 2025
219c04d
fix: internal server error request to file 3 chapter4
eduard-balamatiuc May 27, 2025
092e1cc
fix: solve make style issue
eduard-balamatiuc May 27, 2025
827ac06
fix: remove unnecessary changes
eduard-balamatiuc May 27, 2025
c117018
feat: add translated content for chapter 6
eduard-balamatiuc May 27, 2025
d44c2fd
fix: solve all PR threads recommendations
eduard-balamatiuc Jun 3, 2025
6da5dde
fix: solve chapter3 romanian translation file 6 formatting issues
eduard-balamatiuc Jun 3, 2025
dc3c3d2
fix: resolve all thread suggestions from chapter 4 romanian translation
eduard-balamatiuc Jun 3, 2025
4be802f
fix: solve typo in romanian spelling chapter 4 file 4
eduard-balamatiuc Jun 3, 2025
6f50a71
feat: add Angroys as one of the contributors to this chapters transla…
eduard-balamatiuc Jun 3, 2025
39e6d0a
fix: resolve all threads and solve all mistakes found in romanian tra…
eduard-balamatiuc Jun 3, 2025
a836cf0
fix: address all threads and grammatical errors in the romanian trans…
eduard-balamatiuc Jun 3, 2025
0829b0d
Merge branch 'main' into translation-chapter-3
eduard-balamatiuc Jun 3, 2025
baa99ea
Merge branch 'translation-chapter-3' into translation-chapter-4
eduard-balamatiuc Jun 3, 2025
e82e833
Merge branch 'translation-chapter-4' into translation-chapter-5
eduard-balamatiuc Jun 3, 2025
bb0aeac
Merge branch 'translation-chapter-5' into translation-chapter-6
eduard-balamatiuc Jun 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions chapters/rum/_toctree.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,29 @@
- local: chapter1/10
title: Quiz de final de capitol
quiz: 1

- title: 6. Biblioteca 🤗 Tokenizers
sections:
- local: chapter6/1
title: Introducere
- local: chapter6/2
title: Antrenarea unui nou tokenizer dintr-unul vechi
- local: chapter6/3
title: Superputerile tokenizerilor rapizi
- local: chapter6/3b
title: Tokenizerii rapizi în pipeline-ul de QA
- local: chapter6/4
title: Normalizare și pre-tokenizare
- local: chapter6/5
title: Tokenizare Byte-Pair Encoding
- local: chapter6/6
title: Tokenizare WordPiece
- local: chapter6/7
title: Tokenizare Unigram
- local: chapter6/8
title: Construirea unui tokenizer, bloc cu bloc
- local: chapter6/9
title: Tokenizeri, verificare!
- local: chapter6/10
title: Quiz de sfârșit de capitol
quiz: 6
19 changes: 19 additions & 0 deletions chapters/rum/chapter6/1.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Introducere[[introducere]]

<CourseFloatingBanner
chapter={6}
classNames="absolute z-10 right-0 top-0"
/>

În [Capitolul 3](/course/chapter3), am examinat cum să facem fine-tune unui model pentru o anumită sarcină. Când facem acest lucru, utilizăm același tokenizer cu care modelul a fost antrenat - dar ce facem când dorim să antrenăm un model de la zero? În așa cazuri, utilizarea unui tokenizer care a fost antrenat pe un corpus dintr-un alt domeniu sau limbă este, de obicei, suboptimal. De exemplu, un tokenizer antrenat pe un corpus în limba engleză va funcționa rău pe un corpus de texte în limba japoneză, deoarece utilizarea spațiilor și a punctuației este foarte diferită în cele două limbi.

În acest capitol, veți învăța cum să antrenați un tokenizer complet nou pe un corpus de texte, astfel încât să poată fi utilizat pentru a antrena un model de limbaj. Acest lucru va fi realizat cu ajutorul bibliotecii [🤗 Tokenizers](https://github.com/huggingface/tokenizers), care oferă tokenizerii "rapizi" din biblioteca [🤗 Transformers](https://github.com/huggingface/transformers). Vom examina îndeaproape caracteristicile pe care această bibliotecă le oferă și vom explora cum tokenizatorii rapizi diferă de versiunile "lente".

Subiectele pe care le vom acoperi includ:

* Cum să antrenați un tokenizer nou similar celui utilizat de un anumit checkpoint pe un corpus nou de texte

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* Cum să antrenați un tokenizer nou similar celui utilizat de un anumit checkpoint pe un corpus nou de texte
* Cum să antrenați un tokenizer nou, similar celui utilizat de un anumit checkpoint pe un corpus nou de texte

* Caracteristicile speciale ale tokenizerilor rapizi
* Diferențele dintre cei trei algoritmi principali de subword tokenization utilizate în NLP în prezent
* Cum să construiți un tokenizer de la zero cu biblioteca 🤗 Tokenizers și să îl antrenați pe anumite date

Tehnicile prezentate în acest capitol vă vor pregăti pentru secțiunea din [Capitolul 7](/course/chapter7/6), unde vom examina crearea unui model de limbaj pentru codul sursă Python. Să începem prin a explora ce înseamnă să "antrenați" un tokenizer în primul rând.
283 changes: 283 additions & 0 deletions chapters/rum/chapter6/10.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,283 @@
<!-- DISABLE-FRONTMATTER-SECTIONS -->

# Quiz de sfârșit de capitol[[end-of-chapter-quiz]]

<CourseFloatingBanner
chapter={6}
classNames="absolute z-10 right-0 top-0"
/>

Hai să testăm ceea ce ai învățat în acest capitol!

### 1. Când ar trebui să antrenezi un nou tokenizer?

<Question
choices={[
{
text: "Când datasetul tău este similar cu cel utilizat de un model preantrenat și doriți să preantrenați un model nou",
explain: "În acest caz, pentru a economisi timp și resurse, o alegere mai bună ar fi să folosești același tokenizer ca și modelul preantrenat și să faceți fine-tune acelui model."
},
{
text: "Atunci când datasetul tău este similar cu cel utilizat de un model preantrenat existent și doriți să faceți fine-tune unui nou model utilizând acest model preantrenat",
explain: "Pentru a face fine-tune unui model dintr-un model preantrenat, trebuie să utilizați întotdeauna același tokenizer."
},
{
text: "Atunci când datasetul tău este diferit de cel utilizat de un model preantrenat existent și doriți să preantrenați un nou model",
explain: "Corect! În acest caz nu există niciun avantaj în a utiliza același tokenizer.",
correct: true
},
{
text: "Atunci datasetul tău este diferit de cel utilizat de un model preantrenat existent, dar doriți să faceți fine-tune unui model nou utilizând acest model preantrenat",
explain: "Pentru a face fine-tune unui model dintr-un model preantrenat, trebuie să utilizați întotdeauna același tokenizer."
}
]}
/>

### 2. Care este avantajul utilizării unui generator de liste de texte în comparație cu o listă de liste de texte atunci când utilizați `train_new_from_iterator()`?

<Question
choices={[
{
text: "Acesta este singurul tip pe care metoda <code>train_new_from_iterator()</code> îl acceptă.",
explain: "O listă de liste de texte este un tip special de generator de liste de texte, astfel încât metoda o va accepta și pe aceasta. Încercați din nou!"
},
{
text: "Veți evita încărcarea întregului dataset în memorie.",
explain: "Corect! Fiecare batch de texte va fi eliberat din memorie atunci când iterați, iar câștigul va fi vizibil mai ales dacă utilizați 🤗 Datasets pentru a stoca textele.",
correct: true
},
{
text: "Acest lucru va permite bibliotecii 🤗 Tokenizers să utilizeze multiprocessing.",
explain: "Nu, oricum va folosi multiprocessing."
},
{
text: "Tokenizerul pe care îl vei antrena va genera texte mai bune.",
explain: "Tokenizerul nu generează text - îl confundați cu un model lingvistic?"
}
]}
/>

### 3. Care sunt avantajele utilizării unui tokenizer "rapid"?

<Question
choices={[
{
text: "Acesta poate procesa inputuri mai rapid decât un tokenizator lent atunci când faci batch mai multor inputuri împreună.",
explain: "Corect! Datorită paralelismului implementat în Rust, acesta va fi mai rapid pe batch-uri de inputuri. La ce alt beneficiu te poți gândi?",
correct: true
},
{
text: "Tokenizerele rapide tokenizează întotdeauna mai rapid decât omologii lor lenți.",
explain: "Un tokenizer rapid poate fi de fapt mai lent atunci când îi dai doar unul sau foarte puține texte, deoarece nu poate utiliza paralelismul."
},
{
text: "Poate aplica padding și truncation.",
explain: "Adevărat, dar și tokenizerele lente fac asta."
},
{
text: "Acesta are unele caracteristici suplimentare care vă permit să asociați tokenii cu intervalul de text care le-a creat.",
explain: "Într-adevăr - acestea se numesc offset mappings. Totuși, acesta nu este singurul avantaj.",
correct: true
}
]}
/>

### 4. Cum tratează pipelineul `token-classification` entitățile care se întind pe mai mulți tokeni?

<Question
choices={[
{
text: "Entitățile cu același label sunt merged într-o singură entitate.",
explain: "Explicația aceasta e prea simplă. Încearcă din nou!"
},
{
text: "Există un label pentru începutul unei entități și un label pentru continuarea unei entități.",
explain: "Corect!",
correct: true
},
{
text: "Într-un cuvânt dat, atâta timp cât primul token are labelul entității, întregul cuvânt este considerat etichetat cu entitatea respectivă.",
explain: "Aceasta este o strategie de gestionare a entităților. Ce alte răspunsuri se aplică aici?",
correct: true
},
{
text: "Atunci când un token are labelul unei entități date, orice alt token următor cu aceeași label este considerat parte a aceleiași entități, cu excepția cazului în care este labeled ca fiind începutul unei noi entități.",

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
text: "Atunci când un token are labelul unei entități date, orice alt token următor cu aceeași label este considerat parte a aceleiași entități, cu excepția cazului în care este labeled ca fiind începutul unei noi entități.",
text: "Atunci când un token are labelul unei entități date, orice alt token următor cu aceeași label este considerat parte a aceleiași entități, cu excepția cazului în care este etichetat ca fiind începutul unei noi entități.",

explain: "Acesta este cel mai comun mod de a grupa entitățile împreună - deși nu este singurul răspuns corect.",
correct: true
}
]}
/>

### 5. Cum gestionează pipelineul `question-answering` contextele lungi?

<Question
choices={[
{
text: "De fapt, nu o face, deoarece trunchiază contextul lung la lungimea maximă acceptată de model.",
explain: "Există un truc pe care îl poți folosi pentru a gestiona contextele lungi. Îți amintești care este acesta?"
},
{
text: "Acesta împarte contextul în mai multe părți și calculează media rezultatelor obținute.",
explain: "Nu, nu ar avea sens să se facă o medie a rezultatelor, deoarece unele părți ale contextului nu vor include răspunsul."
},
{
text: "Acesta împarte contextul în mai multe părți (cu suprapuneri) și găsește scorul maxim pentru un răspuns în fiecare parte.",
explain: "Acesta este răspunsul corect!",
correct: true
},
{
text: "Acesta împarte contextul în mai multe părți (fără suprapunere, pentru eficiență) și găsește scorul maxim pentru un răspuns în fiecare parte.",
explain: "Nu, acesta include o anumită suprapunere între părți pentru a evita situația în care răspunsul ar fi împărțit în două părți."
}
]}
/>

### 6. Ce este normalizarea?

<Question
choices={[
{
text: "Este vorba de orice curățare pe care tokenizerul o efectuează asupra textelor în etapele inițiale.",
explain: "Corect - de exemplu, ar putea implica eliminarea accentelor sau a spațiilor, sau scrierea cu mijuscule a inputurilor.",
correct: true
},
{
text: "Este o tehnică de augmentare a datelor care constă în a face textul mai normal prin eliminarea cuvintelor rare.",
explain: "Este incorect! Încearcă din nou."
},
{
text: "Acesta este ultimul pas de post-procesare în care tokenizerul adaugă tokenii speciali.",
explain: "Această etapă se numește pur și simplu post-procesare."
},
{
text: "Este atunci când embeddingurile sunt realizate cu media 0 și standard deviation 1, prin scăderea mediei și împărțirea la std.",
explain: "Acest proces se numește de obicei normalizare atunci când este aplicat valorilor pixelilor în computer vision, dar nu este ceea ce înseamnă normalizare în NLP."
}
]}
/>

### 7. Ce este pre-tokenizarea pentru un subword tokenizer?

<Question
choices={[
{
text: "Acesta este pasul dinaintea tokenizării, în care se aplică augmentarea datelor (cum ar fi mascarea aleatorie).",
explain: "Nu, acest pas face parte din preprocesare."
},
{
text: "Este pasul de dinaintea tokenizării, în care operațiile de curățare dorite sunt aplicate textului.",
explain: "Nu, acesta este pasul de normalizare."
},
{
text: "Acesta este pasul dinaintea aplicării modelul de tokenizer, pentru a împărți inputul în cuvinte.",
explain: "Acesta este răspunsul corect!",
correct: true
},
{
text: "Acesta este pasul dinaintea aplicării modelul de tokenizer, pentru a împărți inputul în tokenuri.",
explain: "Nu, împărțirea în tokenuri este sarcina modelul de tokenizer."
}
]}
/>

### 8. Selectați propozițiile care se aplică modelului de tokenizare BPE.

<Question
choices={[
{
text: "BPE este un algoritm de tokenizare a subcuvintelor care începe cu un vocabular mic și învață reguli de merge.",
explain: "Acesta este într-adevăr cazul!",
correct: true
},
{
text: "BPE este un algoritm de tokenizare a subcuvintelor care începe cu un vocabular mare și elimină progresiv tokenii din acesta.",
explain: "Nu, aceasta este abordarea adoptată de un alt algoritm de tokenizare."
},
{
text: "Tokenizerele BPE învață regulile de merge prin mergeul perechii de tokeni care este cea mai frecventă.",
explain: "Acest lucru este corect!",
correct: true
},
{
text: "Un tokenizer BPE învață o regulă de merge prin mergeul perechii de tokeni care maximizează un scor care privilegiază perechile frecvente cu părți individuale mai puțin frecvente.",
explain: "Nu, aceasta este strategia aplicată de un alt algoritm de tokenizare."
},
{
text: "BPE tokenizează cuvintele în subcuvinte prin divizarea lor în caractere și apoi prin aplicarea regulilor de merge.",
explain: "Acest lucru este corect!",
correct: true
},
{
text: "BPE tokenizează cuvintele în subcuvinte prin găsirea celui mai lung subcuvânt de la început care se află în vocabular, apoi repetă procesul pentru restul textului.",
explain: "Nu, acesta este un alt mod de a face lucrurile al algoritmului de tokenizare."
},
]}
/>

### 9. Selectați propozițiile care se aplică modelului de tokenizare WordPiece.

<Question
choices={[
{
text: "WordPiece este un algoritm de tokenizare a subcuvintelor care începe cu un vocabular mic și învață reguli de merge.",
explain: "Acesta este într-adevăr cazul!",
correct: true
},
{
text: "WordPiece este un algoritm de tokenizare a subcuvintelor care începe cu un vocabular mare și elimină progresiv tokenii din acesta.",
explain: "Nu, aceasta este abordarea adoptată de un alt algoritm de tokenizare."
},
{
text: "Tokenizerele WordPiece învață regulile de merge prin mergeul perechii de tokeni care este cea mai frecventă.",
explain: "Nu, aceasta este abordarea adoptată de un alt algoritm de tokenizare!",
},
{
text: "Un tokenizer WordPiece învață o regulă de merge prin mergeul perechii de tokeni care maximizează un scor care privilegiază perechile frecvente cu părți individuale mai puțin frecvente.",
explain: "Acest lucru este corect!",
correct: true
},
{
text: "WordPiece tokenizează cuvintele în subcuvinte prin găsirea celei mai probabile segmentări în tokeni, în conformitate cu modelul.",
explain: "Nu, acesta este modul în care funcționează un alt algoritm de tokenizare."
},
{
text: "WordPiece tokenizează cuvintele în subcuvinte prin găsirea celui mai lung subcuvânt de la început care se află în vocabular, apoi repetă procesul pentru restul textului.",
explain: "Da, acesta este modul în care WordPiece procedează pentru encoding.",
correct: true
},
]}
/>

### 10. Selectați propozițiile care se aplică modelului de tokenizare Unigram.

<Question
choices={[
{
text: "Unigram este un algoritm de tokenizare a subcuvintelor care începe cu un vocabular mic și învață reguli de merge.",
explain: "Nu, aceasta este abordarea adoptată de un alt algoritm de tokenizare."
},
{
text: "Unigram este un algoritm de tokenizare a subcuvintelor care începe cu un vocabular mare și elimină progresiv tokenurile din el.",
explain: "Acest lucru este corect!",
correct: true
},
{
text: "Unigram își adaptează vocabularul prin minimizarea unei pierderi calculate pe întregul corpus.",
explain: "Acest lucru este corect!",
correct: true
},
{
text: "Unigram își adaptează vocabularul prin păstrarea celor mai frecvente subcuvinte.",
explain: "Nu, acest lucru este incorect."
},
{
text: "Unigram tokenizează cuvintele în subcuvinte prin găsirea celei mai probabile segmentări în tokenuri, conform modelului.",
explain: "Acest lucru este corect!",
correct: true
},
{
text: "Unigram tokenizează cuvintele în subcuvinte prin divizarea lor în caractere, apoi aplică regulile de merge.",
explain: "Nu, acesta este modul în care funcționează un alt algoritm de tokenizare."
},
]}
/>
Loading