Lokaliser innhold til flere språk ved hjelp av AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Lokaliser innhold til flere språk ved hjelp av AWS maskinlæringstjenester

I løpet av de siste årene har nettbaserte utdanningsplattformer sett en økning i bruk av og en økning i etterspørselen etter videobasert læring fordi det tilbyr et effektivt medium for å engasjere elever. For å utvide til internasjonale markeder og adressere en kulturelt og språklig mangfoldig befolkning, ser bedrifter også på å diversifisere læringstilbudene sine ved å lokalisere innhold til flere språk. Disse virksomhetene leter etter pålitelige og kostnadseffektive måter å løse sine lokaliseringsbruk.

Lokalisering av innhold inkluderer hovedsakelig å oversette originale stemmer til nye språk og legge til visuelle hjelpemidler som undertekster. Tradisjonelt er denne prosessen uoverkommelig, manuell og tar mye tid, inkludert samarbeid med lokaliseringsspesialister. Med kraften til AWS maskinlæringstjenester (ML) som f.eks Amazon Transcribe, Amazon Oversettog Amazon Polly, kan du lage en levedyktig og kostnadseffektiv lokaliseringsløsning. Du kan bruke Amazon Transcribe til å lage en transkripsjon av dine eksisterende lyd- og videostrømmer, og deretter oversette denne transkripsjonen til flere språk ved hjelp av Amazon Translate. Du kan deretter bruke Amazon Polly, en tekst-til-tale-tjeneste, til å konvertere den oversatte teksten til naturlig klingende menneskelig tale.

Det neste trinnet med lokalisering er å legge til undertekster til innholdet, noe som kan forbedre tilgjengeligheten og forståelsen, og hjelpe seerne å forstå videoene bedre. Oppretting av undertekster på videoinnhold kan være utfordrende fordi den oversatte talen ikke samsvarer med den opprinnelige taletidspunktet. Denne synkroniseringen mellom lyd og undertekster er en kritisk oppgave å vurdere fordi den kan koble publikum fra innholdet ditt hvis de ikke er synkronisert. Amazon Polly tilbyr en løsning på denne utfordringen gjennom aktivering talemerker, som du kan bruke til å lage en undertekstfil som kan synkroniseres med den genererte taleutgangen.

I dette innlegget gjennomgår vi en lokaliseringsløsning som bruker AWS ML-tjenester der vi bruker en original engelsk video og konverterer den til spansk. Vi fokuserer også på å bruke talemerker for å lage en synkronisert undertekstfil på spansk.

Løsningsoversikt

Følgende diagram illustrerer løsningsarkitekturen.

Løsningen tar en videofil og målspråkinnstillingene som input og bruker Amazon Transcribe for å lage en transkripsjon av videoen. Vi bruker deretter Amazon Translate for å oversette transkripsjonen til målspråket. Den oversatte teksten er gitt som en input til Amazon Polly for å generere lydstrømmen og talemerker på målspråket. Amazon Polly kommer tilbake talemerkeutgang i en linjeavgrenset JSON-strøm, som inneholder feltene som tid, type, start, slutt og verdi. Verdien kan variere avhengig av typen talemerke som er forespurt i inngangen, for eksempel SSML, viseme, ord eller setning. For eksempelet vårt ba vi om type talemerke as word. Med dette alternativet deler Amazon Polly en setning inn i de enkelte ordene i setningen og start- og sluttid i lydstrømmen. Med disse metadataene blir talemerkene deretter behandlet for å generere undertekstene for den tilsvarende lydstrømmen generert av Amazon Polly.

Til slutt bruker vi AWS Elemental MediaConvert for å gjengi den endelige videoen med den oversatte lyden og tilhørende undertekster.

Følgende video viser det endelige resultatet av løsningen:

AWS trinnfunksjoner arbeidsflyt

Vi bruker AWS trinnfunksjoner å orkestrere denne prosessen. Den følgende figuren viser en visning på høyt nivå av arbeidsflyten for trinnfunksjoner (noen trinn er utelatt fra diagrammet for bedre klarhet).

Lokaliser innhold til flere språk ved hjelp av AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Arbeidsflyttrinnene er som følger:

  1. En bruker laster opp kildevideofilen til en Amazon enkel lagringstjeneste (Amazon S3) bøtte.
  2. De S3 hendelsesvarsling utløser AWS Lambda funksjon state_machine.py (ikke vist i diagrammet), som påkaller tilstandsmaskinen Step Functions.
  3. Det første steget, Transkribere lyd, påkaller Lambda-funksjonen transkribere.py, som bruker Amazon Transcribe til å generere en transkripsjon av lyden fra kildevideoen.

Følgende eksempelkode viser hvordan du oppretter en transkripsjonsjobb ved å bruke 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
)

