Costruisci una pipeline di traduzione automatica multilingue con Amazon Translate Active Custom Translation.

Build a multilingual automatic translation pipeline with Amazon Translate Active Custom Translation.

Immergiti nel Deep Learning ( D2L.ai ) è un libro di testo open source che rende il deep learning accessibile a tutti. Presenta quaderni interattivi Jupyter con codice autocontenuto in PyTorch, JAX, TensorFlow e MXNet, oltre a esempi del mondo reale, figure di esposizione e matematica. Finora, D2L è stato adottato da più di 400 università in tutto il mondo, come l’Università di Cambridge, l’Università di Stanford, il Massachusetts Institute of Technology, l’Università Carnegie Mellon e l’Università Tsinghua. Questo lavoro è anche disponibile in cinese, giapponese, coreano, portoghese, turco e vietnamita, con piani per lanciare lo spagnolo e altre lingue.

È un’impresa impegnativa avere un libro online che sia continuamente aggiornato, scritto da più autori e disponibile in più lingue. In questo post, presentiamo una soluzione che D2L.ai ha utilizzato per affrontare questa sfida, utilizzando la funzione di Traduzione Personalizzata Attiva (ACT) di Amazon Translate e costruendo un flusso di lavoro di traduzione automatica multilingue.

Dimostreremo come utilizzare la Console di gestione AWS e l’API pubblica di Amazon Translate per fornire la traduzione automatica batch di macchine e analizzare le traduzioni tra due coppie di lingue: inglese e cinese e inglese e spagnolo. Consigliamo inoltre le migliori pratiche quando si utilizza Amazon Translate in questo flusso di lavoro di traduzione automatica per garantire la qualità e l’efficienza della traduzione.

Panoramica della soluzione

Abbiamo costruito flussi di lavoro di traduzione automatica per molte lingue utilizzando la funzione ACT in Amazon Translate. ACT consente di personalizzare l’output della traduzione al volo fornendo esempi di traduzione su misura sotto forma di dati paralleli. I dati paralleli consistono in una raccolta di esempi testuali in una lingua sorgente e le traduzioni desiderate in una o più lingue di destinazione. Durante la traduzione, ACT seleziona automaticamente i segmenti più rilevanti dai dati paralleli e aggiorna il modello di traduzione al volo in base a quelle coppie di segmenti. Ciò si traduce in traduzioni che corrispondono meglio allo stile e ai contenuti dei dati paralleli.

L’architettura contiene più sotto-flussi di lavoro; ogni sotto-flusso di lavoro gestisce una traduzione di lingua come l’inglese al cinese, l’inglese allo spagnolo, e così via. Più sotto-flussi di lavoro di traduzione possono essere elaborati in parallelo. In ogni sotto-flusso di lavoro, prima costruiamo i dati paralleli in Amazon Translate utilizzando il dataset di alta qualità di esempi di traduzione su misura dai libri D2L tradotti dall’essere umano. Quindi generiamo l’output di traduzione automatica personalizzato al volo durante l’esecuzione, il che garantisce una maggiore qualità e precisione.

Nelle sezioni seguenti, dimostriamo come costruire ogni flusso di lavoro di traduzione utilizzando Amazon Translate con ACT, insieme a Amazon SageMaker e Amazon Simple Storage Service (Amazon S3).

Prerequisiti

Per seguire i passaggi in questo post, assicurati di avere un account AWS con quanto segue:

  • Accesso a AWS Identity and Access Management (IAM) per la configurazione di ruoli e policy
  • Accesso a Amazon Translate, SageMaker e Amazon S3
  • Un bucket S3 per archiviare i documenti di origine, i documenti di riferimento, il dataset di dati paralleli e l’output della traduzione

Crea un ruolo IAM e le policy per Amazon Translate con ACT

Il nostro ruolo IAM deve contenere una policy di trust personalizzata per Amazon Translate:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Sid": "Statement1",
        "Effect": "Allow",
        "Principal": {
            "Service": "translate.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
    }]
}

Questo ruolo deve anche avere una policy di autorizzazioni che concede ad Amazon Translate l’accesso in lettura alla cartella di input e alle sottocartelle in Amazon S3 che contengono i documenti di origine e l’accesso in lettura/scrittura al bucket S3 e alla cartella che contiene i documenti tradotti:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:PutObject",
            “s3:DeleteObject” 
        ]
        "Resource": [
            "arn:aws:s3:::NOME-DEL-TUO-BUCKET-S3"
        ] 
    }]
}

