Localizați conținutul în mai multe limbi folosind serviciile de învățare automată AWS PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Localizați conținutul în mai multe limbi folosind serviciile de învățare automată AWS

În ultimii câțiva ani, platformele de educație online au înregistrat o creștere a adoptării și o creștere a cererii pentru învățările bazate pe video, deoarece oferă un mediu eficient pentru a implica cursanții. Pentru a se extinde pe piețele internaționale și a se adresa unei populații diverse din punct de vedere cultural și lingvistic, companiile caută, de asemenea, să-și diversifice ofertele de învățare prin localizarea conținutului în mai multe limbi. Aceste companii caută modalități fiabile și rentabile de a-și rezolva cazurile de utilizare a localizării.

Localizarea conținutului include în principal traducerea vocilor originale în limbi noi și adăugarea de ajutoare vizuale, cum ar fi subtitrări. În mod tradițional, acest proces este prohibitiv, manual și necesită mult timp, inclusiv lucrul cu specialiști în localizare. Cu puterea serviciilor de învățare automată (ML) AWS, cum ar fi Transcriere Amazon, Traducerea Amazon, și Amazon Polly, puteți crea o soluție de localizare viabilă și rentabilă. Puteți folosi Amazon Transcribe pentru a crea o transcriere a fluxurilor audio și video existente și apoi traduceți această transcriere în mai multe limbi folosind Amazon Translate. Puteți utiliza apoi Amazon Polly, un serviciu de conversie text în vorbire, pentru a converti textul tradus în vorbire umană cu sunet natural.

Următorul pas al localizării este adăugarea de subtitrări la conținut, ceea ce poate îmbunătăți accesibilitatea și înțelegerea și poate ajuta spectatorii să înțeleagă mai bine videoclipurile. Crearea de subtitrări pe conținut video poate fi dificilă, deoarece discursul tradus nu se potrivește cu timpul original al vorbirii. Această sincronizare între audio și subtitrări este o sarcină critică de luat în considerare, deoarece ar putea deconecta publicul de conținutul tău dacă nu este sincronizat. Amazon Polly oferă o soluție la această provocare prin activare mărci de vorbire, pe care îl puteți folosi pentru a crea un fișier de subtitrare care poate fi sincronizat cu ieșirea de vorbire generată.

În această postare, trecem în revistă o soluție de localizare care utilizează serviciile AWS ML în care folosim un videoclip original în limba engleză și îl convertim în spaniolă. De asemenea, ne concentrăm pe utilizarea semnelor de vorbire pentru a crea un fișier de subtitrare sincronizat în spaniolă.

Prezentare generală a soluțiilor

Următoarea diagramă ilustrează arhitectura soluției.

Soluția preia un fișier video și setările limbii țintă ca intrare și utilizează Amazon Transcribe pentru a crea o transcriere a videoclipului. Apoi folosim Amazon Translate pentru a traduce transcrierea în limba țintă. Textul tradus este furnizat ca intrare către Amazon Polly pentru a genera fluxul audio și semnele de vorbire în limba țintă. Amazon Polly revine ieșire semn de vorbire într-un flux JSON delimitat de linii, care conține câmpuri precum oră, tip, început, sfârșit și valoare. Valoarea poate varia în funcție de tipul de semn de vorbire solicitat în intrare, cum ar fi SSML, visem, cuvânt sau propoziție. În scopul exemplului nostru, am solicitat tipul semnului de vorbire as word. Cu această opțiune, Amazon Polly împarte o propoziție în cuvintele sale individuale din propoziție și orele de început și de sfârșit în fluxul audio. Cu aceste metadate, semnele de vorbire sunt apoi procesate pentru a genera subtitrări pentru fluxul audio corespunzător generat de Amazon Polly.

În cele din urmă, folosim AWS Elemental MediaConvert pentru a reda videoclipul final cu audio tradus și subtitrările corespunzătoare.

Următorul videoclip demonstrează rezultatul final al soluției:

Flux de lucru AWS Step Functions

