Come implementare un traduttore bilingue Italiano-Inglese con Helsinki-NLP

Un esempio pratico e lo script in Python

Inglese --> Italiano

Utilizzando python per l'implementazione del traduttore

Questo traduttore si avvale di avanzati modelli di Machine Learning forniti da Helsinki-NLP/Opus-MT. Il sistema si basa su transformers, una popolare libreria per il Natural Language Processing, per accedere e utilizzare i modelli pre-addestrati.

Contesto Tecnico e Approfondimenti

Approfondimenti sulle tecnologie utilizzate nello script di traduzione.

Helsinki-NLP/Opus-MT

Helsinki-NLP offre una serie di modelli di Machine Translation (MT) che coprono varie coppie linguistiche. Questi modelli sono addestrati su Opus, un vasto corpus di dati paralleli e multilingue. L'approccio utilizzato per l'addestramento è basato su tecniche di neural machine translation, che consentono di ottenere traduzioni di alta qualità attraverso reti neurali profonde.

Transformers

Una libreria avanzata che fornisce numerosi modelli di deep learning per compiti di Natural Language Processing (NLP), inclusa la traduzione automatica. La libreria transformers di Hugging Face consente di accedere facilmente a questi modelli pre-addestrati, fornendo un'interfaccia semplificata per la loro implementazione.

Opus

Gli insiemi di dati Opus sono utilizzati per addestrare modelli di traduzione con l'obiettivo di migliorarne le prestazioni attraverso l'apprendimento su vasti volumi di testo parallelo.

Questo script rappresenta un'applicazione pratica delle tecnologie di punta nel campo del NLP e della traduzione automatica, rendendo accessibili queste capacità avanzate attraverso una semplice interfaccia basata su JSON.

        
import sys
import json
from transformers import pipeline

# Verifica che ci sia almeno un argomento passato allo script
if len(sys.argv) != 2:
    print("Errore: fornire i dati in formato JSON")
    sys.exit(1)

# Carica l'input JSON. Si assume che il JSON abbia la forma:
# {"text": "testo da tradurre", "direction": "it_to_en" o "en_to_it"}
input_json = json.loads(sys.argv[1])
text = input_json.get("text")
direction = input_json.get("direction")

# Percorsi ai modelli
model_path_it_to_en = "Helsinki-NLP/opus-mt-it-en"
model_path_en_to_it = "Helsinki-NLP/opus-mt-en-it"

# Seleziona il modello corretto in base alla direzione specificata
if direction == "it_to_en":
    translator = pipeline("translation_it_to_en", model=model_path_it_to_en)
elif direction == "en_to_it":
    translator = pipeline("translation_en_to_it", model=model_path_en_to_it)
else:
    print("Direzione di traduzione non valida. Usare 'it_to_en' o 'en_to_it'.")
    sys.exit(1)

# Esegue la traduzione
translation = translator(text, max_length=512)

# Prepara il risultato in formato JSON
result_json = json.dumps({"original_text": text, "translated_text": translation[0]['translation_text']}, ensure_ascii=False)

# Stampa il risultato in JSON
print(result_json)


1. Importazione delle Librerie

import sys
import json
from transformers import pipeline

In questa sezione, importiamo le librerie necessarie: sys per gestire gli argomenti della riga di comando, json per lavorare con i dati in formato JSON e pipeline dalla libreria transformers per la traduzione.

2. Verifica degli Argomenti

# Verifica che ci sia almeno un argomento passato allo script
if len(sys.argv) != 2:
    print("Errore: fornire i dati in formato JSON")
    sys.exit(1)

Questo blocco verifica che lo script riceva esattamente un argomento (i dati in formato JSON). Se non è così, viene stampato un messaggio di errore e lo script si interrompe.

3. Caricamento dei Dati JSON

# Carica l'input JSON. Si assume che il JSON abbia la forma:
# {"text": "testo da tradurre", "direction": "it_to_en" o "en_to_it"}
input_json = json.loads(sys.argv[1])
text = input_json.get("text")
direction = input_json.get("direction")

Qui, l'argomento JSON viene caricato e si estraggono i valori del testo da tradurre e della direzione di traduzione (it_to_en o en_to_it).

4. Definizione dei Percorsi ai Modelli

# Percorsi ai modelli
model_path_it_to_en = "Helsinki-NLP/opus-mt-it-en"
model_path_en_to_it = "Helsinki-NLP/opus-mt-en-it"

Questa parte definisce i percorsi dei modelli di traduzione da italiano a inglese e da inglese a italiano.

5. Selezione del Modello

# Seleziona il modello corretto in base alla direzione specificata
if direction == "it_to_en":
    translator = pipeline("translation_it_to_en", model=model_path_it_to_en)
elif direction == "en_to_it":
    translator = pipeline("translation_en_to_it", model=model_path_en_to_it)
else:
    print("Direzione di traduzione non valida. Usare 'it_to_en' o 'en_to_it'.")
    sys.exit(1)

In base alla direzione di traduzione specificata (it_to_en o en_to_it), viene selezionato il modello corretto. Se la direzione non è valida, viene stampato un messaggio di errore e lo script si interrompe.

6. Esecuzione della Traduzione

# Esegue la traduzione
translation = translator(text, max_length=512)

Questa riga esegue la traduzione del testo utilizzando il modello selezionato. La lunghezza massima del testo tradotto è impostata a 512 caratteri.

7. Preparazione del Risultato in Formato JSON

# Prepara il risultato in formato JSON
result_json = json.dumps({"original_text": text, "translated_text": translation[0]['translation_text']}, ensure_ascii=False)

Il risultato della traduzione viene formattato in JSON, includendo il testo originale e il testo tradotto.

8. Stampa del Risultato

# Stampa il risultato in JSON
print(result_json)

Infine, il risultato in formato JSON viene stampato sulla console.