Come funziona la traduzione automatica dei testi da una lingua all’altra? Quali sono i problemi? Quali le opportunità? Troverai le risposte in questo articolo.
La linguistica, nella sua esistenza come scienza, incontra varie discipline, alcune umanistiche altre tecnico-scientifiche.
Nel nuovo millennio una di queste discipline è l’informatica, che è legata a doppio filo alla linguistica perché anch’essa si basa sullo studio del linguaggio.
Ma il linguaggio informatico è differente da quello che usiamo noi esseri umani tutti i giorni… ed è per questo motivo che la traduzione automatica… non è così automatica.
Linguaggi naturali e linguaggi di programmazione
Che differenza c’è, ad esempio, tra un programma in C e un discorso in lingua italiana? Sono entrambi linguaggi, dato che veicolano messaggi. Di conseguenza, sono entrambi oggetto di studio della scienza linguistica. Tuttavia, hanno anche caratteristiche che li differenziano.
Vediamoli insieme, prendendo a riferimento i casi che ti ho illustrato prima (con il C a rappresentare i linguaggi informatici e l’italiano a rappresentare i linguaggi naturali).
Elementi in comune tra linguaggi di programmazione e naturali
1. Non tutte le combinazioni alfabetiche sono valide
Per prima cosa, non esiste un generatore, né per l’italiano né per il C. Ciò vuol dire che, partendo dall’alfabeto adoperato dall’italiano (a-z,A-Z,1-9) e da quello del C (come quello italiano con aggiunti alcuni caratteri di controllo) non è sempre possibile generare parole dotate di senso.
Non è chiaro? Eccoti servito un bell’esempio.
Se prendiamo le lettere dell’alfabeto italiano, possiamo comporre la parola “arantigello”. In teoria è una parola valida secondo le regole alfabetiche e sintattiche dell’italiano. Infatti ad un italofono non suona strana… ma è priva di significato. L’ho appena inventata io.
Ciò pone la necessità di avere un vocabolario, ossia un elenco di parole dotate di significato. Nel linguaggio C include ciò che un compilatore C dev’essere in grado di capire per eseguire un’istruzione, nell’italiano include le parole che fanno parte della lingua italiana.
2. Hanno una grammatica
C’è, ovviamente, anche la necessità di una grammatica, ossia una serie di regole che indicano come dev’essere strutturato il linguaggio.
Ad esempio in C le parole “for”, “i=0″,”i<5″,”i++” sono perfettamente valide, ma se scrivo i=0 for i<5 i++ in questa sequenza, il compilatore non saprà che pesci pigliare, dato che non segue la grammatica del “for”.
Allo stesso modo, in italiano “Mi”, “chiamo”, “Giovanni” sono parole valide, ma hanno senso solo se unite secondo lo schema Pronome, Verbo, Complemento.
La grande differenza
Tutto chiaro. Potresti pensare che le lingue naturali e i linguaggi di programmazione siano tutto sommato simili.
Ma… c’è un grande ma!
In genere, le lingue naturali sono molto più flessibili dei linguaggi informatici.
1. La grammatica delle lingue naturali non è vincolante per la trasmissione del messaggio
Questo significa che la grammatica è sì importante per le lingue naturali, ma non è necessario rispettarla alla perfezione per farsi capire dall’interlocutore.
In italiano, ad esempio, è pienamente comprensibile anche la frase “Giovanni mi chiamo”, pur non essendo grammaticalmente corretta.
I linguaggi di programmazione invece richiedono una correttezza grammaticale al 100%. In caso contrario il computer non è in grado di comprendere l’istruzione e restituisce un messaggio di errore.
2. Le lingue naturali possono essere ambigue
Ciò significa che una frase in una lingua naturale può essere interpretata in modi diversi.
Per esempio, la frase “Mario è dietro a mangiare” può avere almeno due significati:
- Mario sta compiendo l’azione di mangiare, (secondo il costrutto regionale settentrionale)
- Mario è in un posto identificato come dietro e compie l’azione di mangiare
Una persona, in base alla sua esperienza, potrà capire cosa intende un parlante.
Anzi, ti dirò di più: l’ambiguità del linguaggio umano può essere presente non solo nel costrutto della frase (e quindi a livello di grammatica), ma addirittura nella singola parola.
Quindi, se scrivo “pesca”, un italofono potrebbe pensare a due cose differenti:
- Il frutto estivo dalla buccia vellutata
- L’attività in cui si catturano i pesci
L’interlocutore umano può capire il significato della parola in base al contesto.
Tutto ciò non è possibile nei linguaggi di programmazione. I computer sono macchine estremamente stupide, quindi il linguaggio di programmazione non può essere ambiguo.
Il computer non può, infatti, capire se il programmatore intende questo o quello mentre programma in C. Dunque il linguaggio dev’essere privo di ambiguità: niente sinonimi, niente costrutti strani.
Traduzione automatica: cosa cambia?
Tradurre linguaggi formali
Possiamo dunque dire che il C è un linguaggio formale: data la sua grammatica e il suo dizionario, è possibile decidere senza ombra di dubbio se un’asserzione è parte o no del linguaggio C.
Tradurre questi linguaggi è, ovviamente, abbastanza semplice, tant’è che è ciò che avviene durante la compilazione, ossia quando il codice di un linguaggio di programmazione di medio/alto livello viene tradotto in linguaggio macchina. In parole povere, il linguaggio di programmazione (che serve all’uomo per comunicare con il computer) viene tradotto in una serie di istruzioni in logica booleana che il computer deve eseguire.
Se si sa che, ad esempio, in linguaggio C un’istruzione di somma è sempre del tipo <variabile> = <variabile> + <variabile>, eventualmente raccoglibili, e in linguaggio macchina tale istruzione è 0001 <registro> <registro> <modalità di somma> <registro o costante>, giusto per fare un esempio con il didattico LC-3.
Effettuare una traduzione di questo tipo è ovviamente molto semplice.
Tradurre linguaggi naturali
Tradurre linguaggi naturali, invece, è difficile.
1. L’italiano è un linguaggio non decidibile.
Non esiste un algoritmo che data un’asserzione A ci dica se A appartiene inequivocabilmente all’italiano.
Possono esistere vari sistemi per dire se è probabile che una frase appartenga alla lingua italiana.
Si potrebbe escludere tale appartenenza (ad esempio “by!djeL&+” non è certamente una parola della lingua italiana, ed è facile intuirlo anche per un calcolatore elettronico!).
Confermare l’appartenenza in modo automatico e matematicamente certo però è impossibile.
2. L’italiano è un linguaggio ambiguo, quindi non traducibile in automatico
E’ soprattutto il fatto che sia ambiguo a rendere ardua la traduzione automatica.
Un computer non avrebbe modo di discernere, nell’esempio fatto prima, tra i due usi della forma “essere dietro a”, il che in una traduzione è un problema non da poco!
Le differenze tra grammatiche e le ambiguità sono dunque un enorme ostacolo allo sviluppo di un sistema perfettamente affidabile di traduzione automatica.
Tecniche di traduzione automatica
Una tecnica che non funziona: la sostituzione
Un sistema spesso pensato dagli inesperti è semplice: sostituisco le parole una ad una per ottenere una nuova stringa di testo.
Ammetto che in alcuni momenti, quando ancora facevo il biennio dell’ITIS, per me era una soluzione valida, ma basta pensare alle differenze semantiche per capire che la cosa è folle!
Ad esempio la frase italiana “Con la presente le invio i documenti” verrebbe, in inglese, sostituita e adattata con “With the present I send you the documents”.
La traduzione inversa?
“Con il regalo ti invio i documenti”
E’ chiaro che non si può tradurre così un intero testo senza stravolgerne il significato. Infatti la valutazione linguistica va effettuata molto più ad ampio spettro.
In ciò l’intelligenza artificiale ci può aiutare.
Apprendimento automatico, una quadra funzionante
Con l’intelligenza artificiale è possibile ottenere traduzioni molto più affidabili, ma chiaramente non perfette.
Ad esempio Google Translate, pur con le sue gaffes, è spesso utile per tradurre piccoli spezzoni di testo in lingue sconosciute.
Il machine learning
Un possibile uso dell’intelligenza artificiale è quello del machine Learning: in questo modo il software viene messo a lavorare sul medesimo testo tradotto nelle due lingue da confrontare, e ne ricava le regole corrispondenti.
Questo approccio può avere problemi. Possiamo citare tre esempi reali:
- Si può manipolare: se in una lingua si usa spesso un soprannome per qualcosa può essere scambiato per la parola reale, come accadde alla Russia, in ucraino Mordor, per Google Translate.
- Lingue simili vengono identificate come la medesima: spesso Google confonde il siciliano e lo identifica come corso, Bing ha la tendenza a dire che il lombardo è catalano.
- Se non esiste una letteratura bilingue consistente tra due lingue (ad esempio tra italiano e svedese) verrà usata la lingua comune, quasi sempre l’inglese, come tramite.
Il grande pregio è, tuttavia, che si tratta di un approccio principalmente statistico, che ha dunque buone probabilità di riuscire anche ad identificare il contesto della conversazione e a tradurre di conseguenza.
Si tratta, in ogni caso, di software molto complessi e la cui scrittura non è alla portata di tutti e che, in ogni caso, non garantiscono una traduzione sicura al 100%.
Bisogna sempre ricordare che il computer, per quanto sofisticato, è e rimane una calcolatrice. Con una serie di accorgimenti può avvicinarsi molto al linguaggio naturale, ma per sua natura non è in grado di ragionare come un essere umano.
Alcuni strumenti di traduzione automatica
Da anni esistono svariati software online e offline che permettono la traduzione automatica di testi (con le opportunità e le problematiche che ti ho descritto fin qui). Te ne mostrerò alcuni tra i più interessanti.
1. Google Translate.
Chi non ha mai usato questo utilissimo strumento di Google? E’ diventato popolarissimo non solo perché integrato nel motore di ricerca Google, ma anche per la sua semplicità. Infatti, basta copiare e incollare un testo nel campo a sinistra e scegliere la lingua nel campo a destra.
Ad oggi Google Translate è disponibile in un centinaio di lingue. Purtroppo, per ora, nessuna lingua minoritaria italiana è presente (a parte il catalano).
In realtà, per usare Google traduttore non è strettamente necessario entrare in Google. Basta navigare un sito internet con Google Chrome, cliccare col tasto destro del mouse e selezionare l’opzione “traduci questa pagina”. In questo modo puoi navigare in siti con lingue a te sconosciute.
Pochi sanno che c’è anche la versione di google translate traduttore simultaneo per smartphone.
2. Bing traduttore
E’ simile al precedente dal punto di vista funzionale, con la differenza che è sviluppato da Microsoft e ci sono un po’ meno lingue.
Ma in casa Microsoft si stanno attrezzando…
3. Word Reference
Se sei terrorizzato dall’ambiguità del linguaggio e non vuoi fare figuracce come tradurre “presente” con “gift” in una lettera formale in inglese, ti consiglio di dare un’occhiata a questo vocabolario online.
Non traduce frasi intere, ma singole parole. Però ha un focus importante sulle ambiguità del linguaggio e ti aiuta ad affinare le traduzioni automatiche.
4. Traduttore italiano-sardo open source
Concludo questa breve rassegna con una nota interessante che riguarda le lingue minoritarie. E’ una notizia che viene dalla Sardegna, che è all’avanguardia sul fronte dello sviluppo web in lingua regionale.
Gianfranco Fronteddu, neolaureato dell’università di Cagliari, ha descritto un traduttore automatico italiano-sardo open source nella sua tesi di laurea.
Per ora l’articolo dà poche informazioni tecniche. Rimaniamo in attesa di sviluppi (e speriamo che questa iniziativa si possa estendere anche ad altre lingue d’Italia).
Se conosci qualche altro tool di traduzione automatica, o qualche progetto per tradurre automaticamente lingue minoritarie, segnalamelo nei commenti!