Noi folosim Funcții pas AWS pentru a orchestra acest proces. Următoarea figură prezintă o vedere la nivel înalt a fluxului de lucru Funcții de pas (unii pași sunt omiși din diagramă pentru o mai bună claritate).

Localizați conținutul în mai multe limbi folosind serviciile de învățare automată AWS PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Pașii fluxului de lucru sunt următorii:

  1. Un utilizator încarcă fișierul video sursă într-un Serviciul Amazon de stocare simplă Găleată (Amazon S3)
  2. Notificare de eveniment S3 declanșează AWS Lambdas funcţie state_machine.py (nu este prezentat în diagramă), care invocă mașina de stări Step Functions.
  3. Primul pas, Transcrie audio, invocă funcția Lambda transcrie.py, care utilizează Amazon Transcribe pentru a genera o transcriere a sunetului din videoclipul sursă.

Următorul exemplu de cod demonstrează cum să creați o lucrare de transcriere folosind 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
)

După finalizarea lucrării, fișierele de ieșire sunt salvate în compartimentul S3 și procesul continuă cu următorul pas de traducere a conținutului.

  1. Traduceți transcrierea pasul invocă funcția Lambda traduce.py care utilizează Amazon Translate pentru a traduce transcrierea în limba țintă. Aici, folosim traducerea sincronă/în timp real folosind traduce_text funcţie:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    Traducerea sincronă are limite în ceea ce privește dimensiunea documentului pe care îl poate traduce; în momentul scrierii acestei, este setat la 5,000 de octeți. Pentru documente de dimensiuni mai mari, luați în considerare utilizarea unei rute asincrone de creare a sarcinii folosind start_text_translation_job și verificarea stării prin descrie_text_traducere_post.

  2. Următorul pas este un pas Funcții Paralel stat, unde creăm ramuri paralele în mașina noastră de stat.
    1. În prima ramură, invocăm funcția Lambda funcția Lambda generate_polly_audio.py pentru a genera fluxul nostru 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']

      Aici folosim începe_sarcina_de_sinteză_vorbirii metoda Amazon Polly Python SDK pentru a declanșa sarcina de sinteză a vorbirii care creează audio Amazon Polly. Am stabilit OutputFormat la mp3, care îi spune lui Amazon Polly să genereze un flux audio pentru acest apel API.

    2. În a doua ramură, invocăm funcția Lambda generate_speech_marks.py pentru a genera ieșirea semnelor de vorbire:
      ....
      # 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']

  • Folosim din nou începe_sarcina_de_sinteză_vorbirii metoda dar specificați OutputFormat la json, care îi spune lui Amazon Polly să genereze semne de vorbire pentru acest apel API.

În pasul următor al celei de-a doua ramuri, invocăm funcția Lambda generate_subtitles.py, care implementează logica pentru a genera un fișier de subtitrare din ieșirea semnelor de vorbire.

Utilizează modulul Python din fișier webvtt_utils.py. Acest modul are mai multe funcții utilitare pentru a crea fișierul de subtitrare; o astfel de metodă get_phrases_from_speechmarks este responsabil pentru analizarea fișierului semnelor de vorbire. Structura JSON a semnelor de vorbire oferă doar ora de început pentru fiecare cuvânt în mod individual. Pentru a crea sincronizarea de subtitrare necesară pentru fișierul SRT, mai întâi creăm fraze de aproximativ n (unde n=10) cuvinte din lista de cuvinte din fișierul cu semne de vorbire. Apoi le scriem în formatul de fișier SRT, luând ora de început de la primul cuvânt din frază, iar pentru timpul de sfârșit folosim ora de început a cuvântului (n+1) și o scădem cu 1 pentru a crea intrarea secvențială. . Următoarea funcție creează frazele în pregătirea pentru scrierea lor în fișierul 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. Pasul final, Media Convert, invocă funcția Lambda create_mediaconvert_job.py pentru a combina fluxul audio de la Amazon Polly și fișierul de subtitrare cu fișierul video sursă pentru a genera fișierul de ieșire final, care este apoi stocat într-o găleată S3. Acest pas folosește MediaConvert, un serviciu de transcodare video bazat pe fișiere, cu caracteristici de calitate pentru difuzare. Vă permite să creați cu ușurință conținut video la cerere și combină capabilități video și audio avansate cu o interfață web simplă. Aici folosim din nou Python Boto3 SDK pentru a crea un MediaConvert loc de munca:
    ……
    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"])

