Skip to content
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

Translation for 1/4, 1/5 and 1/6. #247

Merged
merged 131 commits into from
Jun 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
131 commits
Select commit Hold shift + click to select a range
2b1bf4d
Create it
CaterinaBi Mar 29, 2022
b1fce39
Delete it
CaterinaBi Mar 29, 2022
73bc36f
Create 1.mdx
CaterinaBi Mar 29, 2022
7167905
Create test
CaterinaBi Mar 29, 2022
5eded3c
Create test
CaterinaBi Mar 29, 2022
5b60357
Delete 1.mdx
CaterinaBi Mar 29, 2022
6313f0c
Create test
CaterinaBi Mar 29, 2022
1a8ead4
Add files via upload
CaterinaBi Mar 29, 2022
6e713c1
Delete test
CaterinaBi Mar 29, 2022
c79c869
Add files via upload
CaterinaBi Mar 29, 2022
b2e223d
Delete test
CaterinaBi Mar 29, 2022
2504658
Add files via upload
CaterinaBi Mar 29, 2022
8fe401c
Add files via upload
CaterinaBi Mar 29, 2022
7c5c4ce
Add files via upload
CaterinaBi Mar 29, 2022
abdcbb7
Update 1.mdx
CaterinaBi Mar 29, 2022
8b2ca12
Update 1.mdx
CaterinaBi Mar 29, 2022
04cc9d7
Update 1.mdx
CaterinaBi Mar 29, 2022
c937295
Update 1.mdx
CaterinaBi Mar 29, 2022
78fa66f
Update 1.mdx
CaterinaBi Mar 29, 2022
4ff746b
Update 1.mdx
CaterinaBi Mar 29, 2022
4ea420e
Update 1.mdx
CaterinaBi Mar 29, 2022
1b087c1
Update 1.mdx
CaterinaBi Mar 29, 2022
aa62d24
Update 1.mdx
CaterinaBi Mar 31, 2022
bf39db9
Update 1.mdx
CaterinaBi Apr 1, 2022
6a2381f
Corrects errors and adds translation
CaterinaBi Apr 2, 2022
5f64fa6
Adds paragraph
CaterinaBi Apr 5, 2022
450ccfc
Adds last paragraph
CaterinaBi Apr 5, 2022
2776715
Ends the translation
CaterinaBi Apr 5, 2022
d778470
Fixes a typo
CaterinaBi Apr 5, 2022
fd468a4
Fixes a typo
CaterinaBi Apr 5, 2022
fe3ced9
Update 1.mdx
CaterinaBi Apr 6, 2022
16f8290
Update 1.mdx
CaterinaBi Apr 6, 2022
efeed9f
fixes problems
CaterinaBi Apr 6, 2022
f3573af
Final version
CaterinaBi Apr 7, 2022
92a4d27
Final version
CaterinaBi Apr 7, 2022
a6c853b
Delete 1.mdx
CaterinaBi Apr 7, 2022
3fb98f8
Delete 2.mdx
CaterinaBi Apr 7, 2022
817c153
Delete 3.mdx
CaterinaBi Apr 7, 2022
02dc002
Delete 4.mdx
CaterinaBi Apr 7, 2022
9488dfa
Delete 5.mdx
CaterinaBi Apr 7, 2022
ecbf2b2
Delete 6.mdx
CaterinaBi Apr 7, 2022
c4e753d
Delete 7.mdx
CaterinaBi Apr 7, 2022
96c53e7
Delete 8.mdx
CaterinaBi Apr 7, 2022
83732dd
Updates toctree
CaterinaBi Apr 26, 2022
5cbaee8
Delete 2.mdx
CaterinaBi Apr 26, 2022
c5c9c0d
Delete 9.mdx
CaterinaBi Apr 26, 2022
dc62217
Delete 8.mdx
CaterinaBi Apr 26, 2022
87b4cda
Delete 7.mdx
CaterinaBi Apr 26, 2022
7c7a730
Delete 6.mdx
CaterinaBi Apr 26, 2022
260aec7
Delete 5.mdx
CaterinaBi Apr 26, 2022
e78997e
Delete 4.mdx
CaterinaBi Apr 26, 2022
5298cbc
Delete 3.mdx
CaterinaBi Apr 26, 2022
7195a26
Delete 10.mdx
CaterinaBi Apr 26, 2022
c37b359
Delete chapters/it/chapter2 directory
CaterinaBi Apr 26, 2022
18daed7
Update build_documentation.yml
CaterinaBi Apr 26, 2022
14836a6
Update build_pr_documentation.yml
CaterinaBi Apr 26, 2022
e5b09af
Adds chapter1/1 to ToC
CaterinaBi Apr 26, 2022
dc6b2b6
Merge branch 'main' into main
CaterinaBi Apr 26, 2022
942b3a7
Adds chapter1/2
CaterinaBi Apr 27, 2022
7ca7283
Creates file 1/2
CaterinaBi Apr 27, 2022
048d8fb
Translates two paragraphs
CaterinaBi Apr 27, 2022
4dcfa80
Completes translation of second section
CaterinaBi Apr 27, 2022
0529fdd
Adds last section
CaterinaBi Apr 27, 2022
b1b60c0
Final version
CaterinaBi Apr 27, 2022
9523cbf
Merge branch 'main' into main
CaterinaBi Apr 27, 2022
1191d17
Adds chapter 1/3
CaterinaBi Apr 27, 2022
3b224d9
Creates file
CaterinaBi Apr 27, 2022
80c3794
Updates title
CaterinaBi Apr 27, 2022
762d3b2
Translates title of chapter1/3
CaterinaBi Apr 27, 2022
d6f1327
Deletes chapter1/3
CaterinaBi Apr 28, 2022
c7f4716
Deletes 3.mdx
CaterinaBi Apr 28, 2022
a87f26b
Adds chapter 1/3
CaterinaBi Apr 28, 2022
9c88321
Creates 3.mdx
CaterinaBi Apr 28, 2022
97648eb
Translates title and first paragraph
CaterinaBi Apr 28, 2022
63b2e10
Adds translation of last section
CaterinaBi Apr 28, 2022
1bc3f6d
Finishes translation of second paragraph
CaterinaBi Apr 28, 2022
a43e53c
Updates translation
CaterinaBi Apr 28, 2022
8e1fa4b
Updates title
CaterinaBi Apr 28, 2022
98ec824
Updates title for chapter1/3
CaterinaBi Apr 28, 2022
616bd62
Adds new translated paragraphs
CaterinaBi Apr 28, 2022
d279f90
Updates translation
CaterinaBi Apr 29, 2022
f5b7ce5
Adds 2 translated sections
CaterinaBi May 2, 2022
fda1188
Fixes typo
CaterinaBi May 2, 2022
bd910f0
Updates translation
CaterinaBi May 2, 2022
ccb36d0
Translates NER
CaterinaBi May 2, 2022
b20eefa
Update 3.mdx
CaterinaBi May 2, 2022
aee44d4
Update 3.mdx
CaterinaBi May 2, 2022
2e97ca6
Final version
CaterinaBi May 2, 2022
d457532
Final version
CaterinaBi May 2, 2022
2fa4f96
Final version
CaterinaBi May 2, 2022
6c502e9
Final version
CaterinaBi May 2, 2022
3a02e11
Merge branch 'main' into main
CaterinaBi May 2, 2022
309f913
Creates 4.mdx
CaterinaBi May 3, 2022
32c1bcb
Updates ToC
CaterinaBi May 3, 2022
7b9c204
Translates title
CaterinaBi May 3, 2022
bf44e3c
Updates translation
CaterinaBi May 3, 2022
deac45a
Updates translation
CaterinaBi May 3, 2022
036e450
Updates translation
CaterinaBi May 5, 2022
ed7e2da
Create 5.mdx
CaterinaBi May 11, 2022
9ef61d6
Updates 5.mdx
CaterinaBi May 11, 2022
ee5ecb5
Translates title
CaterinaBi May 11, 2022
8583909
Adds 1/5
CaterinaBi May 11, 2022
1dbabeb
Update _toctree.yml
CaterinaBi May 30, 2022
3d378d3
Update _toctree.yml
CaterinaBi May 30, 2022
5b4b3c4
Update 5.mdx
CaterinaBi May 30, 2022
4c47ac3
Final update
CaterinaBi May 30, 2022
1a91250
Update 4.mdx
CaterinaBi May 30, 2022
854e13b
Update 4.mdx
CaterinaBi May 30, 2022
fe88ff1
Creates 6.mdx
CaterinaBi May 30, 2022
d54ffe1
Adds ch 1/7
CaterinaBi May 30, 2022
ab1da13
Update 6.mdx
CaterinaBi May 30, 2022
7708eaf
Last update
CaterinaBi May 30, 2022
e9900e6
Update 4.mdx
CaterinaBi May 30, 2022
246b43a
Update 4.mdx
CaterinaBi May 30, 2022
a3f6e7f
Update 4.mdx
CaterinaBi May 30, 2022
b630db4
Update 4.mdx
CaterinaBi May 30, 2022
b9713ca
Update 4.mdx
CaterinaBi May 30, 2022
771f2a7
Translates last paragraph
CaterinaBi May 31, 2022
59c7f4e
Update 4.mdx
CaterinaBi May 31, 2022
595b4da
Update 4.mdx
CaterinaBi May 31, 2022
31aac9e
Update 4.mdx
CaterinaBi Jun 14, 2022
a03f334
Update 4.mdx
CaterinaBi Jun 14, 2022
faa5922
Update 4.mdx
CaterinaBi Jun 14, 2022
5924bd2
Update 4.mdx
CaterinaBi Jun 14, 2022
b0df42c
Update 4.mdx
CaterinaBi Jun 14, 2022
51dea9e
Update 4.mdx
CaterinaBi Jun 14, 2022
3738518
Final version
CaterinaBi Jun 14, 2022
386bc29
Final version
CaterinaBi Jun 14, 2022
8981c0a
Final version
CaterinaBi Jun 14, 2022
7f35b45
Merge branch 'main' into main
CaterinaBi Jun 14, 2022
60ab29e
Updates ToC
CaterinaBi Jun 14, 2022
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
9 changes: 7 additions & 2 deletions chapters/it/_toctree.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,13 @@
title: Natural Language Processing
- local: chapter1/3
title: Cosa fanno i Transformer?

