Multilingual Universal Sentence Encoder

Multilingual Universal Sentence Encoder

L'esperienza dei nostri Data Scientist nella gestione del multilingua nel campo del Natural Language Processing

Il modello di NLP che parla 16 lingue

Chi da anni lavora nel campo del Natural Language Processing sa bene che una delle carte che il mondo reale gioca spesso per mettere i bastoni fra le ruote ai data scientist alle prese con l'elaborazione del linguaggio naturale è la lingua.

Molto spesso accade che il progetto nasca con un modello allenato su dataset di una specifica lingua e poi, visti i risultati incoraggianti, si richieda di estenderlo a utenti di altri paesi e idiomi.

Nel presente articolo presentiamo una delle tecniche che sono state sviluppate per superare questo comune problema, basata su un modello denominato Multilingual Sentence Encoder, rilasciato a luglio 2019 dai laboratori di intelligenza artificiale di Google.

Questo è un modello di codifica di frasi addestrato contemporaneamente su più compiti e più lingue in grado di creare un unico spazio vettoriale di rappresentazione (embedding) comune a tutte le 16 lingue su cui è stato formato.

Cos’è un Embedding model?

I modelli di Embedding sono modelli in grado di mappare elementi appartenenti ad insiemi discreti in vettori che ne rappresentino coerentemente l’informazione contenuta. Nel caso del linguaggio naturale gli elementi posso essere frasi, parole, n-grammi (raccolte di n lettere / parole); il risultato di questi modelli è una matrice contenente per ogni elemento la sua rappresentazione. In questo modo ogni elemento può essere rappresentato come un singolo punto in uno spazio vettoriale. L'obiettivo è quello di essere in grado di ottenere questa rappresentazione senza perdere troppe informazioni. Con il termine "informazione" intendo non solo la semantica di un determinato elemento, ma anche lo stile, la sintassi e soprattutto le somiglianze e le relazioni con altri elementi codificati.

frequency range frequency range

Conoscere una buona rappresentazione per una parola o una frase ci rende in grado di svolgere molte attività altrimenti impossibili, in alcuni casi senza nemmeno la necessità di allenare un ulteriore modello. Ad esempio nell'attività di sviluppo di chatbot che rispondano a FAQ precedentemente selezionate, uno degli approcci più comuni è semplicemente quello di confrontare l’embedding di una nuova domanda posta dall'utente con tutte le FAQ preesistenti codificate nel sistema per trovare le più simili e restituire quindi la relativa risposta.

La versatilità dei modelli di embedding li ha resi una delle armi più potenti che il deep learning abbia mai fornito al campo dell'elaborazione del linguaggio naturale. Dall'enorme diffusione del famoso modello Word2Vect rilasciato nel 2013, i modelli di encoding hanno continuato a proliferare. Ecco alcuni dei più popolari: GloVe, Doc2Vect, FastText, Elmo, Bert, GPT e GPT2.

La famiglia degli Universal Sentence Encoders

Quando parliamo di USE (Universal Sentence Encoder) non ci riferiamo a un singolo modello specifico ma a una famiglia di modelli di embedding di frasi. Come riportato nella pagina di tensorflow-hub, esistono svariati modelli di embedding disponibili, “addestrati con obiettivi diversi tra cui dimensioni / prestazioni multilingue e answer retrival a domande dettagliate” (tradotto dalla descrizione della pagina di tensorflow-hub). Citando i più significativi:

I primi due modelli sono estratti dal paper "Universal Sentence Encoder for English" (2018). I restanti (oggetto di questo articolo) sono tratti dai paper "Multilingual Universal Frase Encoder for Semantic Retrieval" (2019) e “Learning Cross-Lingual Sentence Representations via a Multi-task Dual-Encoder Model” (2019), letture consigliate se si desidera approfondire l’argomento.

I vantaggi del "Multilingual"

Cosa rende il Multilingual Sentence Encoder un must nell'arsenale dei data scientist che si dedicano al NLP?

La maggior parte dei modelli pre-addestrati di sentence embedding disponibili al pubblico sono specifici rispetto alla lingua. Ciò significa che la stessa architettura di modello deve essere addestrata sull'inglese per elaborare l'input in inglese, sullo spagnolo per elaborare l'input in spagnolo e così via, generando modelli diversi (stessa architettura ma pesi differenti) per ogni lingua desiderata.

Il Multilingual Sentence Encoder viene invece addestrato contemporaneamente su più lingue utilizzando una tecnica di deep learning chiamata "Multi-task Dual Encoder Model". Ciò significa che le frasi di lingue diverse vengono mappate in un unico spazio vettoriale usando esattamente lo stesso modello.

La conseguenza principale è che le frasi di lingue diverse sono ora direttamente comparabili usando la codifica estratta dal modello poiché vivono nello stesso spazio vettoriale. In altre parole è possibile misurare la "distanza di significato" tra frasi scritte in due lingue diverse senza alcun passaggio intermedio.

Sono supportate 16 lingue tra cui Arabo, Cinese, Tedesco, Francese, Italiano, Russo.

COME UTILIZZARE IL MULTILINGUAL SENTENCE ENCODER IN PRATICA