Cerințe preliminare

Înainte de a începe, trebuie să aveți următoarele condiții preliminare:

Implementați soluția

Pentru a implementa soluția folosind AWS CDK, parcurgeți următorii pași:

  1. Clonați depozit:
    git clone https://github.com/aws-samples/localize-content-using-aws-ml-services.git 

  2. Pentru a vă asigura că AWS CDK este procesul de bootstrap, rulați comanda cdk bootstrap de la rădăcina depozitului:
    $ 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. Schimbați directorul de lucru la rădăcina depozitului și rulați următoarea comandă:
    cdk deploy

În mod implicit, setările audio țintă sunt setate la spaniolă americană (es-US). Dacă intenționați să-l testați cu o altă limbă țintă, utilizați următoarea comandă:

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

Procesul durează câteva minute pentru a se finaliza, după care afișează un link pe care îl puteți utiliza pentru a vizualiza fișierul video țintă cu audio tradus și subtitrări traduse.

Localizați conținutul în mai multe limbi folosind serviciile de învățare automată AWS PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Testați soluția

Pentru a testa această soluție, am folosit o mică parte din următoarele Videoclipul AWS re:Invent 2017 de pe YouTube, unde Amazon Transcribe a fost introdus pentru prima dată. De asemenea, puteți testa soluția cu propriul videoclip. Limba originală a videoclipului nostru de testare este engleza. Când implementați această soluție, puteți specifica setările audio țintă sau puteți utiliza setările audio țintă implicite, care utilizează limba spaniolă pentru generarea audio și subtitrări. Soluția creează o găleată S3 care poate fi folosită pentru a încărca fișierul video în.

  1. Pe consola Amazon S3, navigați la găleată PollyBlogBucket.
    Localizați conținutul în mai multe limbi folosind serviciile de învățare automată AWS PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  2. Alegeți găleata, navigați la /inputVideo director și încărcați fișierul video (soluția este testată cu videoclipuri de tip mp4). În acest moment, o notificare de eveniment S3 declanșează funcția Lambda, care pornește mașina de stare.
  3. Pe consola Step Functions, navigați la mașina de stări (ProcessAudioWithSubtitles).
  4. Alegeți una dintre rulajele mașinii de stat pentru a localiza Inspector grafic.

Aceasta arată rezultatele rulării pentru fiecare stare. Fluxul de lucru Step Functions durează câteva minute, după care puteți verifica dacă toți pașii au fost finalizați cu succes.

Localizați conținutul în mai multe limbi folosind serviciile de învățare automată AWS PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Examinați rezultatul

Pentru a examina rezultatul, deschideți consola Amazon S3 și verificați dacă fișierul audio (.mp3) și fișierul cu semne de vorbire (.marks) sunt stocate în compartimentul S3 sub <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

Localizați conținutul în mai multe limbi folosind serviciile de învățare automată AWS PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Următorul este un eșantion al fișierului cu semne de vorbire generat din textul tradus:

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

În această ieșire, fiecare parte a textului este împărțită în termeni de semne de vorbire:

  • timp – Marca temporală în milisecunde de la începutul fluxului audio corespunzător
  • tip – Tipul de semn de vorbire (propoziție, cuvânt, visem sau SSML)
  • Începe – Decalarea în octeți (nu caractere) a începutului obiectului în textul introdus (fără a include semnele de visem)
  • capăt – Decalajul în octeți (nu caractere) a sfârșitului obiectului în textul introdus (fără a include semnele de visem)
  • valoare – Cuvinte individuale din propoziție

