Lokaliser indhold til flere sprog ved hjælp af AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Lokaliser indhold til flere sprog ved hjælp af AWS maskinlæringstjenester

I løbet af de sidste par år har online uddannelsesplatforme oplevet en stigning i anvendelsen af ​​og en stigning i efterspørgslen efter videobaseret læring, fordi det tilbyder et effektivt medium til at engagere eleverne. For at udvide til internationale markeder og henvende sig til en kulturelt og sproglig mangfoldig befolkning, kigger virksomheder også på at diversificere deres læringstilbud ved at lokalisere indhold til flere sprog. Disse virksomheder leder efter pålidelige og omkostningseffektive måder at løse deres lokaliseringsbrug.

Lokalisering af indhold omfatter hovedsageligt oversættelse af originale stemmer til nye sprog og tilføjelse af visuelle hjælpemidler såsom undertekster. Traditionelt er denne proces uoverkommelig, manuel og tager meget tid, herunder at arbejde med lokaliseringsspecialister. Med kraften fra AWS machine learning (ML) tjenester som f.eks Amazon Transcrib, Amazon Oversætog Amazon Polly, kan du skabe en levedygtig og en omkostningseffektiv lokaliseringsløsning. Du kan bruge Amazon Transcribe til at oprette en transskription af dine eksisterende lyd- og videostreams og derefter oversætte denne transskription til flere sprog ved hjælp af Amazon Translate. Du kan derefter bruge Amazon Polly, en tekst-til-tale-tjeneste, til at konvertere den oversatte tekst til naturligt klingende menneskelig tale.

Det næste trin i lokaliseringen er at tilføje undertekster til indholdet, hvilket kan forbedre tilgængeligheden og forståelsen og hjælpe seerne med at forstå videoerne bedre. Oprettelse af undertekster på videoindhold kan være udfordrende, fordi den oversatte tale ikke matcher den oprindelige taletiming. Denne synkronisering mellem lyd og undertekster er en kritisk opgave at overveje, fordi den kan afbryde publikum fra dit indhold, hvis de ikke er synkroniserede. Amazon Polly tilbyder en løsning på denne udfordring gennem aktivering talemærker, som du kan bruge til at oprette en undertekstfil, der kan synkroniseres med det genererede taleoutput.

I dette indlæg gennemgår vi en lokaliseringsløsning ved hjælp af AWS ML-tjenester, hvor vi bruger en original engelsk video og konverterer den til spansk. Vi fokuserer også på at bruge talemærker til at oprette en synkroniseret undertekstfil på spansk.

Løsningsoversigt

Følgende diagram illustrerer løsningsarkitekturen.

Løsningen tager en videofil og målsprogindstillingerne som input og bruger Amazon Transcribe til at lave en transskription af videoen. Vi bruger derefter Amazon Translate til at oversætte transskriptionen til målsproget. Den oversatte tekst leveres som input til Amazon Polly for at generere lydstrømmen og talemærker på målsproget. Amazon Polly vender tilbage output af talemærke i en linjeafgrænset JSON-stream, som indeholder felterne som tid, type, start, slut og værdi. Værdien kan variere afhængigt af typen af ​​talemærke, der anmodes om i inputtet, som f.eks SSML, viseme, ord eller sætning. Med henblik på vores eksempel anmodede vi om talemærketype as word. Med denne mulighed opdeler Amazon Polly en sætning i dens individuelle ord i sætningen og deres start- og sluttider i lydstrømmen. Med disse metadata behandles talemærkerne derefter for at generere underteksterne til den tilsvarende lydstrøm genereret af Amazon Polly.

Til sidst bruger vi AWS Elemental MediaConvert for at gengive den endelige video med den oversatte lyd og tilhørende undertekster.

Følgende video viser det endelige resultat af løsningen:

AWS Step Functions arbejdsgang

Vi anvender AWS-trinfunktioner at orkestrere denne proces. Følgende figur viser et overblik over arbejdsgangen Trinfunktioner (nogle trin er udeladt fra diagrammet for bedre klarhed).

Lokaliser indhold til flere sprog ved hjælp af AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Workflow-trinene er som følger:

  1. En bruger uploader kildevideofilen til en Amazon Simple Storage Service (Amazon S3) spand.
  2. S3 begivenhedsmeddelelse udløser AWS Lambda funktion state_machine.py (ikke vist i diagrammet), som kalder Trinfunktions-tilstandsmaskinen.
  3. Det første skridt, Transskriber lyd, påberåber sig Lambda-funktionen transcribe.py, som bruger Amazon Transcribe til at generere en transskription af lyden fra kildevideoen.

Følgende eksempelkode viser, hvordan man opretter et transskriptionsjob ved hjælp af Amazon Transcribe Boto3 Python SDK:

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