Etter at jobben er fullført, lagres utdatafilene i S3-bøtten og prosessen fortsetter til neste trinn med å oversette innholdet.

  1. De Oversett transkripsjon trinn påkaller Lambda-funksjonen translate.py som bruker Amazon Translate til å oversette transkripsjonen til målspråket. Her bruker vi den synkrone/sanntidsoversettelsen ved å bruke oversett_tekst funksjon:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    Synkron oversettelse har begrensninger på dokumentstørrelsen den kan oversette; Når dette skrives, er det satt til 5,000 byte. For større dokumentstørrelser bør du vurdere å bruke en asynkron rute for å opprette jobben ved hjelp av start_text_translation_job og sjekke status via beskriv_tekstoversettelsesjobb.

  2. Det neste trinnet er et trinn funksjoner Parallel stat, hvor vi lager parallelle grener i vår statsmaskin.
    1. I den første grenen påkaller vi Lambda-funksjonen Lambda-funksjonen gener_polly_audio.py for å generere vår Amazon Polly-lydstrøm:
      # 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 bruker vi start_tale_syntese_oppgave metoden til Amazon Polly Python SDK for å utløse talesynteseoppgaven som lager Amazon Polly-lyden. Vi setter OutputFormat til mp3, som forteller Amazon Polly å generere en lydstrøm for dette API-kallet.

    2. I den andre grenen påkaller vi Lambda-funksjonen gener_speech_marks.py for å generere talemerker:
      ....
      # 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 bruker igjen start_tale_syntese_oppgave metode, men spesifiser OutputFormat til json, som forteller Amazon Polly å generere talemerker for dette API-kallet.

I neste trinn i den andre grenen påkaller vi Lambda-funksjonen gener_subtitles.py, som implementerer logikken for å generere en undertekstfil fra talemerkeutgangen.

Den bruker Python-modulen i filen webvtt_utils.py. Denne modulen har flere hjelpefunksjoner for å lage undertekstfilen; en slik metode get_phrases_from_speechmarks er ansvarlig for å analysere talemerkefilen. JSON-strukturen for talemerker gir bare starttiden for hvert ord individuelt. For å lage timingen for underteksten som kreves for SRT-filen, lager vi først setninger med omtrent n (hvor n=10) ord fra listen over ord i talemerkefilen. Deretter skriver vi dem inn i SRT-filformatet, tar starttiden fra det første ordet i frasen, og for slutttiden bruker vi starttiden til (n+1) ordet og trekker det fra med 1 for å lage den sekvenserte oppføringen . Følgende funksjon lager setningene som forberedelse til å 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 siste trinnet, Media Convert, påkaller Lambda-funksjonen create_mediaconvert_job.py å kombinere lydstrømmen fra Amazon Polly og undertekstfilen med kildevideofilen for å generere den endelige utdatafilen, som deretter lagres i en S3-bøtte. Dette trinnet bruker MediaConvert, en filbasert videotranskodingstjeneste med kringkastingskvalitetsfunksjoner. Den lar deg enkelt lage video-on-demand-innhold og kombinerer avanserte video- og lydfunksjoner med et enkelt nettgrensesnitt. Her bruker vi Python igjen Boto3 SDK for å lage en MediaConvert jobb:
    ……
    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"])

Forutsetninger

Før du begynner, må du ha følgende forutsetninger:

Distribuere løsningen

For å distribuere løsningen ved å bruke AWS CDK, fullfør følgende trinn:

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

  2. For å sikre at AWS CDK er bootstrapped, kjør kommandoen cdk bootstrap fra roten til 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. Endre arbeidskatalogen til roten til depotet og kjør følgende kommando:
    cdk deploy

Som standard er mållydinnstillingene satt til amerikansk spansk (es-US). Hvis du planlegger å teste det med et annet målspråk, bruk følgende kommando:

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

Prosessen tar noen minutter å fullføre, hvoretter den viser en lenke som du kan bruke til å se målvideofilen med den oversatte lyden og oversatte undertekstene.

Lokaliser innhold til flere språk ved hjelp av AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Test løsningen

For å teste denne løsningen brukte vi en liten del av følgende AWS re:Invent 2017-video fra YouTube, hvor Amazon Transcribe først ble introdusert. Du kan også teste løsningen med din egen video. Originalspråket til testvideoen vår er engelsk. Når du distribuerer denne løsningen, kan du spesifisere mållydinnstillingene eller du kan bruke standard mållydinnstillingene, som bruker spansk for å generere lyd og undertekster. Løsningen lager en S3-bøtte som kan brukes til å laste opp videofilen til.

  1. Naviger til bøtta på Amazon S3-konsollen PollyBlogBucket.
    Lokaliser innhold til flere språk ved hjelp av AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.
  2. Velg bøtte, naviger til /inputVideo katalogen, og last opp videofilen (løsningen er testet med videoer av typen mp4). På dette tidspunktet utløser et S3-hendelsesvarsel Lambda-funksjonen, som starter tilstandsmaskinen.
  3. På Step Functions-konsollen, bla til tilstandsmaskinen (ProcessAudioWithSubtitles).
  4. Velg en av kjøringene til tilstandsmaskinen for å finne Grafinspektør.