- local: chapter1/4
title: Come funzionano i Transformer?
- local: chapter1/5
title: Modelli encoder
- local: chapter1/6
title: Modelli decoder

- title: 4. Condividere modelli e tokenizers
sections:
- local: chapter4/1
Expand All @@ -27,4 +33,3 @@
- local: chapter4/6
title: Quiz di fine capitolo
quiz: 4

171 changes: 171 additions & 0 deletions chapters/it/chapter1/4.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
# Come funzionano i Transformer?

In questa sezione, vedremo in maniera approfondita l'architettura dei modelli Transformer.

## Un po' di storia dei Transformer

Ecco alcuni punti di riferimento nella (breve) storia dei modelli Transformer:

<div class="flex justify-center">
<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers_chrono.svg" alt="A brief chronology of Transformers models.">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers_chrono-dark.svg" alt="A brief chronology of Transformers models.">
</div>

L'[architettura Transformer](https://arxiv.org/abs/1706.03762) è stata introdotta in giugno 2017. Il focus della ricerca di partenza era sui compiti di traduzione. A questa seguì l'introduzione di numerosi modelli influenti, tra cui figurano:

- **giugno 2018**: [GPT](https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf), il primo modello Transformer pre-addestrato, viene usato per affinare diversi compiti di NLP e ottiene risultati all'avanguardia