Når jobbet er fuldført, gemmes outputfilerne i S3-bøtten, og processen fortsætter til næste trin med at oversætte indholdet.

  1. Oversæt transskription trin aktiverer Lambda-funktionen translate.py som bruger Amazon Translate til at oversætte transskriptionen til målsproget. Her bruger vi den synkrone/realtidsoversættelse ved hjælp af oversæt_tekst fungere:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    Synkron oversættelse har begrænsninger for den dokumentstørrelse, den kan oversætte; Når dette skrives, er det sat til 5,000 bytes. For større dokumentstørrelser kan du overveje at bruge en asynkron rute til at oprette jobbet ved hjælp af start_text_translation_job og kontrol af status via beskriv_tekst_oversættelsesjob.

  2. Det næste trin er et Trinfunktioner Parallel stat, hvor vi skaber parallelle grene i vores statsmaskine.
    1. I den første gren kalder vi Lambda-funktionen Lambda-funktionen gener_polly_audio.py for at generere vores Amazon Polly lydstream:
      # 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']

      Her bruger vi start_tale_syntese_opgave metode af Amazon Polly Python SDK til at udløse talesynteseopgaven, der skaber Amazon Polly-lyden. Vi indstiller OutputFormat til mp3, som fortæller Amazon Polly at generere en lydstrøm til dette API-kald.

    2. I den anden gren kalder vi Lambda-funktionen gener_speech_marks.py for at generere talemærker output:
      ....
      # 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']

  • Vi bruger igen start_tale_syntese_opgave metode, men angiv OutputFormat til json, som fortæller Amazon Polly at generere talemærker for dette API-kald.

I det næste trin i den anden gren påberåber vi os Lambda-funktionen gener_subtitles.py, som implementerer logikken til at generere en undertekstfil fra talemærkeoutputtet.

Den bruger Python-modulet i filen webvtt_utils.py. Dette modul har flere hjælpefunktioner til at oprette undertekstfilen; en sådan metode get_phrases_from_speechmarks er ansvarlig for at parse talemærkefilen. Talen markerer JSON-strukturen giver kun starttidspunktet for hvert ord individuelt. For at skabe den underteksttiming, der kræves til SRT-filen, opretter vi først sætninger på omkring n (hvor n=10) ord fra listen over ord i talemærkefilen. Derefter skriver vi dem ind i SRT-filformatet, idet vi tager starttidspunktet fra det første ord i sætningen, og til sluttidspunktet bruger vi starttidspunktet for ordet (n+1) og trækker det fra med 1 for at skabe den sekvenserede post . Følgende funktion opretter sætningerne som forberedelse til at skrive dem til SRT-filen:

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. Det sidste trin, Medier Konverter, påberåber sig Lambda-funktionen create_mediaconvert_job.py at kombinere lydstrømmen fra Amazon Polly og undertekstfilen med kildevideofilen for at generere den endelige outputfil, som derefter gemmes i en S3-bøtte. Dette trin bruger MediaConvert, en filbaseret videoomkodningstjeneste med broadcast-kvalitetsfunktioner. Det giver dig mulighed for nemt at oprette video-on-demand-indhold og kombinerer avancerede video- og lydfunktioner med en enkel webgrænseflade. Her bruger vi igen Python Boto3 SDK til at oprette en MediaConvert job:
    ……
    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"])

Forudsætninger

Før du går i gang, skal du have følgende forudsætninger:

Implementer løsningen

Udfør følgende trin for at implementere løsningen ved hjælp af AWS CDK:

  1. Klon Repository:
    git clone https://github.com/aws-samples/localize-content-using-aws-ml-services.git 

  2. For at sikre, at AWS CDK er bootstrappet, kør kommandoen cdk bootstrap fra roden af ​​depotet:
    $ 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. Skift arbejdsbiblioteket til roden af ​​depotet og kør følgende kommando:
    cdk deploy

Som standard er mållydindstillingerne sat til amerikansk spansk (es-US). Hvis du planlægger at teste det med et andet målsprog, skal du bruge følgende kommando:

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

Processen tager et par minutter at fuldføre, hvorefter den viser et link, som du kan bruge til at se målvideofilen med den oversatte lyd og oversatte undertekster.

Lokaliser indhold til flere sprog ved hjælp af AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Test løsningen

For at teste denne løsning brugte vi en lille del af følgende AWS re: Invent 2017-video fra YouTube, hvor Amazon Transcribe først blev introduceret. Du kan også teste løsningen med din egen video. Originalsproget i vores testvideo er engelsk. Når du implementerer denne løsning, kan du angive mållydindstillingerne, eller du kan bruge standardindstillingerne for mållyd, som bruger spansk til at generere lyd og undertekster. Løsningen skaber en S3 bucket, som kan bruges til at uploade videofilen til.

  1. På Amazon S3-konsollen skal du navigere til bøtten PollyBlogBucket.
    Lokaliser indhold til flere sprog ved hjælp af AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
  2. Vælg spanden, naviger til /inputVideo mappe, og upload videofilen (løsningen er testet med videoer af typen mp4). På dette tidspunkt udløser en S3-hændelsesmeddelelse Lambda-funktionen, som starter tilstandsmaskinen.
  3. På Step Functions-konsollen skal du gå til tilstandsmaskinen (ProcessAudioWithSubtitles).
  4. Vælg en af ​​kørslen af ​​tilstandsmaskinen for at finde Grafinspektør.