Dette viser kjøreresultatene for hver stat. Arbeidsflyten for trinnfunksjoner tar noen minutter å fullføre, og deretter kan du bekrefte om alle trinnene er fullført.

Lokaliser innhold til flere språk ved hjelp av AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Gjennomgå utgangen

For å se utdataene, åpne Amazon S3-konsollen og sjekk om lydfilen (.mp3) og talemerkefilen (.marks) er lagret i S3-bøtten under <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

Lokaliser innhold til flere språk ved hjelp av AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Følgende er et eksempel på talemerkefilen generert fra den oversatte teksten:

{"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 denne utgangen er hver del av teksten delt ut i form av talemerker:

  • tid – Tidsstemplet i millisekunder fra begynnelsen av den tilsvarende lydstrømmen
  • typen – Type talemerke (setning, ord, viseme eller SSML)
  • Begynn – Forskyvningen i byte (ikke tegn) for starten av objektet i inndatateksten (ikke inkludert visemerker)
  • slutt – Forskyvningen i byte (ikke tegn) av objektets ende i inndatateksten (ikke inkludert visemerker)
  • verdi – Enkeltord i setningen

Den genererte undertekstfilen skrives tilbake til S3-bøtten. Du finner filen under <ROOT_S3_BUCKET>/<UID>/subtitlesOutput/. Inspiser undertekstfilen; innholdet skal ligne på 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

Etter at undertekstfilen og lydfilen er generert, opprettes den endelige kildevideofilen ved hjelp av MediaConvert. Sjekk MediaConvert-konsollen for å bekrefte om jobbstatusen er COMPLETE.

Når MediaConvert-jobben er fullført, genereres den endelige videofilen og lagres tilbake i S3-bøtten, som du finner under <ROOT_S3_BUCKET>/<UID>/convertedAV/.

Som en del av denne distribusjonen distribueres den endelige videoen gjennom en Amazon CloudFront (CDN)-koblingen og vises i terminalen eller i AWS skyformasjon konsollen.

Åpne URL-en i en nettleser for å se den originale videoen med tilleggsalternativer for lyd og undertekster. Du kan bekrefte at den oversatte lyden og undertekstene er synkronisert.

konklusjonen

I dette innlegget diskuterte vi hvordan du lager nye språkversjoner av videofiler uten behov for manuell intervensjon. Innholdsskapere kan bruke denne prosessen til å synkronisere lyden og undertekstene til videoene sine og nå et globalt publikum.

Du kan enkelt integrere denne tilnærmingen i dine egne produksjonsrørledninger for å håndtere store volumer og skalere i henhold til dine behov. Amazon Polly bruker Nevrale TTS (NTTS) å produsere naturlige og menneskelignende tekst-til-tale stemmer. Den støtter også generere tale fra SSML, som gir deg ekstra kontroll over hvordan Amazon Polly genererer tale fra den oppgitte teksten. Amazon Polly gir også en en rekke forskjellige stemmer på flere språk for å støtte dine behov.

Kom i gang med AWS maskinlæringstjenester ved å besøke produktside, eller henvise til Amazon Machine Learning Solutions Lab side hvor du kan samarbeide med eksperter for å bringe maskinlæringsløsninger til organisasjonen din.

Tilleggsressurser

For mer informasjon om tjenestene som brukes i denne løsningen, se følgende:


Om forfatterne

Lokaliser innhold til flere språk ved hjelp av AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Vertikalt søk. Ai. Reagan Rosario jobber som løsningsarkitekt i AWS med fokus på utdanningsteknologiselskaper. Han elsker å hjelpe kunder med å bygge skalerbare, svært tilgjengelige og sikre løsninger i AWS Cloud. Han har mer enn ti års erfaring med å jobbe i en rekke teknologiroller, med fokus på programvareteknikk og arkitektur.

Lokaliser innhold til flere språk ved hjelp av AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Anil Kodali er en løsningsarkitekt med Amazon Web Services. Han jobber med AWS EdTech-kunder, veileder dem med arkitektonisk beste praksis for å migrere eksisterende arbeidsbelastninger til skyen og utforme nye arbeidsbelastninger med en sky-først-tilnærming. Før han begynte i AWS, jobbet han med store forhandlere for å hjelpe dem med skymigreringene deres.

Lokaliser innhold til flere språk ved hjelp av AWS maskinlæringstjenester PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Prasanna Saraswathi Krishnan er en løsningsarkitekt med Amazon Web Services som jobber med EdTech-kunder. Han hjelper dem å drive skyarkitekturen og datastrategien deres ved å bruke beste praksis. Hans bakgrunn er innen distribuert databehandling, big data-analyse og datateknikk. Han brenner for maskinlæring og naturlig språkbehandling.

Tidstempel:

Mer fra AWS maskinlæring