Una rete, cento lingue#
La sezione sulla traduzione neurale si era fermata al 2016, con GNMT (il
traduttore neurale di Google) che entrava in produzione: un modello per ogni
coppia di lingue, addestrato sui corpora paralleli di quella coppia, cioè
grandi raccolte di testi già tradotti, frase per frase, da un umano. Pochi mesi
dopo lo stesso gruppo prova una cosa che sembra solo un risparmio di
ingegneria: invece di decine di modelli, uno solo, addestrato su tutte le coppie
insieme, con un gettone in testa alla frase a dire in che lingua si vuole
l’uscita. Il gettone è un token come tutti gli altri, uno di quei mattoncini
in cui il testo viene spezzato, e sta lì a fare da etichetta: <2ko> davanti a
una frase vuol dire «questa me la vuoi in coreano».
Il risparmio arriva, ma con un effetto collaterale che nessuno aveva ordinato. Il modello aveva visto giapponese verso inglese e coreano verso inglese, mai giapponese verso coreano. Gli si chiede giapponese verso coreano, e traduce [JSL+17]. Non benissimo, ma traduce: una coppia su cui non ha mai visto un solo esempio. Gli autori parlano, con prudenza, di qualcosa che somiglia a una interlingua: una rappresentazione interna dove il significato di una frase finisce più o meno nello stesso posto qualunque lingua la vesta.
Quella prudenza non è ancora del tutto superata, e vale la pena di capire perché, soprattutto se la lingua in cui si lavora non è l’inglese: quasi tutto ciò che fa funzionare un modello in italiano passa da qui.
Un vocabolario per tutte#
Il modo più economico di fare un modello multilingue è non fare niente di speciale.
Cento Wikipedia versate in un pentolone solo e mescolate. Da lì si tira su una frase alla volta, con qualche parola coperta, e il modello deve indovinare che cosa c’è sotto. È l’esercizio a buchi di BERT, e cambia solo il pentolone. Nessuno gli dice in che lingua è la frase. Nessuno gli dà l’elenco delle lingue. Nessuno gli fa vedere una traduzione, mai. Ogni tanto sale l’italiano, ogni tanto il turco, ogni tanto il coreano, e il compito non cambia mai.
Prima però qualcuno prepara la scatola dei mattoncini. I pezzi ammessi (i token) si scelgono all’inizio, una volta per tutte, contando quali frammenti tornano più spesso nei testi. Qui il conto si fa su cento lingue insieme invece che su una, e la scatola che ne esce è una sola per tutte, circa centoventimila pezzi, dentro cui deve stare anche il curdo.
Resta il problema delle dosi. Ogni mestolata è un turno, e tocca a una lingua sola; di turni ce ne sono miliardi. Versate in proporzione ai testi che esistono, l’inglese sommerge tutto, perché fra la sua Wikipedia e quella in curdo il divario è di centinaia di volte, e in miliardi di mestolate il curdo non salirebbe quasi mai. Allora si bara sulle dosi, e si bara in modo controllato, aggiungendone alle lingue piccole e togliendone alle grandi, con una manopola che dice quanto appiattire. Girata a fondo, ogni lingua ha lo stesso numero di turni, il curdo quanti l’inglese. Lasciata ferma, ognuna ha i turni che le spettano. La si mette in mezzo.
Quanto in mezzo, non c’è accordo. Un pentolone con due sole lingue, cento frasi in tutto, novantanove inglesi e una curda. mBERT, il primo modello costruito così, che legge centoquattro Wikipedia, gira poco la manopola, e i turni diventano novantasei e quattro. La lingua piccola sale a galla quasi quattro volte più di quanto le spetti. I modelli venuti dopo, che puntavano di più sulle lingue rare, la girano molto di più, e si arriva a ottanta e venti, venti volte.
Dalla manopola dipende anche che cosa entra nella scatola. Il curdo deve comparire abbastanza da meritarsi pezzi di parola sensati; se compare poco, gli toccano lettere sciolte. E ogni turno regalato a una lingua rara è un turno tolto a una comune, ed è lì che si litiga.
mBERT ha esattamente l’architettura di BERT [DCLT19] e l’esercizio di BERT (masked language modeling: mascherare circa il 15% dei token e predirli). Cambiano solo i dati, le Wikipedia di 104 lingue, e il vocabolario, un unico WordPiece da circa 120 000 pezzi condiviso fra tutte. Nessun identificativo di lingua in ingresso, nessun corpus parallelo, nessun termine di perdita che chieda di allineare qualcosa. Lo chiameremo \(\text{mMLM}\), per distinguerlo dal MLM monolingue: è la stessa funzione,
dove \(\mathcal{M}_x\) è l’insieme delle posizioni mascherate e \(x_{\setminus \mathcal{M}_x}\) la frase con i buchi, applicata a un flusso di testi di lingue diverse messi in fila senza dichiararlo.
Lo squilibrio si corregge con un ricampionamento a smorzamento esponenziale. Se la lingua \(i\) vale una frazione \(p_i\) del corpus totale, si campiona invece con
Con \(\alpha = 1\) nulla cambia; più \(\alpha\) scende, più la distribuzione si appiattisce verso l’uniforme. Il valore non è universale, ed è bene sapere di chi è: mBERT usa \(\alpha = 0{,}7\) (il README multilingue ufficiale lo chiama \(S\)), XLM [LC19] \(\alpha = 0{,}5\), XLM-R [CKG+20] \(\alpha = 0{,}3\). La differenza non è di dettaglio. Prendendo due lingue che stanno nei dati al \(99\%\) e all’\(1\%\): con l’\(\alpha\) di mBERT si campiona al \(96\%\) e al \(4\%\), cioè la lingua piccola è sovracampionata di quasi quattro volte; con quello di XLM-R si arriva a \(80\%\) e \(20\%\), venti volte. È così che, quando si costruisce il vocabolario condiviso, alle lingue a bassa disponibilità toccano pezzi sensati invece di sole lettere sciolte, che è esattamente il baratto discusso nella sezione sui tokenizzatori; ed è anche la manopola su cui si litiga, perché ogni turno dato a una lingua rara è un turno tolto a una comune.
L’allineamento che nessuno ha chiesto#
Qui viene la parte interessante, ed è bene isolarla, perché è facile darla per scontata dopo averla sentita raccontare.
Nel procedimento appena descritto non c’è nulla che chieda al modello di mettere vicine le traduzioni. Nessuno gli mostra mai «il gatto nero salta sul muro» accanto a «the black cat jumps on the wall». Eppure, a fine addestramento, succede questo.
Dentro il modello ogni frase diventa una lista di numeri, e una lista di numeri si può leggere come un indirizzo: due numeri sono un punto su un foglio, tre un punto nello spazio, settecentosessantotto un punto in un luogo che non si disegna ma si ragiona allo stesso modo. Chiamiamola mappa del significato, perché la proprietà che conta è quella di una mappa: frasi che vogliono dire cose simili finiscono in indirizzi vicini. Ebbene, «il gatto nero salta sul muro» e «the black cat jumps on the wall» finiscono nella stessa regione, pur essendo in due lingue di cui al modello nessuno ha mai raccontato l’esistenza.
Conviene essere precisi su quanto vicine, perché il modo in cui la cosa si misura è più interessante dello slogan. I due quartieri, quello italiano e quello inglese, sono affiancati e paralleli invece che sovrapposti. Fra l’uno e l’altro c’è uno spostamento, e lo si misura nel modo più elementare che ci sia: si prendono alcune migliaia di frasi italiane con accanto la loro traduzione inglese, si guarda di quanto ciascuna coppia è distanziata sulla mappa, e di tutti quegli scarti si fa la media. La scoperta è che quella media funziona: sommata a una frase italiana, la porta così vicino alla sua traduzione inglese che, più della metà delle volte, fra tutte le frasi inglesi è proprio quella la più vicina. Lo spostamento, cioè, dipende in gran parte dalla coppia di lingue e poco dalla frase. I due indirizzi, dunque, non coincidono: le due lingue occupano due copie della stessa mappa, una accanto all’altra.
La conseguenza pratica arriva subito, e va enunciata con cura, perché lo spostamento appena descritto sembrerebbe mandarla all’aria. Se un programma impara a riconoscere qualcosa guardando dove cadono le frasi inglesi (dire se una recensione è arrabbiata, per esempio: impara che gli arrabbiati stanno da quella parte del quartiere inglese), lo stesso programma funziona anche sulle frasi italiane, pur senza aver mai visto una frase italiana e pur senza che nessuno gli tolga di mezzo lo spostamento. Il motivo sta nella direzione di quello spostamento: porta tutte le frasi italiane dalla stessa parte, e lo fa scivolando lungo il confine fra arrabbiate ed entusiaste invece di attraversarlo. Il confine imparato in inglese, se lo si appoggia sul quartiere italiano, cade quindi ancora al posto giusto. Che poi non ci cada perfettamente è vero, ed è la ragione per cui il trasferimento funziona bene ma non benissimo: quanto si perda dipende da quali sono le due lingue, e si misura.
L’ipotesi più naturale è che il merito sia dei pezzi condivisi. Italiano e inglese hanno in comune i numeri, i nomi propri, «computer», «-zione» che somiglia a «-tion»: il modello troverebbe quei punti d’appoggio, e da lì tirerebbe su il resto come un ponteggio.
L’ipotesi è ragionevole, e in effetti le lingue che condividono più pezzi si trasferiscono meglio. Solo che, quando qualcuno l’ha messa alla prova azzerando di proposito la sovrapposizione (rinominando i pezzi di una lingua in modo che non ne condivida più nemmeno uno), il trasferimento è calato appena. Il ponteggio, evidentemente, non era quello.
C’è anche la prova presa dall’altro capo. Si parte da un modello che ha letto soltanto inglese e si congela tutto quello che ha imparato, tranne il primo passaggio, quello che trasforma i mattoncini in numeri; quel primo passaggio lo si rifà da capo con i mattoncini di una lingua nuova, rimettendo il modello a fare gli esercizi a buchi in quella lingua. Il trasferimento avviene lo stesso. Quel che una lingua ha di suo sta all’ingresso; quello che passa da una lingua all’altra è tutto il resto, cioè proprio la parte che nessuno ha toccato.
L’altra spiegazione è meno intuitiva e più affascinante: il modello ha una capacità limitata e cento lingue da imparare, e la strada più economica per riuscirci sta nell’accorgersi che si somigliano e riusare la stessa struttura, invece di memorizzarle una per una. Non allinea le lingue perché glielo chiediamo: allinea per avarizia, perché tenerle separate costerebbe più memoria di quanta ne abbia.
Un indizio a favore viene dallo smontare il modello pezzo per pezzo. Un modello, ricordiamolo, è una torre di piani uguali, e a ogni piano lavorano in parallelo diversi lettori con l’evidenziatore (le teste di attenzione). Si può togliere roba nell’una o nell’altra direzione, e i due tagli non si equivalgono: lasciando un lettore solo per piano il trasferimento fra lingue tiene ancora, mentre togliendo piani crolla. È la profondità a costruire il pezzo di rappresentazione che le lingue hanno in comune, non l’ampiezza.
Che a lavorare sia la profondità non vuol dire però che più si sale meglio è. Si può fermare la frase a ogni piano, e chiedere proprio lì di ritrovare la sua traduzione in mezzo a tante altre frasi inglesi: le risposte giuste sono più numerose ai piani di mezzo. In cima ogni lingua torna a farsi riconoscere per quello che è, e la somiglianza si perde per strada. Il punto della torre in cui le lingue si assomigliano di più sta nel mezzo, non sul tetto.
Detto onestamente: la questione è ancora aperta, e chi vi dice di sapere esattamente perché mBERT funzioni sta semplificando.
Le prove sono di tre tipi, e conviene distinguerle perché portano in direzioni diverse.
Sovrapposizione di vocabolario. Che la sovrapposizione dei sottotoken correli positivamente con il trasferimento zero-shot, e su compiti molto diversi fra loro (riconoscimento di entità, POS tagging, inferenza, parsing di dipendenze, classificazione di documenti), è il risultato di Wu e Dredze [WD19], che misura mBERT su cinque compiti e trentanove lingue. Ma è correlazione, e due lavori la ridimensionano da direzioni diverse. Pires e colleghi [PSG19] mettono in grafico la resa sul riconoscimento di entità contro la sovrapposizione, per ogni coppia fra sedici lingue, e la trovano piatta: resta fra il 40% e il 70% di F1 perfino per le coppie quasi prive di pezzi in comune, mentre un BERT solo inglese, tenuto come termine di paragone, ci precipita fino a sfiorare lo zero. Karthikeyan e colleghi [KWMR20] costruiscono lingue sintetiche con sovrapposizione nulla e osservano un calo minimo. Il trasferimento sopravvive dunque senza pezzi condivisi, e nemmeno serve l’alfabeto condiviso: un mBERT rifinito sul solo urdu (in grafia araba) etichetta le parti del discorso dell’hindi (in devanagari) con 91 punti di accuratezza, pur non avendo mai visto una parola annotata in devanagari e non avendo le due lingue un carattere in comune. Nel verso opposto, hindi verso urdu, si scende a 86: la simmetria non è garantita nemmeno qui.
C’è anche la prova per la strada opposta. Artetxe, Ruder e Yogatama [ARY20] prendono un modello monolingue, ne congelano tutto il corpo e riapprendono soltanto la tabella di embedding nella lingua nuova, con lo stesso esercizio a buchi: il trasferimento avviene lo stesso. Il pezzo che dipende dalla lingua è quindi l’embedding in ingresso; quel che si trasferisce è tutto il resto, cioè proprio la parte che nessuno ha toccato.
Architettura. Ciò che conta è la profondità, non il numero di teste [KWMR20]: il trasferimento resta accettabile perfino con una testa sola, mentre crolla con pochi strati. Anche il numero totale di parametri conta meno del numero di strati.
Capacità. L’argomento più curioso è che mBERT trasferirebbe perché è piccolo: la capacità limitata, spartita fra cento lingue, lo costringe a condividere strutture invece di tenere cento modelli separati in un modello solo. Se fosse vero, l’allineamento non sarebbe una virtù del metodo ma una conseguenza della scarsità; e la scarsità ha un rovescio molto concreto, la maledizione della multilingualità.
Un dato che mette d’accordo tutti: l’allineamento non è uniforme lungo la pila. Cercando, per una frase in una lingua, la sua traduzione fra molte candidate in un’altra (dopo averla traslata dello spostamento medio di cui sopra), sono gli strati intermedi a funzionare meglio: nei dodici strati di mBERT il massimo cade fra il sesto e l’ottavo, come si legge dalla Figura 3 di Pires e colleghi [PSG19], e non in cima. Gli strati alti tornano a specializzarsi sulla lingua; nel mezzo abita quel che c’è di più vicino a una interlingua. Il che suggerisce che le rappresentazioni siano insieme language-agnostic e language-specific, a profondità diverse.
Allinearlo di proposito#
Se l’allineamento emerge da solo, si può anche chiederlo esplicitamente. Le due strade seguite si distinguono per la taglia di quel che si chiede di allineare: la prima lavora sulle singole parole, la seconda sulle frasi intere.
La prima strada è l’esercizio a buchi fatto su due frasi appaiate: si mette la frase italiana e la sua traduzione inglese una dopo l’altra, e si coprono parole in tutte e due. A quel punto, per indovinare la parola coperta in italiano, al modello conviene sbirciare nell’inglese, e viceversa. Non gli si dice «queste due sono la stessa cosa»: gli si rende conveniente scoprirlo.
Il prezzo è che le frasi appaiate bisogna averle. Fra l’italiano e l’inglese ce ne sono a milioni, e lo stesso vale per qualche decina di altre coppie di lingue; per tutte le altre non ce n’è quasi nessuna, e sono proprio quelle che avrebbero più bisogno d’aiuto. Da qui la scelta opposta, che pure funziona: niente frasi appaiate, e al loro posto molto più testo qualunque, non le sole Wikipedia ma quello che si trova in giro per il web. Con abbastanza roba da leggere le lingue si mettono vicine da sole, e il vantaggio di mostrargli le frasi accoppiate si assottiglia.
La seconda strada lavora su frasi intere, e la sua forma tornerà più avanti in un capitolo che parla di tutt’altro. Ogni frase viene letta per conto suo, senza che chi la legge veda mai l’altra lingua, e ridotta al suo indirizzo sulla mappa: il confronto avviene fra gli indirizzi, non fra le frasi. Si dà da una parte un mucchietto di frasi italiane e dall’altra il mucchietto mescolato delle loro traduzioni, e si chiede: appaiale. La griglia ha le frasi italiane sulle righe e quelle inglesi sulle colonne, e in ogni casella si scrive quanto i due indirizzi si somigliano; il modello viene allenato a far venire i numeri grossi sulla diagonale (dove ogni frase incontra la sua traduzione) e piccoli dappertutto altrove.
Il mucchietto conviene grosso, e la griglia dice perché. Con dieci frasi per parte le caselle sono cento: dieci sono gli appaiamenti giusti, novanta quelli sbagliati da respingere. Con cento frasi per parte le caselle diventano diecimila, e gli appaiamenti sbagliati novemilanovecento. Gli esempi di che cosa non va appaiato crescono molto più in fretta delle traduzioni che si sono dovute procurare, e non costano niente.
È la stessa griglia che disegnerà il capitolo su visione e linguaggio, dove al posto dell’italiano e dell’inglese ci sono le immagini e le loro didascalie: cambia il materiale che si appaia, la griglia è quella. Da un caso all’altro cambia semmai la severità, cioè quanto nettamente la casella giusta deve vincere. Nel caso delle traduzioni non le basta prendere il numero più alto della sua riga: deve prenderlo con un certo scarto su tutte le altre.
XLM [LC19] introduce il translation language modeling (TLM): dato un paio di frasi parallele \((x, y)\), si concatenano e si mascherano token in entrambe,
cosicché quando il contesto monolingue non basta l’attenzione vada a pescare nell’altra lingua. È mMLM più un premio all’attenzione cross-lingua, e su corpora paralleli migliora sensibilmente l’allineamento. Il limite è altrettanto evidente: richiede testi paralleli, che esistono in abbondanza per poche decine di coppie e quasi per nulla per le altre. XLM-R [CKG+20] fa la scelta opposta, cioè solo mMLM ma su CommonCrawl invece che su Wikipedia, ordini di grandezza più testo per un centinaio di lingue, e mostra che a sufficiente scala di dati il segnale parallelo esplicito diventa meno necessario.
La via a doppio encoder (LaBSE [FYC+22] e affini) cambia granularità: non predice token, allinea frasi. Con un batch di \(N\) coppie parallele e una loss contrastiva su una matrice di somiglianze \(N \times N\), si massimizza la diagonale e si minimizza il resto. È la stessa forma della loss che il capitolo su visione e linguaggio disegnerà nella Fig. 18.2 per CLIP [RKH+21], con la coppia (immagine, didascalia) al posto di (frase, traduzione), e ne condivide il meccanismo che conta: i negativi gratis, che crescono come \(N^2\) e rendono prezioso il batch grande.
Sull’ordine conviene però essere precisi, perché è facile raccontarla al contrario: LaBSE è del luglio 2020 e CLIP del febbraio 2021, quindi non eredita niente da CLIP. Entrambi discendono dalla stessa idea più antica, il dual encoder con graduatoria sulle traduzioni di Guo e colleghi (2018). E il dettaglio in cui le due divergono è istruttivo: dove CLIP scala le somiglianze con una temperatura appresa, LaBSE sottrae un margine fisso alla diagonale, cioè chiede alla coppia giusta non solo di vincere ma di vincere di uno scarto. Due modi diversi di dire alla stessa loss quanto essere severa.
Il prodotto è un embedding di frase confrontabile fra lingue, che serve a recuperare traduzioni, a ripulire corpora paralleli raccolti dal web e a cercare in un archivio scrivendo la domanda in un’altra lingua.
Rifinire in inglese, usare in italiano#
Dal punto di vista di chi lavora, tutto questo serve a una procedura sola, e conviene enunciarla per intero perché è la ragione pratica per cui i modelli multilingui esistono.
Si pre-addestra un modello su molte lingue, cioè gli si fa fare per settimane l’esercizio a buchi del pentolone. Poi lo si rifinisce, che vuol dire rimetterlo a studiare per poche ore su un compito preciso, con esempi che hanno accanto la risposta giusta scritta da una persona: gli si spostano i numeri interni del modello, gli stessi che l’esercizio a buchi aveva messo a punto e che decidono dove ogni frase finisce sulla mappa. Quegli esempi con la risposta accanto si chiamano dati etichettati, e una raccolta di dati etichettati si chiama un dataset.
Il punto è che per rifinire basta una lingua sola, tipicamente l’inglese, perché è lì che i dataset stanno. Poi si usa il modello su tutte le altre, senza un solo esempio etichettato in quelle lingue: si chiama zero-shot cross-lingual transfer, «trasferimento fra lingue a zero esempi», e per una lingua come l’italiano, ricca ma non quanto l’inglese, è spesso la differenza fra avere un programma che funziona e non averlo.
Due avvertenze, che non si trovano nei tutorial.
La prima: la rifinitura consuma l’allineamento. I numeri che si spostano per imparare il compito sono gli stessi che tenevano vicine le lingue. Se adatti il modello a etichettare le parti del discorso di una frase inglese (dire per ogni parola se è nome, verbo, aggettivo: si chiama POS tagging), poi quello stesso modello ritrova molto peggio le traduzioni di una frase. Liu e colleghi l’hanno misurato [LWMF20]: dopo quella rifinitura la perplessità sull’esercizio a buchi in inglese peggiora di venti volte, e ritrovare la traduzione inglese di una frase italiana riesce 26 volte su cento invece di 45. È dimenticanza catastrofica, cioè imparare una cosa nuova cancellandone una vecchia, un fenomeno descritto sulle reti neurali fin dal 1989 [MC89]. Il rimedio ovvio è rimettere il vecchio esercizio a buchi accanto al compito nuovo, e non funziona: la perplessità torna dov’era, anzi un filo sotto, e le traduzioni si ritrovano perfino peggio di prima, 25 volte su cento invece di 26. Riavere l’esercizio non basta a riavere l’allineamento, che quindi non ne era un semplice prodotto secondario. Quel che funziona è più cauto: si lascia imparare il compito nuovo vietando agli errori sul vecchio di crescere, e una parte dell’allineamento resta, 32 volte su cento. Per riaverne quasi tutto, 64, bisogna chiedere durante la rifinitura proprio la cosa che si vuole conservare, cioè appaiare le frasi con le loro traduzioni, e tornano a servire le frasi appaiate che per quasi tutte le lingue non ci sono.
La seconda: il trasferimento non è uniforme, e il modo in cui non lo è riserva una sorpresa. Le lingue si possono raggruppare per l’ordine in cui mettono le parole in una frase: l’italiano, l’inglese e il francese sono lingue SVO, soggetto-verbo-oggetto («il gatto morde il cane»); il turco, il coreano e il giapponese sono lingue SOV, soggetto-oggetto-verbo, e direbbero «il gatto il cane morde». Pires e colleghi [PSG19] hanno misurato il trasferimento in tutte e quattro le combinazioni possibili, sempre sul POS tagging, e il punteggio è la percentuale di parole etichettate giuste, mediata su tutte le coppie di lingue diverse di ciascun gruppo. Rifinendo su una lingua SVO e usando su un’altra SVO si ottiene 81,6; rifinendo su una SVO e usando su una SOV si scende a 66,5.
Fin qui sembra la solita morale, «lingue simili, salto facile», ed è quella che gli autori traggono. Le altre due combinazioni dicono però quanto poco garantisca: rifinendo su una lingua SOV e usando su un’altra SOV si ottiene 64,2, e rifinendo su una SOV per usare su una SVO si ottiene 64,0. Due decimi di scarto, contro i quindici punti che separano le due combinazioni di prima. Condividere l’ordine delle parole aiuta molto quando si parte da una lingua SVO e quasi niente quando si parte da una SOV, e quel che conta di più è dunque da dove si parte. È poi il caso in cui casca l’italiano: chi misura la resa sull’italiano e ne deduce la resa «sulle altre lingue» sta misurando la cosa più facile che c’era da misurare.
Un avvertimento sul confronto, però, perché i due gruppi non differiscono solo per l’ordine delle parole. Quello SVO raccoglie ventisei varietà, e ci stanno dentro i due norvegesi, i due portoghesi e famiglie intere di lingue imparentate; quello SOV ne raccoglie dieci, in gran parte non imparentate e scritte in sette alfabeti diversi (ma hindi e urdu sono la stessa lingua in due grafie). Parentela, alfabeto condiviso e quantità di testo disponibile tirano tutti nello stesso verso dell’ordine delle parole, e quei quattro numeri non li separano.
La maledizione della multilingualità#
Resta il conto da pagare, e chiude il cerchio con l’argomento della capacità.
Se un modello di dimensione fissa deve ospitare più lingue, ciascuna riceve meno spazio. Per una lingua con pochi testi il baratto conviene: guadagna dal fatto di somigliare alle vicine più di quanto perda in spazio. Ma continuando ad aggiungere lingue si arriva a un punto in cui lo spazio manca a tutti, e da lì in poi ogni lingua in più peggiora un po’ tutte le altre, compresa quella che si voleva aiutare.
E lo spazio se lo contendono anche cose diverse fra loro. Allungare l’elenco dei mattoncini dà pezzi più sensati alle lingue piccole, ma ogni mattoncino in più occupa un posto nello stesso modello, e quel posto lo toglie a tutto il resto; girare la manopola delle dosi verso le lingue rare le aiuta e sottrae turni alle comuni. Una regolazione giusta in assoluto non esiste; esiste quella giusta rispetto alle lingue che interessano.
Nessuno ha sbagliato niente: la coperta è corta. L’unico modo di aggiungere lingue senza perderci niente è ingrandire il modello, e il resto sono rimedi parziali. I due migliori: fare un modello per una famiglia di lingue vicine, che ha molto meno da spartire, e mettere una lingua che ha già un buon modello tutto suo a fare da maestra a quello multilingue, che copiandole le risposte recupera un pezzo del divario. Ed è lo stesso argomento, girato, di quello che spiegava perché l’allineamento emerge: condividere è economico finché la scarsità costringe a condividere, e diventa un impaccio quando quello che serviva era distinguere.
È la maledizione della multilingualità misurata da Conneau e colleghi [CKG+20]: a capacità fissa, la prestazione media cross-lingua cresce con il numero di lingue fino a un massimo e poi cala, perché lo spazio di parametri per lingua si assottiglia. La curva si sposta verso l’alto e verso destra aumentando i parametri del modello: è un vincolo di capacità, non di metodo.
Ne discendono due tensioni concrete nel disegno di un modello multilingue. La prima riguarda il vocabolario condiviso: allargarlo dà pezzi migliori alle lingue piccole ma consuma parametri nella tabella di embedding, che è già una frazione notevole del modello. La seconda riguarda l’\(\alpha\) del ricampionamento: abbassarlo aiuta le lingue rare e sottrae dati a quelle comuni, e non esiste un valore giusto in assoluto, solo un valore giusto rispetto a quali lingue interessano.
Una via d’uscita parziale è smettere di pretendere un modello solo: distillare un modello monolingue robusto dentro quello multilingue recupera parte del divario, così come i modelli dedicati a famiglie linguistiche ristrette invece che a cento lingue insieme.
Che cosa vuol dire, per l’italiano#
Conviene tirare le somme dal punto di vista di chi legge.
L’italiano sta in una posizione comoda ma non privilegiata: c’è in tutti i modelli multilingui, ha abbastanza testo perché il vocabolario condiviso gli riservi pezzi decenti, e condivide struttura e radici con l’inglese, il che rende il trasferimento zero-shot particolarmente efficace. In pratica, un classificatore rifinito su dati inglesi funziona in italiano meglio di quanto ci si aspetterebbe, ed è la ragione per cui in Italia si costruiscono sistemi funzionanti senza avere dataset italiani di dimensioni comparabili.
Ma la stessa comodità nasconde due cose. La prima è che funziona meglio del previsto non vuol dire funziona come in inglese: il divario esiste, ed è sistematicamente più grande dove conta la morfologia, cioè il modo in cui una parola cambia forma. In inglese il verbo «to walk» fa «walk», «walks», «walked», «walking»: quattro forme. In italiano «camminare» ne fa una cinquantina, e il modello deve imparare che sono tutte lo stesso verbo, con molti meno esempi per ciascuna. La seconda è che le lingue davvero minoritarie non godono di nulla di tutto ciò: il sardo, il friulano, il ladino, il napoletano scritto non hanno abbastanza testo online per meritarsi pezzi propri nell’elenco dei mattoncini, e la maledizione della multilingualità fa il resto. La copertura linguistica dei modelli è, in buona misura, la mappa di quali lingue hanno un’abbondante presenza scritta online, che non è la mappa di quali lingue si parlano.
Da ricordare
Un modello multilingue non ha niente di speciale nell’architettura: stesso esercizio a buchi, cento Wikipedia nel pentolone al posto di una, e una sola scatola di mattoncini (i pezzi di parola) per tutte le lingue. Siccome l’inglese sommergerebbe le altre, si bara sulle dosi in modo controllato: alle lingue piccole si dà più turni di quanti ne avrebbero, e le proporzioni si appiattiscono verso il pari.
L’allineamento fra lingue emerge da solo: nessuno mostra mai al modello una frase accanto alla sua traduzione, eppure le due finiscono vicine. Perché, non si sa fino in fondo: i pezzi di parola in comune aiutano ma non sono indispensabili (toglierli di proposito costa poco), contano più i piani della torre che i lettori in parallelo, e c’è chi sostiene che il modello allinei per avarizia, perché tenere cento lingue separate costerebbe più memoria di quanta ne abbia.
Lo si può anche chiedere apertamente, in due modi: coprire parole tanto in una frase quanto nella sua traduzione, messe una dopo l’altra, così che per indovinarle convenga sbirciare nell’altra lingua; oppure ridurre ogni frase, letta per conto suo, al suo indirizzo sulla mappa, e chiedere di appaiare un mucchietto di frasi con il mucchietto mescolato delle loro traduzioni, esattamente come si farà con immagini e didascalie nel capitolo su visione e linguaggio.
Il motivo pratico di tutto questo è rifinire in inglese e usare in italiano, senza un solo esempio etichettato in italiano. Due avvertenze: la rifinitura consuma l’allineamento (i numeri interni che si spostano per imparare il compito sono gli stessi che tenevano vicine le lingue), e il salto non riesce uguale in tutte le direzioni: quel che conta è da quale lingua si parte, più che la somiglianza fra le due.
La maledizione della multilingualità: lo spazio è una coperta corta. Oltre un certo numero di lingue, ognuna in più peggiora un po’ tutte le altre, e l’unico rimedio pieno è un modello più grande.
Da ricordare
Un modello multilingue si ottiene senza cambiare nulla dell’architettura: stesso esercizio a buchi, testi di molte lingue e un vocabolario di sottotoken condiviso. Lo squilibrio fra lingue si corregge campionando con \(q_i \propto p_i^{\alpha}\), che appiattisce le proporzioni.
L’allineamento fra lingue emerge da solo, senza che nessun termine della loss lo chieda. Perché, non è del tutto chiaro: la sovrapposizione di vocabolario correla ma non è necessaria, la profondità conta più delle teste, e c’è chi sostiene che il modello allinei perché la capacità limitata lo costringe a condividere.
Lo si può chiedere esplicitamente: TLM maschera coppie di frasi parallele; la via a doppio encoder allinea frasi intere con una loss contrastiva della stessa forma di quella che userà CLIP, dove al posto di (immagine, didascalia) c’è (frase, traduzione).
Lo zero-shot cross-lingual transfer (rifinire in inglese, usare in italiano) è la ragione pratica di tutto questo. Attenzione: il fine-tuning erode l’allineamento, e il trasferimento non è simmetrico: conta più la lingua di partenza (nel campione, quelle SVO) della somiglianza fra le due.
La maledizione della multilingualità: a capacità fissa, oltre un certo numero di lingue ognuna in più peggiora tutte le altre. È un vincolo di capacità, e l’unico rimedio pieno è un modello più grande.