Localizza i contenuti in più lingue utilizzando i servizi di machine learning di AWS PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Localizza i contenuti in più lingue utilizzando i servizi di machine learning di AWS

Negli ultimi anni, le piattaforme di istruzione online hanno visto un aumento dell'adozione e un aumento della domanda di apprendimento basato su video perché offre un mezzo efficace per coinvolgere gli studenti. Per espandersi ai mercati internazionali e rivolgersi a una popolazione culturalmente e linguisticamente diversificata, le aziende stanno anche cercando di diversificare le proprie offerte di apprendimento localizzando i contenuti in più lingue. Queste aziende sono alla ricerca di modi affidabili ed economici per risolvere i casi d'uso della localizzazione.

La localizzazione dei contenuti include principalmente la traduzione di voci originali in nuove lingue e l'aggiunta di ausili visivi come i sottotitoli. Tradizionalmente, questo processo è proibitivo in termini di costi, manuale e richiede molto tempo, incluso il lavoro con specialisti della localizzazione. Con la potenza dei servizi di machine learning (ML) di AWS come Amazon Transcribe, Amazon Traduttoree Amazon Polly, è possibile creare una soluzione di localizzazione praticabile ed economica. Puoi utilizzare Amazon Transcribe per creare una trascrizione dei tuoi flussi audio e video esistenti, quindi tradurre questa trascrizione in più lingue utilizzando Amazon Translate. Puoi quindi utilizzare Amazon Polly, un servizio di sintesi vocale, per convertire il testo tradotto in un linguaggio umano dal suono naturale.

Il passaggio successivo della localizzazione consiste nell'aggiungere i sottotitoli al contenuto, che possono migliorare l'accessibilità e la comprensione e aiutare gli spettatori a comprendere meglio i video. La creazione di sottotitoli sui contenuti video può essere difficile perché il discorso tradotto non corrisponde alla tempistica del discorso originale. Questa sincronizzazione tra audio e sottotitoli è un'attività fondamentale da considerare perché potrebbe disconnettere il pubblico dai tuoi contenuti se non sono sincronizzati. Amazon Polly offre una soluzione a questa sfida attraverso l'abilitazione segni di discorso, che puoi utilizzare per creare un file di sottotitoli che può essere sincronizzato con l'output vocale generato.

In questo post, esaminiamo una soluzione di localizzazione che utilizza i servizi AWS ML in cui utilizziamo un video inglese originale e lo convertiamo in spagnolo. Ci concentriamo anche sull'uso dei segni vocali per creare un file di sottotitoli sincronizzato in spagnolo.

Panoramica della soluzione

Il diagramma seguente illustra l'architettura della soluzione.

La soluzione prende un file video e le impostazioni della lingua di destinazione come input e utilizza Amazon Transcribe per creare una trascrizione del video. Usiamo quindi Amazon Translate per tradurre la trascrizione nella lingua di destinazione. Il testo tradotto viene fornito come input ad Amazon Polly per generare il flusso audio e i contrassegni vocali nella lingua di destinazione. Amazon Polly ritorna output del segno vocale in un flusso JSON delimitato da righe, che contiene i campi come ora, tipo, inizio, fine e valore. Il valore può variare a seconda del tipo di contrassegno vocale richiesto nell'input, ad es SSML, visema, parola o frase. Ai fini del nostro esempio, abbiamo richiesto il tipo di segno vocale as word. Con questa opzione, Amazon Polly suddivide una frase nelle sue singole parole nella frase e nei relativi orari di inizio e fine nel flusso audio. Con questi metadati, i segni vocali vengono quindi elaborati per generare i sottotitoli per il flusso audio corrispondente generato da Amazon Polly.

Infine, usiamo AWS Elemental MediaConvert per rendere il video finale con l'audio tradotto e i relativi sottotitoli.

Il video seguente mostra il risultato finale della soluzione:

Flusso di lavoro di AWS Step Functions

Usiamo Funzioni AWS Step per orchestrare questo processo. La figura seguente mostra una vista di alto livello del flusso di lavoro di Step Functions (alcuni passaggi sono omessi dal diagramma per una maggiore chiarezza).