Per eseguire i notebook Jupyter in SageMaker per i lavori di traduzione, è necessario concedere una policy di autorizzazione inline al ruolo di esecuzione di SageMaker. Questo ruolo passa il ruolo di servizio Amazon Translate a SageMaker che consente ai notebook di SageMaker di accedere ai documenti sorgente e tradotti nei bucket S3 designati:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Action": ["iam:PassRole"],
        "Effect": "Allow",
        "Resource": [
            "arn:aws:iam::YOUR-AWS-ACCOUNT-ID:role/batch-translate-api-role"
        ]
    }]
}

Preparare campioni di addestramento dei dati paralleli

I dati paralleli in ACT devono essere addestrati da un file di input composto da una lista di coppie di esempi testuali, ad esempio, una coppia di lingua sorgente (inglese) e lingua target (cinese). Il file di input può essere in formato TMX, CSV o TSV. La seguente schermata mostra un esempio di file di input CSV. La prima colonna è il dato di lingua sorgente (in inglese) e la seconda colonna è il dato di lingua target (in cinese). L’esempio seguente è tratto dal libro D2L-en e dal libro D2L-zh.

Eseguire l’addestramento personalizzato dei dati paralleli in Amazon Translate

Innanzitutto, creiamo il bucket S3 e le cartelle come mostrato nella seguente schermata. La cartella source_data contiene i documenti sorgente prima della traduzione; i documenti generati dopo la traduzione in batch sono inseriti nella cartella di output. La cartella ParallelData contiene il file di input dei dati paralleli preparato nel passaggio precedente.

Dopo aver caricato i file di input nella cartella source_data, possiamo utilizzare l’API CreateParallelData per eseguire un lavoro di creazione di dati paralleli in Amazon Translate:

S3_BUCKET = “YOUR-S3_BUCKET-NAME”
pd_name = “pd-d2l-short_test_sentence_enzh_all”
pd_description = “Parallel Data for English to Chinese”
pd_fn = “d2l_short_test_sentence_enzh_all.csv”
response_t = translate_client.create_parallel_data(
                Name=pd_name,                              # pd_name è il nome dei dati paralleli
                Description=pd_description,          # pd_description è la descrizione dei dati paralleli
                ParallelDataConfig={
                      'S3Uri': 's3://'+S3_BUCKET+'/Paralleldata/'+pd_fn,        # S3_BUCKET è il nome del bucket S3 definito nel passaggio precedente
                      'Format': 'CSV'
                },
)
print(pd_name, ": ", response_t['Status'], " creato.")

Per aggiornare i dati paralleli esistenti con nuovi set di dati di addestramento, possiamo utilizzare l’API UpdateParallelData:

S3_BUCKET = “YOUR-S3_BUCKET-NAME”
pd_name = “pd-d2l-short_test_sentence_enzh_all”
pd_description = “Parallel Data for English to Chinese”
pd_fn = “d2l_short_test_sentence_enzh_all.csv”
response_t = translate_client.update_parallel_data(
                Name=pd_name,                          # pd_name è il nome dei dati paralleli
                Description=pd_description,      # pd_description è la descrizione dei dati paralleli 
                ParallelDataConfig={
                      'S3Uri': 's3://'+S3_BUCKET+'/Paralleldata/'+pd_fn,    # S3_BUCKET è il nome del bucket S3 definito nel passaggio precedente
                      'Format': 'CSV'  
                },
)
print(pd_name, ": ", response_t['Status'], " aggiornato.")

Possiamo verificare lo stato del lavoro di addestramento sulla console di Amazon Translate. Quando il lavoro è completo, lo stato dei dati paralleli viene indicato come Attivo e sono pronti per l’uso.

Esegui la traduzione batch asincrona utilizzando dati paralleli

La traduzione batch può essere condotta in un processo in cui più documenti sorgente vengono automaticamente tradotti in documenti in lingue target. Il processo prevede il caricamento dei documenti sorgente nella cartella di input del bucket S3, quindi l’applicazione della API StartTextTranslationJob di Amazon Translate per avviare un lavoro di traduzione asincrono:

S3_BUCKET = "NOME-DEL-TUO-BUCKET-S3"
ROLE_ARN = "IL_RUOLO_DEFINITO_NELLO_STEP_1"
src_fdr = "dati_sorgente"
output_fdr = "output"
src_lang = "en"
tgt_lang = "zh"
pd_name = "pd-d2l-short_test_sentence_enzh_all"
response = translate_client.start_text_translation_job (  
              JobName='D2L_job',         
              InputDataConfig={
                 'S3Uri': 's3://'+S3_BUCKET+'/'+src_fdr+'/',       # S3_BUCKET è il nome del bucket S3 definito nel passaggio precedente
                                                                   # src_fdr è la cartella nel bucket S3 che contiene i file sorgente
                 'ContentType': 'text/html'
              },
              OutputDataConfig={ 
                  'S3Uri': 's3://'+S3_BUCKET+'/’+output_fdr+’/',   # S3_BUCKET è il nome del bucket S3 definito nel passaggio precedente 
                                                                   # output_fdr è la cartella nel bucket S3 che contiene i file tradotti
              },
              DataAccessRoleArn=ROLE_ARN,            # ROLE_ARN è il ruolo definito nel passaggio precedente 
              SourceLanguageCode=src_lang,           # src_lang è la lingua sorgente, come 'en'
              TargetLanguageCodes=[tgt_lang,],       # tgt_lang è la lingua target, come 'zh'
              ParallelDataNames=pd_name              # pd_name è il nome dei dati paralleli definito nel passaggio precedente        
)

Abbiamo selezionato cinque documenti sorgente in inglese dal libro D2L (D2L-en) per la traduzione in blocco. Sulla console di Amazon Translate, possiamo monitorare l’avanzamento del lavoro di traduzione. Quando lo stato del lavoro cambia in Completato, possiamo trovare i documenti tradotti in cinese (D2L-zh) nella cartella di output del bucket S3.

Valutare la qualità della traduzione

Per dimostrare l’efficacia della funzionalità ACT in Amazon Translate, abbiamo anche applicato il metodo tradizionale di traduzione in tempo reale di Amazon Translate senza dati paralleli per elaborare gli stessi documenti e abbiamo confrontato l’output con l’output di traduzione batch con ACT. Abbiamo utilizzato lo score BLEU (BiLingual Evaluation Understudy) per valutare la qualità della traduzione tra i due metodi. L’unico modo per misurare accuratamente la qualità dell’output della traduzione automatica è quello di far esaminare e valutare la qualità da un esperto. Tuttavia, BLEU fornisce una stima del miglioramento relativo della qualità tra due output. Uno score BLEU è tipicamente un numero tra 0 e 1; calcola la similarità della traduzione automatica con la traduzione umana di riferimento. Uno score più alto rappresenta una migliore qualità nella comprensione del linguaggio naturale (NLU).

Abbiamo testato un set di documenti in quattro pipeline: inglese in cinese (en to zh), cinese in inglese (zh to en), inglese in spagnolo (en to es) e spagnolo in inglese (es to en). La figura seguente mostra che la traduzione con ACT ha prodotto uno score BLEU medio più alto in tutte le pipeline di traduzione.

Abbiamo anche osservato che più granulare sono le coppie di dati paralleli, migliore è la performance di traduzione. Ad esempio, abbiamo utilizzato il seguente file di input dati paralleli con coppie di paragrafi, che contiene 10 voci.

Per lo stesso contenuto, abbiamo utilizzato il seguente file di input dati paralleli con coppie di frasi e 16 voci.

Ammesse entrambe i file di input paralleli per costruire due entità di dati paralleli in Amazon Translate, quindi creati due lavori di traduzione batch con lo stesso documento di origine. La figura seguente confronta le traduzioni di output. Mostra che l’output utilizzando dati paralleli con coppie di frasi ha superato quello che utilizza dati paralleli con coppie di paragrafi, sia per la traduzione dall’inglese al cinese che dal cinese all’inglese.

Se sei interessato a saperne di più su queste analisi di benchmark, fai riferimento a Auto Machine Translation and Synchronization for “Dive into Deep Learning”.

Pulizia

Per evitare costi ricorrenti in futuro, ti consigliamo di pulire le risorse che hai creato:

  1. Nella console di Amazon Translate, seleziona i dati paralleli che hai creato e scegli Elimina. In alternativa, puoi utilizzare l’API DeleteParallelData o il comando AWS Command Line Interface (AWS CLI) delete-parallel-data per eliminare i dati paralleli.
  2. Elimina il bucket S3 utilizzato per ospitare i documenti di origine e di riferimento, i documenti tradotti e i file di input paralleli dei dati.
  3. Elimina il ruolo e la policy IAM. Per le istruzioni, fare riferimento all’eliminazione dei ruoli o dei profili di istanza e all’eliminazione delle policy IAM.

Conclusione

Con questa soluzione, miriamo a ridurre il carico di lavoro dei traduttori umani dell’80%, mantenendo la qualità della traduzione e supportando molteplici lingue. Puoi utilizzare questa soluzione per migliorare la qualità e l’efficienza della tua traduzione. Stiamo lavorando per migliorare ulteriormente l’architettura della soluzione e la qualità della traduzione per altre lingue.

Il tuo feedback è sempre il benvenuto; lascia i tuoi pensieri e le tue domande nella sezione commenti.