- **ottobre 2018**: [BERT](https://arxiv.org/abs/1810.04805), un altro ampio modello pre-addestrato, questa volta progettato per produrre riassunti di frasi migliori (ne scopriremo di più nel prossimo capitolo!)

- **febbraio 2019**: [GPT-2](https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf), una versione (migliorata e ingrandita) di GPT che non fu distribuita immediatamente al pubblico a causa di preoccupazioni etiche

- **ottobre 2019**: [DistilBERT](https://arxiv.org/abs/1910.01108), una versione distillata di BERT che è il 60% più rapida e il 40% più leggera in memoria, pur conservando il 97% della performance di BERT

- **ottobre 2019**: [BART](https://arxiv.org/abs/1910.13461) e [T5](https://arxiv.org/abs/1910.10683), due grossi modelli pre-addestrati che utilizzano la stessa architettura del modello Transformer originale (nonché i primi a farlo)

- **maggio 2020**, [GPT-3](https://arxiv.org/abs/2005.14165), una versione ancora più ampia di GPT-2, con buone prestazioni in vari compiti e nessun bisogno di fine-tuning (il cosiddetto _zero-shot learning_)

La lista è tutto fuorché esaustiva ed è volta solo a mettere in evidenza alcuni dei diversi tipi di modelli Transformer. In genere, questi possono essere raggruppati in tre categorie:

- Modelli in stile GPT (detti anche modelli Transformer _auto-regressive_)
- Modelli in stile BERT (detti anche modelli Transformer _auto-encoding_)
- Modelli in stile BART/T5 (detti anche modelli Transformer _sequence-to-sequence_)

Studieremo queste famiglie più nel dettaglio in seguito.

## I Transformer sono modelli linguistici

Tutti i modelli Transformer menzionati qui sopra (GPT, BERT, BART, T5, ecc.) sono stati addestrati come modelli linguistici (*language models*). Ciò significa che sono stati addestrati su grandi quantità di testo grezzo in stile auto-supervisionato (*self-supervising*). L'apprendimento auto-supervisionato è un tipo di apprendimento il cui obbiettivo viene computato direttamente dagli input del modello. Ciò significa che non è richiesto alcun intervento umano per etichettare i dati!

Un modello di questo tipo sviluppa una comprensione statistica della lingua alla quale è stato addestrato, ma non è molto utile in compiti pratici e precisi. Per questa ragione, il modello pre-addestrato generale viene in seguito sottoposto a un processo detto *transfer learning*. Durante questo processo, il modello viene affinato per un determinato compito in maniera supervisionata (ossia utilizzando etichette generate da umani).

Un esempio di compito è la previsione della parola seguente in una frase di cui sono state lette *n* parole precedenti. Quest'operazione si chiama *causal language modeling* perché il suo output dipende dagli input presenti e passati, ma non da quelli futuri.

<div class="flex justify-center">
<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/causal_modeling.svg" alt="Example of causal language modeling in which the next word from a sentence is predicted.">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/causal_modeling-dark.svg" alt="Example of causal language modeling in which the next word from a sentence is predicted.">
</div>

Un altro esempio è il *masked language modeling*, in cui il modello prevede una parola occultata della frase.

<div class="flex justify-center">
<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/masked_modeling.svg" alt="Example of masked language modeling in which a masked word from a sentence is predicted.">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/masked_modeling-dark.svg" alt="Example of masked language modeling in which a masked word from a sentence is predicted.">
</div>

## I Transformers sono modelli enormi

A parte per alcune eccezioni (come DistilBERT), la strategia generale per ottenere performance migliori consiste nell'aumentare la taglia dei modelli, nonché la quantità di dati utilizzati per il pre-addestramento.

<div class="flex justify-center">
<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/model_parameters.png" alt="Number of parameters of recent Transformers models" width="90%">
</div>

Sfortunatamente, l'addestramento di un modello, e specialmente di un modello grosso, richiede grandi quantità di dati. Ciò si rivela molto costoso in termini di tempo, risorse informatiche e impatto ambientale, come mostrano i grafici qui sotto.

<div class="flex justify-center">
<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/carbon_footprint.svg" alt="The carbon footprint of a large language model.">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/carbon_footprint-dark.svg" alt="The carbon footprint of a large language model.">
</div>

<Youtube id="ftWlj4FBHTg"/>

Questi dati si riferiscono a un progetto per un modello (molto grande) condotto da un team che provava consciamente a ridurre l'impatto ambientale del pre-addestramento. L'impronta di trials volti a ottenere i miglior iperparamenti possibili sarebbe ancora più importante.

Immagina cosa succederebbe se ogni volta che un gruppo di ricerca, un'organizzazione studentesca o un'azienda vuole addestrare un modello lo facesse da zero! I costi globali sarebbero inutilmente enormi!

Questo è il motivo per cui la condivisione di modelli linguistici è fondamentale: lavorare a partire da modelli già addestrati riduce i costi informatici complessivi e l'impatto ambientale della comunità.


## Transfer Learning

<Youtube id="BqqfQnyjmgg" />

Il pre-addestramento è l'atto di addestrare un modello da zero: i pesi sono inizializzati in maniera casuale, e l'addestramento inizia senza alcuna conoscenza pregressa.

<div class="flex justify-center">
<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/pretraining.svg" alt="The pretraining of a language model is costly in both time and money.">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/pretraining-dark.svg" alt="The pretraining of a language model is costly in both time and money.">
</div>

Questo pre-addestramento è solitamente fatto su enormi quantità di dati. Di conseguenza, l'addestramento richiede un corpus di dati molto ampio e può prendere diverse settimane.

L'affinamento (*fine-tuning*), al contrario, è un addestramento che ha luogo **dopo** che il modello è stato pre-addestrato. Per poter effettuare un fine-tuning, è necessario acquisire un modello linguistico pre-addestrato e addestrarlo ulteriormente con una base dati adatta al compito in questione. Ma perché non addestrare direttamente al compito finale? Esistono alcune ragioni:

* Il modello pre-addestrato è già addestrato su basi dati che contengono similarità con la base dati usata per il fine-tuning. Il processo di fine-tuning riesce quindi ad beneficiare della conoscenza acquisita dal modello iniziale durante il pre-addestramento (ad esempio, nei problemi di NLP, il modello pre-addestrato avrà già conoscenze statistiche della lingua utilizzata nel compito).
* Siccome il modello pre-addestrato è stato addestrato usando moltissimi dati, il fine-tuning richiede molto meno dati per ottenere buoni risultati.
* Per la stessa ragione, occorrono molto meno tempo e risorse per ottenere buoni risultati.

Ad esempio, è possibile approfittare di un modello pre-addestrato per la lingua inglese e poi affinarlo usando un corpus arXiv, ottenendo così un modello specifico per la scienza/ricerca. L'affinamento non richiederà che una quantità limitata di dati: le conoscenze acquisite dal modello pre-addestrato sono "trasferite", come riflette il nome *transfer learning*.

<div class="flex justify-center">
<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/finetuning.svg" alt="The fine-tuning of a language model is cheaper than pretraining in both time and money.">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/finetuning-dark.svg" alt="The fine-tuning of a language model is cheaper than pretraining in both time and money.">
</div>

Il fine-tuning di un modello ha quindi costi ridotti in termini di dati, finanze e impatto ambientale. Iterare su diversi schemi di fine-tuning è anche più rapido e semplice, in quanto l'addestramento è meno restrittivo di un pre-addestramento completo.

Questo processo permette anche di ottenere risultati migliori di un addestramento da zero (a meno di non essere in possesso di moltissimi dati), motivo per cui bisognerebbe sempre partire da un modello pre-addestrato (quanto possibile compatibile con il compito da eseguire) e affinarlo.

## Architettura generale

In questa sezione, vedremo l'architettura generale del modello Transformer. Non preoccuparti se non capisci tutti i concetti: più avanti, troverai sezioni dettagliate per ogni componente.

<Youtube id="H39Z_720T5s" />

## Introduzione

Il modello si compone principalmente di due blocchi:

* **Encoder (sinistra)**: L'encoder riceve un input e ne costruisce una rappresentazione, le features. Ciò significa che il modello è ottimizzato per la comprensione dell'input.
* **Decoder (destra)**: Il decoder utilizza la rappresentazione dell'encoder (le features) assieme ad ulteriori input per generare la sequenza target. Ciò significa che il modello è ottimizzato per la generazione di output.

<div class="flex justify-center">
<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers_blocks.svg" alt="Architecture of a Transformers models">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers_blocks-dark.svg" alt="Architecture of a Transformers models">
</div>

Ognuna di queste parti può essere utilizzata indipendentemente, in base al compito:

* **Modelli Encoder-only**: Ottimi per compiti che richiedono una comprensione dell'input, come la classificazione frasale e il riconoscimento delle entità nominate.
* **Modelli Decoder-only**: Ottimi per compiti generativi come la generazione testuale.
* **Modelli Encoder-decoder** o **modelli sequence-to-sequence**: Ottimi per compiti generativi che richiedono un input, come la traduzione o il riassunto.

Analizzeremo ciascuna di queste architetture indipendentemente più tardi nel corso.

## Attention layers

Una caratteristica chiave dei modelli Transformer è che sono basati su strati speciali detti *attention layers*. Non a caso, il titolo del paper che introdusse l'architettura Transformer era ["Attention Is All You Need"](https://arxiv.org/abs/1706.03762)! Esploreremo gli attention layer nel dettaglio più avanti in questo corso; per ora, tutto ciò che hai bisogno di sapere è che un layer dirà al modello di prestare particolare attenzione a certe parole nella frase input (ignorando praticamente le altre) quando si occupa della rappresentazione delle singole parole.

Come esempio concreto, pensa ad un compito di traduzione testuale dall'inglese al francese. Dato l'input "You like this course", un modello di traduzione dovrà fare riferimento alla parola adiacente "You" per fornire la traduzione corretta della parola "like", perché in francese la coniugazione del verbo "like" cambia in base al soggetto. Diversamente, il resto della frase non è utile alla sua traduzione di quella precisa parola. In maniera simile, durante la traduzione di "this" il modello dovrà prestare attenzione alla parola "course", in quanto "this" ha traduzioni diverse se associato con nomi femminili o maschili. Di nuovo, il resto delle parole della frase non contribuiscono alla corretta traduzione di "this". Con frasi più complesse (e regole grammaticali più complesse), il modello potrebbe aver bisogno di prestare particolare attenzione a parole ben più lontane nella frase per tradurre correttamente ogni parola.

Lo stesso concetto si applica a qualsiasi compito che ha a che fare con il linguaggio naturale: una parola ha un senso a sé stante, ma tale senso è profondamente influenzato dal contesto, il quale è costituito da una qualsiasi parola (o parole) che precede o segue la parola sotto osservazione.

Ora che sai cosa sono gli attention layer, guardiamo un po' più nel dettaglio all'architettura Transformer.

## L'architettura originale

All'origine, l'architettura Transformer fu creata per la traduzione. In fase di addestramento, l'encoder riceve degli input (frasi) in una certa lingua, mentre il decoder riceve le stesse frasi nella lingua target d'elezione. Nell'encoder, gli attention layer sono in grado di utilizzare qualsiasi parola in una data frase (dato che, come abbiamo appena visto, la traduzione di una determinata parola può dipendere da ciò che la precede o segue nella frase). Diversamente, decoder procede in maniera sequenziale ed è capace di prestare attenzione solo alle parole della frase che ha già tradotto (ossia, solo le parole che precedono la parola che sta generando). Ad esempio, una volta predette le prime tre parole della frase target, le passiamo al decoder che utilizza tutti gli input dell'encoder per provare a predirre la quarta parola.

Per accelerare il processo di addestramento (quando il modello ha accesso alle frasi target), l'intero target viene fornito al decoder, che però non è in grado di accedere alle parole future (se avesse accesso alla parola in seconda posizione mentre cerca di predirre la parola in seconda posizione, il problema cesserebbe di essere complesso). Ad esempio, mentre prova a predirre la quarta parola, l'attention layer avrà accesso solo alle posizioni tra la prima e la terza.

L'architettura Transformer originale aveva la struttura qui sotto, con l'encoder a sinistra e il decoder a destra:

<div class="flex justify-center">
<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers.svg" alt="Architecture of a Transformers models">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers-dark.svg" alt="Architecture of a Transformers models">
</div>

Nota che il primo attention layer in un *decoder block* presta attenzione a tutti gli input (passati) al decoder, mentre il secondo attention layer utilizza l'output del encoder. Gli è perciò possibile avere accesso a tutta la frase input per meglio prevedere la parola corrente. Questa caratteristica è molto utile in quanto lingue diverse possono avere regole grammaticali diverse piazzano le parole in ordini diversi, oppure perché il contesto che compare più tardi nella frase potrebbe essere utile nella determinazione della migliore traduzione di una data parola.

L'*attention mask* può essere utilizzato anche nell'encoder/decoder per evitare che il modello presti attenzione a certe parole speciali, come ad esempio parole riempitive utilizzate per rendere tutti gli input della stessa lunghezza.

## Architetture vs. checkpoint

Durante questo viaggio nel mondo dei modelli Transformer, incontrerai menzioni di *architetture* e *checkpoint*, nonché di *modelli*. Questi termini hanno significati leggermente diversi:

* **Architettura**: Lo scheletro del modello, ossia la definizione di ogni livello e operazione che compare nel modello.
* **Checkpoint**: I pesi che verranno caricati in una determinata architettura.
* **Modello**: Un termine generico meno preciso di "architettura" o "checkpoint", in quanto può significare entrambi. In questo corso faremo la distinzione tra *architettura* e *checkpoint* quando sarà necessario ridurre le ambiguità.

Ad esempio, BERT è un'architettura, mentre `bert-base-cased`, un set di pesi (*weights*) addestrati dal team di Google per la prima versione di BERT, è un checkpoint. Ciononostante, è possibile dire "il modello BERT" e "il modello `bert-base-cased`."
17 changes: 17 additions & 0 deletions chapters/it/chapter1/5.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Modelli encoder

<Youtube id="MUqNwgPjJvQ" />

I modelli encoder utilizzano solo l'encoder di un modello Transformer. In ogni fase, gli attention layer hanno accesso a tutte le parole della frase di partenza. Questi modelli sono spesso caratterizzati come aventi attenzione "bi-direzionale" e chiamati *auto-encoding models*.

Solitamente, il pre-addestramento di questi modelli consiste nel corrompere una determinata frase (ad esempio, nascondendone casualmente alcune parole) e incaricare il modello di ritrovare o ricostruire la frase di partenza.

I modelli encoder sono particolarmente appropriati per compiti che richiedono la comprensione di frasi intere, quali la classificazione di frasi, riconoscimento delle entità nominate (e in senso più ampio, la classificazione di parole), e l'estrazione di risposte da un contesto.

Alcuni esempi di modelli di questo tipo includono:

- [ALBERT](https://huggingface.co/transformers/model_doc/albert.html)
- [BERT](https://huggingface.co/transformers/model_doc/bert.html)
- [DistilBERT](https://huggingface.co/transformers/model_doc/distilbert.html)
- [ELECTRA](https://huggingface.co/transformers/model_doc/electra.html)
- [RoBERTa](https://huggingface.co/transformers/model_doc/roberta.html)
Loading