Localizza i contenuti in più lingue utilizzando i servizi di machine learning di AWS PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

I passaggi del flusso di lavoro sono i seguenti:

  1. Un utente carica il file video di origine su un Servizio di archiviazione semplice Amazon (Amazon S3) secchio.
  2. I Notifica evento S3 innesca il AWS Lambda function macchina_stato.py (non mostrato nel diagramma), che richiama la macchina a stati Step Functions.
  3. Il primo passo, Trascrivi l'audio, richiama la funzione Lambda trascrivi.py, che utilizza Amazon Transcribe per generare una trascrizione dell'audio dal video di origine.

Il codice di esempio seguente mostra come creare un processo di trascrizione utilizzando Amazon Transcribe Boto3 SDK Python:

response = transcribe.start_transcription_job(
    TranscriptionJobName = jobName,
    MediaFormat=media_format,
    Media = {"MediaFileUri": "s3://"+bucket+"/"+mediaconvert_video_filename},
    OutputBucketName=bucket,
    OutputKey=outputKey,
    IdentifyLanguage=True
)

Al termine del lavoro, i file di output vengono salvati nel bucket S3 e il processo continua con il passaggio successivo di traduzione del contenuto.

  1. I Traduci la trascrizione step richiama la funzione Lambda tradurre.py che utilizza Amazon Translate per tradurre la trascrizione nella lingua di destinazione. Qui, utilizziamo la traduzione sincrona/in tempo reale usando il tradurre_testo funzione:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    La traduzione sincrona ha dei limiti alle dimensioni del documento che può tradurre; al momento della stesura di questo documento, è impostato su 5,000 byte. Per documenti di dimensioni maggiori, prendere in considerazione l'utilizzo di un percorso asincrono di creazione del lavoro utilizzando start_text_translation_job e controllare lo stato tramite description_text_translation_job.

  2. Il prossimo passo è un Step Functions Parallel state, dove creiamo rami paralleli nella nostra macchina a stati.
    1. Nel primo ramo, invochiamo la funzione Lambda, la funzione Lambda generate_polly_audio.py per generare il nostro flusso audio Amazon Polly:
      # Set up the polly and translate services
      client = boto3.client('polly')
      
      # Use the translated text to create the synthesized speech
      response = client.start_speech_synthesis_task(
                   Engine="standard", LanguageCode="es", OutputFormat="mp3",
                   SampleRate="22050", Text=polly_text, VoiceId="Miguel",
                   TextType="text",
                   OutputS3BucketName="S3-bucket-name",
                   OutputS3KeyPrefix="-polly-recording")
      audio_task_id = response['SynthesisTask']['TaskId']

      Qui usiamo il start_speech_sintesi_task metodo di Amazon Polly Python SDK per attivare l'attività di sintesi vocale che crea l'audio Amazon Polly. Impostiamo il OutputFormat a mp3, che indica ad Amazon Polly di generare un flusso audio per questa chiamata API.

    2. Nel secondo ramo, invochiamo la funzione Lambda generate_speech_marks.py per generare l'output di segni vocali:
      ....
      # Use the translated text to create the speech marks
      response = client.start_speech_synthesis_task(
                   Engine="standard", LanguageCode="es", OutputFormat="json",
                   SampleRate="22050", Text=polly_text, VoiceId="Miguel",
                   TextType="text", SpeechMarkTypes=['word'],
                   OutputS3BucketName="S3-bucket-name", 
                   OutputS3KeyPrefix="-polly-speech-marks")
      speechmarks_task_id = response['SynthesisTask']['TaskId']

  • Usiamo ancora il start_speech_sintesi_task metodo ma specificare OutputFormat a json, che indica ad Amazon Polly di generare segni vocali per questa chiamata API.

Nel passaggio successivo del secondo ramo, invochiamo la funzione Lambda generate_subtitles.py, che implementa la logica per generare un file di sottotitoli dall'output dei segni vocali.