Dette viser kørselsresultaterne for hver stat. Trinfunktioner-arbejdsgangen tager et par minutter at fuldføre, hvorefter du kan kontrollere, om alle trinene er gennemført.

Lokaliser indhold til flere sprog ved hjælp af AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Gennemgå outputtet

For at gennemgå outputtet skal du åbne Amazon S3-konsollen og kontrollere, om lydfilen (.mp3) og talemærkefilen (.marks) er gemt i S3-bøtten under <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

Lokaliser indhold til flere sprog ved hjælp af AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Følgende er et eksempel på talemærkefilen, der er genereret fra den oversatte tekst:

{"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"}

I dette output er hver del af teksten opdelt i form af talemærker:

  • tid – Tidsstemplet i millisekunder fra begyndelsen af ​​den tilsvarende lydstrøm
  • typen – Typen af ​​talemærke (sætning, ord, viseme eller SSML)
  • starte – Forskydningen i bytes (ikke tegn) for objektets start i inputteksten (ikke inklusive visemærker)
  • ende – Forskydningen i bytes (ikke tegn) af objektets ende i inputteksten (ikke inklusive visemærker)
  • værdi – Individuelle ord i sætningen

Den genererede undertekstfil skrives tilbage til S3-bøtten. Du kan finde filen under <ROOT_S3_BUCKET>/<UID>/subtitlesOutput/. Undersøg undertekstfilen; indholdet skal ligne følgende tekst:

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

Efter at undertekstfilen og lydfilen er genereret, oprettes den endelige kildevideofil ved hjælp af MediaConvert. Tjek MediaConvert-konsollen for at kontrollere, om jobstatus er COMPLETE.

Når MediaConvert-jobbet er færdigt, genereres den endelige videofil og gemmes tilbage i S3-bøtten, som kan findes under <ROOT_S3_BUCKET>/<UID>/convertedAV/.

Som en del af denne implementering distribueres den endelige video gennem en Amazon CloudFront (CDN) link og vises i terminalen eller i AWS CloudFormation konsol.

Åbn URL'en i en browser for at se den originale video med yderligere muligheder for lyd og undertekster. Du kan kontrollere, at den oversatte lyd og undertekster er synkroniseret.

Konklusion

I dette indlæg diskuterede vi, hvordan man opretter nye sprogversioner af videofiler uden behov for manuel indgriben. Indholdsskabere kan bruge denne proces til at synkronisere lyden og underteksterne på deres videoer og nå ud til et globalt publikum.

Du kan nemt integrere denne tilgang i dine egne produktionspipelines for at håndtere store mængder og skalere efter dine behov. Amazon Polly bruger Neural TTS (NTTS) at producere naturlige og menneskelignende tekst-til-tale stemmer. Det understøtter også generere tale fra SSML, som giver dig yderligere kontrol over, hvordan Amazon Polly genererer tale ud fra den angivne tekst. Amazon Polly giver også en mange forskellige stemmer på flere sprog for at understøtte dine behov.

Kom godt i gang med AWS maskinlæringstjenester ved at besøge Produkt side, eller henvise til Amazon Machine Learning Solutions Lab side, hvor du kan samarbejde med eksperter for at bringe maskinlæringsløsninger til din organisation.

Yderligere ressourcer

For mere information om de tjenester, der bruges i denne løsning, henvises til følgende:


Om forfatterne

Lokaliser indhold til flere sprog ved hjælp af AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Lodret søgning. Ai. Reagan Rosario arbejder som løsningsarkitekt hos AWS med fokus på uddannelsesteknologivirksomheder. Han elsker at hjælpe kunder med at bygge skalerbare, højst tilgængelige og sikre løsninger i AWS Cloud. Han har mere end ti års erfaring med at arbejde i en række teknologiroller med fokus på software engineering og arkitektur.

Lokaliser indhold til flere sprog ved hjælp af AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Anil Kodali er en løsningsarkitekt med Amazon Web Services. Han arbejder med AWS EdTech-kunder og vejleder dem med arkitektonisk bedste praksis til at migrere eksisterende arbejdsbelastninger til skyen og designe nye arbejdsbelastninger med en cloud-first-tilgang. Før han kom til AWS, arbejdede han med store detailhandlere for at hjælpe dem med deres skymigreringer.

Lokaliser indhold til flere sprog ved hjælp af AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Prasanna Saraswathi Krishnan er en løsningsarkitekt med Amazon Web Services, der arbejder med EdTech-kunder. Han hjælper dem med at drive deres cloud-arkitektur og datastrategi ved hjælp af bedste praksis. Hans baggrund er i distribueret computing, big data analytics og data engineering. Han brænder for maskinlæring og naturlig sprogbehandling.

Tidsstempel:

Mere fra AWS maskinindlæring