Fișierul de subtitrare generat este scris înapoi în compartimentul S3. Puteți găsi fișierul sub <ROOT_S3_BUCKET>/<UID>/subtitlesOutput/. Inspectați fișierul de subtitrare; conținutul ar trebui să fie similar cu următorul text:

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

După ce fișierul de subtitrări și fișierul audio sunt generate, fișierul video sursă final este creat folosind MediaConvert. Verificați consola MediaConvert pentru a verifica dacă starea lucrării este COMPLETE.

Când lucrarea MediaConvert este finalizată, fișierul video final este generat și salvat înapoi în compartimentul S3, care poate fi găsit sub <ROOT_S3_BUCKET>/<UID>/convertedAV/.

Ca parte a acestei implementări, videoclipul final este distribuit printr-un Amazon CloudFront (CDN) și afișat în terminal sau în Formarea AWS Cloud consolă.

Deschideți adresa URL într-un browser pentru a vizualiza videoclipul original cu opțiuni suplimentare pentru audio și subtitrări. Puteți verifica dacă audio și subtitrările traduse sunt sincronizate.

Concluzie

În această postare, am discutat despre cum să creați versiuni noi în limbi ale fișierelor video fără a fi nevoie de intervenție manuală. Creatorii de conținut pot folosi acest proces pentru a sincroniza sunetul și subtitrările videoclipurilor lor și pentru a ajunge la un public global.

Puteți integra cu ușurință această abordare în propriile conducte de producție pentru a gestiona volume mari și scala în funcție de nevoile dvs. Amazon Polly folosește Neural TTS (NTTS) pentru a produce voci naturale și asemănătoare omului cu textul în vorbire. De asemenea, susține generarea de vorbire din SSML, care vă oferă un control suplimentar asupra modului în care Amazon Polly generează vorbirea din textul furnizat. Amazon Polly oferă, de asemenea, un varietate de voci diferite în mai multe limbi pentru a vă satisface nevoile.

Începeți cu serviciile de învățare automată AWS, vizitând pagina produsului, sau trimiteți Laboratorul de soluții Amazon Machine Learning Solutions pagină în care puteți colabora cu experți pentru a aduce soluții de învățare automată organizației dvs.

Resurse aditionale

Pentru mai multe informații despre serviciile utilizate în această soluție, consultați următoarele:


Despre autori

Localizați conținutul în mai multe limbi folosind serviciile de învățare automată AWS PlatoBlockchain Data Intelligence. Căutare verticală. Ai. Reagan Rosario lucrează ca arhitect de soluții la AWS, concentrându-se pe companiile de tehnologie educațională. Îi place să ajute clienții să construiască soluții scalabile, foarte disponibile și sigure în AWS Cloud. Are mai mult de un deceniu de experiență lucrând într-o varietate de roluri tehnologice, cu accent pe inginerie software și arhitectură.

Localizați conținutul în mai multe limbi folosind serviciile de învățare automată AWS PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Anil Kodali este arhitect de soluții cu Amazon Web Services. Lucrează cu clienții AWS EdTech, îndrumându-i cu cele mai bune practici arhitecturale pentru migrarea încărcăturilor de lucru existente în cloud și proiectând noi încărcături de lucru cu o abordare bazată pe cloud. Înainte de a se alătura AWS, a lucrat cu mari comercianți cu amănuntul pentru a-i ajuta în migrarea lor în cloud.

Localizați conținutul în mai multe limbi folosind serviciile de învățare automată AWS PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Prasanna Saraswathi Krishnan este un arhitect de soluții cu Amazon Web Services care lucrează cu clienții EdTech. El îi ajută să-și conducă arhitectura cloud și strategia de date folosind cele mai bune practici. Experiența sa este în calculul distribuit, analiza datelor mari și ingineria datelor. Este pasionat de învățarea automată și de procesarea limbajului natural.

Timestamp-ul:

Mai mult de la Învățare automată AWS