Usa il modulo Python nel file webvtt_utils.py. Questo modulo ha molteplici funzioni di utilità per creare il file dei sottotitoli; uno di questi metodi get_phrases_from_speechmarks è responsabile dell'analisi del file dei segni vocali. La struttura JSON dei segni vocali fornisce solo l'ora di inizio per ciascuna parola individualmente. Per creare la temporizzazione dei sottotitoli richiesta per il file SRT, creiamo prima frasi di circa n (dove n=10) parole dall'elenco di parole nel file dei segni vocali. Quindi li scriviamo nel formato di file SRT, prendendo l'ora di inizio dalla prima parola nella frase, e per l'ora di fine utilizziamo l'ora di inizio della parola (n+1) e la sottraiamo per 1 per creare la voce in sequenza . La seguente funzione crea le frasi in preparazione per scriverle nel file SRT:

def get_phrases_from_speechmarks(words, transcript):
.....

    for item in items:
        # if it is a new phrase, then get the start_time of the first item
        if n_phrase:
            phrase["start_time"] = get_time_code(words[c]["start_time"])
            n_phrase = False

        else:
            if c == len(words) - 1:
                phrase["end_time"] = get_time_code(words[c]["start_time"])
            else:
                phrase["end_time"] = get_time_code(words[c + 1]["start_time"] - 1)

        # in either case, append the word to the phrase...
        phrase["words"].append(item)
        x += 1

        # now add the phrase to the phrases, generate a new phrase, etc.
        if x == 10 or c == (len(items) - 1):
            # print c, phrase
            if c == (len(items) - 1):
                if phrase["end_time"] == '':
                    start_time = words[c]["start_time"]
                    end_time = int(start_time) + 500
                    phrase["end_time"] = get_time_code(end_time)

            phrases.append(phrase)
            phrase = new_phrase()
            n_phrase = True
            x = 0

        .....

    return phrases

  1. Il passo finale, Media Convert, richiama la funzione Lambda create_mediaconvert_job.py per combinare il flusso audio da Amazon Polly e il file dei sottotitoli con il file video di origine per generare il file di output finale, che viene quindi archiviato in un bucket S3. Questo passaggio utilizza MediaConvert, un servizio di transcodifica video basato su file con funzionalità di livello broadcast. Ti consente di creare facilmente contenuti video on demand e combina funzionalità video e audio avanzate con una semplice interfaccia web. Anche in questo caso usiamo Python Boto3 SDK per creare un MediaConvert lavoro:
    ……
    job_metadata = {'asset_id': asset_id, 'application': "createMediaConvertJob"}
    mc_client = boto3.client('mediaconvert', region_name=region)
    endpoints = mc_client.describe_endpoints()
    mc_endpoint_url = endpoints['Endpoints'][0]['Url']
    
    mc = boto3.client('mediaconvert', region_name=region, endpoint_url=mc_endpoint_url, verify=True)
    
    mc.create_job(Role=mediaconvert_role_arn, UserMetadata=job_metadata, Settings=mc_data["Settings"])

Prerequisiti

Prima di iniziare, devi avere i seguenti prerequisiti:

Distribuisci la soluzione

Per distribuire la soluzione utilizzando AWS CDK, completa i seguenti passaggi:

  1. Clona il file deposito:
    git clone https://github.com/aws-samples/localize-content-using-aws-ml-services.git 

  2. Per assicurarsi che l'AWS CDK lo sia bootstrap, esegui il comando cdk bootstrap dalla radice del repository:
    $ cdk bootstrap
    ⏳ Bootstrapping environment aws://<acct#>/<region>...
    Trusted accounts for deployment: (none)
    Trusted accounts for lookup: (none)
    Using default execution policy of 'arn:aws:iam::aws:policy/AdministratorAccess'. Pass '--cloudformation-execution-policies' to customize.
    ✅ Environment aws://<acct#>/<region> bootstrapped (no changes).

  3. Modificare la directory di lavoro nella radice del repository ed eseguire il comando seguente:
    cdk deploy

Per impostazione predefinita, le impostazioni audio di destinazione sono impostate su spagnolo americano (es-US). Se prevedi di testarlo con una lingua di destinazione diversa, utilizza il comando seguente:

cdk deploy --parameters pollyLanguageCode=<pollyLanguageCode> 
           --parameters pollyVoiceId=<pollyVoiceId>
           --parameters pollyEngine=<pollyEngine> 
           --parameters mediaConvertLangShort=<mediaConvertLangShort>
           --parameters mediaConvertLangLong=<mediaConvertLangLong>
           --parameters targetLanguageCode=<targetLanguageCode>

Il completamento del processo richiede alcuni minuti, dopodiché viene visualizzato un collegamento che puoi utilizzare per visualizzare il file video di destinazione con l'audio tradotto e i sottotitoli tradotti.

Localizza i contenuti in più lingue utilizzando i servizi di machine learning di AWS PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Prova la soluzione

Per testare questa soluzione, abbiamo utilizzato una piccola parte di quanto segue Video di AWS re:Invent 2017 da YouTube, dove Amazon Transcribe è stato introdotto per la prima volta. Puoi anche testare la soluzione con il tuo video. La lingua originale del nostro video di prova è l'inglese. Quando si distribuisce questa soluzione, è possibile specificare le impostazioni audio di destinazione oppure è possibile utilizzare le impostazioni audio di destinazione predefinite, che utilizzano lo spagnolo per la generazione di audio e sottotitoli. La soluzione crea un bucket S3 che può essere utilizzato per caricare il file video.

  1. Sulla console Amazon S3, vai al bucket PollyBlogBucket.
    Localizza i contenuti in più lingue utilizzando i servizi di machine learning di AWS PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  2. Scegli il secchio, vai a /inputVideo directory e caricare il file video (la soluzione è testata con video di tipo mp4). A questo punto, una notifica di evento S3 attiva la funzione Lambda, che avvia la macchina a stati.
  3. Nella console Step Functions, accedere alla macchina a stati (ProcessAudioWithSubtitles).
  4. Scegli una delle esecuzioni della macchina a stati per individuare il file Ispettore grafico.

Questo mostra i risultati dell'esecuzione per ogni stato. Il completamento del flusso di lavoro di Step Functions richiede alcuni minuti, dopodiché è possibile verificare se tutti i passaggi sono stati completati correttamente.

Localizza i contenuti in più lingue utilizzando i servizi di machine learning di AWS PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Rivedere l'output

Per rivedere l'output, apri la console Amazon S3 e controlla se il file audio (.mp3) e il file del contrassegno vocale (.marks) sono archiviati nel bucket S3 in <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

Localizza i contenuti in più lingue utilizzando i servizi di machine learning di AWS PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Quello che segue è un esempio del file del segno vocale generato dal testo tradotto:

{"time":6,"type":"word","start":2,"end":6,"value":"Qué"}
{"time":109,"type":"word","start":7,"end":10,"value":"tal"}
{"time":347,"type":"word","start":11,"end":13,"value":"el"}
{"time":453,"type":"word","start":14,"end":20,"value":"idioma"}
{"time":1351,"type":"word","start":22,"end":24,"value":"Ya"}
{"time":1517,"type":"word","start":25,"end":30,"value":"sabes"}
{"time":2240,"type":"word","start":32,"end":38,"value":"hablé"}
{"time":2495,"type":"word","start":39,"end":44,"value":"antes"}
{"time":2832,"type":"word","start":45,"end":50,"value":"sobre"}
{"time":3125,"type":"word","start":51,"end":53,"value":"el"}
{"time":3227,"type":"word","start":54,"end":59,"value":"hecho"}
{"time":3464,"type":"word","start":60,"end":62,"value":"de"}

In questo output, ogni parte del testo è suddivisa in termini di segni vocali:

  • tempo – Il timestamp in millisecondi dall'inizio del flusso audio corrispondente
  • Digitare – Il tipo di marchio vocale (frase, parola, visema o SSML)
  • inizia a – L'offset in byte (non caratteri) dell'inizio dell'oggetto nel testo di input (esclusi i segni del visema)
  • fine – L'offset in byte (non caratteri) dell'estremità dell'oggetto nel testo di input (esclusi i segni del visema)
  • APPREZZIAMO – Singole parole nella frase

Il file dei sottotitoli generato viene riscritto nel bucket S3. Puoi trovare il file sotto <ROOT_S3_BUCKET>/<UID>/subtitlesOutput/. Ispeziona il file dei sottotitoli; il contenuto dovrebbe essere simile al seguente testo:

1
00:00:00,006 --> 00:00:03,226
¿Qué tal el idioma? Ya sabes, hablé antes sobre el

2
00:00:03,227 --> 00:00:06,065
hecho de que el año pasado lanzamos Polly y Lex,

3
00:00:06,066 --> 00:00:09,263
pero hay muchas otras cosas que los constructores quieren hacer

4
00:00:09,264 --> 00:00:11,642
con el lenguaje. Y una de las cosas que ha

5
00:00:11,643 --> 00:00:14,549
sido interesante es que ahora hay tantos datos que están

Dopo che il file dei sottotitoli e il file audio sono stati generati, il file video di origine finale viene creato utilizzando MediaConvert. Controllare la console MediaConvert per verificare se lo stato del lavoro è COMPLETE.

Al termine del processo MediaConvert, il file video finale viene generato e salvato di nuovo nel bucket S3, che può essere trovato in <ROOT_S3_BUCKET>/<UID>/convertedAV/.

Come parte di questa distribuzione, il video finale viene distribuito tramite un Amazon CloudFront (CDN) e visualizzati nel terminale o nel AWS CloudFormazione console.

Apri l'URL in un browser per visualizzare il video originale con opzioni aggiuntive per audio e sottotitoli. Puoi verificare che l'audio e i sottotitoli tradotti siano sincronizzati.

Conclusione

In questo post, abbiamo discusso di come creare nuove versioni linguistiche dei file video senza la necessità di un intervento manuale. I creatori di contenuti possono utilizzare questo processo per sincronizzare l'audio e i sottotitoli dei loro video e raggiungere un pubblico globale.

Puoi facilmente integrare questo approccio nelle tue pipeline di produzione per gestire grandi volumi e scalare in base alle tue esigenze. Amazon Polly utilizza TTS neurale (NTTS) per produrre voci di sintesi vocale naturali e simili a quelle umane. Supporta anche generazione del parlato da SSML, che ti offre un controllo aggiuntivo su come Amazon Polly genera il parlato dal testo fornito. Amazon Polly fornisce anche un varietà di voci diverse in più lingue per supportare le tue esigenze.

Inizia con i servizi di machine learning di AWS visitando il , o fare riferimento a Lab di Amazon Machine Learning Solutions pagina in cui puoi collaborare con esperti per portare soluzioni di machine learning nella tua organizzazione.

Risorse addizionali

Per ulteriori informazioni sui servizi utilizzati in questa soluzione, fare riferimento a quanto segue:


Circa gli autori

Localizza i contenuti in più lingue utilizzando i servizi di machine learning di AWS PlatoBlockchain Data Intelligence. Ricerca verticale. Ai. Regan Rosario lavora come architetto di soluzioni presso AWS, concentrandosi su aziende di tecnologia per l'istruzione. Adora aiutare i clienti a creare soluzioni scalabili, altamente disponibili e sicure nel cloud AWS. Ha più di un decennio di esperienza lavorando in una varietà di ruoli tecnologici, con particolare attenzione all'ingegneria del software e all'architettura.

Localizza i contenuti in più lingue utilizzando i servizi di machine learning di AWS PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Anil Kodali è un Solutions Architect con Amazon Web Services. Lavora con i clienti di AWS EdTech, guidandoli con le best practice architetturali per la migrazione dei carichi di lavoro esistenti nel cloud e progettando nuovi carichi di lavoro con un approccio cloud-first. Prima di entrare in AWS, ha lavorato con i grandi rivenditori per aiutarli con le migrazioni al cloud.

Localizza i contenuti in più lingue utilizzando i servizi di machine learning di AWS PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Prasanna Saraswathi Krishnan è un Solutions Architect con Amazon Web Services che lavora con i clienti EdTech. Li aiuta a guidare l'architettura cloud e la strategia dei dati utilizzando le migliori pratiche. Il suo background è nell'informatica distribuita, nell'analisi dei big data e nell'ingegneria dei dati. È appassionato di machine learning e di elaborazione del linguaggio naturale.

Timestamp:

Di più da Apprendimento automatico di AWS