Questo articolo non sarebbe stato di alcuna utilità senza una spiegazione relativa alle modalità di utilizzo di questo potente strumento di NLP. Grazie allo spirito magnanimo dei ricercatori di Google AI, tutti questi modelli pre-addestrati sono disponibili su tensorflow-hub e facilmente eseguibili su un qualunque laptop con Python 3 utilizzando il framework di deeplearning Tensorflow. Non è necessario avere grande familiarità con Tensorflow; è possibile prendere il codice che seguirà come una scatola nera che mappa da frasi ad array codificati che ne rappresentino coerentemente il significato.

Mostriamo come usarlo con un esempio. Supponiamo di essere dei madrelingua inglesi che si apprestano a tradurre un testo dall'italiano all'inglese. Supponiamo anche che "Mamma mia" e "Pizza" siano le uniche parole italiane che possiamo ricordare, ma il testo che si intende tradurre parla di una complessa ricetta italiana. Supponiamo infine di essere molto esigenti. Intendo MOLTO esigenti. Non è sufficiente gettare il testo all'interno di Google Translate e fare copia-incolla di tutto ciò che potrebbe uscirne. Stiamo cercando il miglior servizio di traduzione online, dal momento che nulla di questo gustoso capolavoro italiano dovrà andare perso a causa di traduzioni scadenti. Ma come si può confrontare la qualità della traduzione da una lingua che non si conosce? Bene, è possibile farlo se quella lingua rientra nelle sedici elencate in precedenza, e per fortuna l'italiano lo è.

Per risolvere questo problema stiamo cercando, tra alcuni dei servizi di traduzione online più utilizzati, quelli per cui le frasi fornite in input e i risultati tradotti sono più simili usando la rappresentazione del Multilingual Sentence Encoder. Questo perché più due rappresentazioni sono vicine tra loro, più le due frasi codificate sono simili ovvero contengono la stessa informazione nonostante la differenza di lingua. Poiché le rappresentazioni delle frasi non sono altro che vettori di 512 dimensioni normalizzate, una misura di similarità tra due vettori può essere calcolata utilizzando il prodotto scalare. Abbiamo ridotto il problema originale al compito di cercare il traduttore le cui frasi tradotte codificate hanno il prodotto scalare più elevato con le frasi italiane codificate. Un gioco da ragazzi, no?

Questo è un piccolo estratto del testo italiano di partenza:
Per preparare gli arancini di riso, iniziate lessando il riso in 1,2 l di acqua bollente salata, in modo da far sì che, a cottura avvenuta, l’acqua sia stata completamente assorbita (questo permetterà all’amido di rimanere tutto in pentola e otterrete un riso molto asciutto e compatto). Fate cuocere per circa 15 minuti, poi sciogliete lo zafferano in pochissima acqua calda e unitelo al riso ormai cotto. Unite anche il burro a pezzetti.

E queste sono le traduzioni ottenute rispettivamente utilizzando Google Translate, Reverso e Bing Translator.

  • Google Translate (gt)
    To prepare the rice arancini, start by boiling the rice in 1.2 l of salted boiling water, so that, once cooked, the water has been completely absorbed (this will allow the starch to remain all in the pot and you will get a very dry and compact rice). Cook for about 15 minutes, then dissolve the saffron in very little hot water and add it to the now cooked rice. Also add the butter into small pieces.
  • Reverso (rv)
    To prepare the rice oranges, start by boiling the rice in 1.2 l of boiling salted water, so that, once cooked, the water has been completely absorbed (this will allow the starch to stay in the pot and you will get a very dry and compact rice). Cook for about 15 minutes, then melt the saffron in very little hot water and add it to the rice now cooked. Add the butter pieces too.
  • Bing Translator (bng)
    To prepare the rice arancini, start by boiling the rice in 1.2 l of boiling salted water, so that, when cooked, the water has been completely absorbed (this will allow the starch to stay all in the pot and you will get a very dry rice compact). Cook for about 15 minutes, then melt the saffron in very little hot water and add it to the cooked rice. Add the butter into small pieces.

Sembrano abbastanza simili ma in molti passaggi i diversi traduttori hanno preso decisioni diverse, ad esempio nell'ultima frase. Quale di queste traduzioni è la più fedele alla ricetta italiana originale?
Per scoprirlo buttiamo giù un po’ di codice. Per prima cosa importiamo i pacchetti necessari e impostiamo la variabile url del modello desiderato.

Carichiamo il testo in italiano e le tre traduzione candidate.

Impostiamo il model graph di Tensorflow.

Calcoliamo la rappresentazione vettoriale di tutte le frasi di tutti e quattro i documenti. Ogni frase è mappata in una matrice di 512 elementi, quindi ogni documento è rappresentato come una matrice M x 512 dove M è il numero di frasi nel documento originale.

Ora il passo finale. Per verificare le somiglianze tra frasi italiane e inglesi non ci resta che calcolare il prodotto scalare tra la codifica delle frasi italiane e la codifica delle corrispondenti frasi in tutti i diversi traduttori. Infine calcoleremo la media delle somiglianze tra tutte le frasi tradotte.

Ed ecco i risultati ottenuti:

La differenza nelle somiglianze medie è molto bassa (abbastanza ovvio poiché tutte le traduzioni sono dello stesso testo), ma Google Translate pare abbia generato delle frasi il cui significato sembra leggermente più vicino a quelle originali italiane. Questo approccio può anche essere usato per calcolare un punteggio approssimativo di quanto una traduzione sia fedele al testo originale fornito.