Lokaliseer inhoud in meerdere talen met behulp van AWS machine learning-services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Lokaliseer inhoud in meerdere talen met behulp van AWS machine learning-services

In de afgelopen jaren hebben online onderwijsplatforms een toename gezien in de acceptatie van en een toename van de vraag naar op video gebaseerd leren, omdat het een effectief medium biedt om leerlingen te betrekken. Om uit te breiden naar internationale markten en een cultureel en taalkundig diverse bevolking aan te spreken, proberen bedrijven ook hun leeraanbod te diversifiรซren door inhoud in meerdere talen te lokaliseren. Deze bedrijven zijn op zoek naar betrouwbare en kosteneffectieve manieren om hun gebruiksscenario's voor lokalisatie op te lossen.

Het lokaliseren van inhoud omvat voornamelijk het vertalen van originele stemmen in nieuwe talen en het toevoegen van visuele hulpmiddelen zoals ondertitels. Traditioneel is dit proces onbetaalbaar, handmatig en kost het veel tijd, inclusief het werken met lokalisatiespecialisten. Met de kracht van AWS machine learning (ML)-services zoals: Amazon Transcribe, Amazon Vertalen en Amazon Polly, kunt u een levensvatbare en kosteneffectieve lokalisatieoplossing creรซren. Je kunt Amazon Transcribe gebruiken om een โ€‹โ€‹transcript van je bestaande audio- en videostreams te maken en dit transcript vervolgens in meerdere talen te vertalen met Amazon Translate. Vervolgens kunt u Amazon Polly, een tekst-naar-spraakservice, gebruiken om de vertaalde tekst om te zetten in natuurlijk klinkende menselijke spraak.

De volgende stap van lokalisatie is het toevoegen van ondertitels aan de inhoud, wat de toegankelijkheid en het begrip kan verbeteren en kijkers kan helpen de video's beter te begrijpen. Het maken van ondertitels op video-inhoud kan een uitdaging zijn omdat de vertaalde spraak niet overeenkomt met de oorspronkelijke spraaktiming. Deze synchronisatie tussen audio en ondertitels is een cruciale taak om te overwegen, omdat het het publiek kan loskoppelen van uw inhoud als ze niet synchroon lopen. Amazon Polly biedt een oplossing voor deze uitdaging door het inschakelen van spraaktekens, waarmee u een ondertitelingsbestand kunt maken dat kan worden gesynchroniseerd met de gegenereerde spraakuitvoer.

In dit bericht bespreken we een lokalisatieoplossing met AWS ML-services waarbij we een originele Engelse video gebruiken en deze naar het Spaans converteren. We richten ons ook op het gebruik van spraakmarkeringen om een โ€‹โ€‹gesynchroniseerd ondertitelbestand in het Spaans te maken.

Overzicht oplossingen

Het volgende diagram illustreert de oplossingsarchitectuur.

De oplossing neemt een videobestand en de doeltaalinstellingen als invoer en gebruikt Amazon Transcribe om een โ€‹โ€‹transcriptie van de video te maken. Vervolgens gebruiken we Amazon Translate om het transcript te vertalen naar de doeltaal. De vertaalde tekst wordt als input aan Amazon Polly geleverd om de audiostream en spraakmarkeringen in de doeltaal te genereren. Amazon Polly keert terug spraakmarkering uitvoer in een door regels gescheiden JSON-stream, die de velden bevat zoals tijd, type, begin, einde en waarde. De waarde kan variรซren afhankelijk van het type spraakmarkering dat in de invoer wordt gevraagd, zoals: SSML, viseem, woord of zin. Voor het doel van ons voorbeeld hebben we gevraagd om de spraakmarkeringstype as word. Met deze optie splitst Amazon Polly een zin op in de afzonderlijke woorden in de zin en hun begin- en eindtijden in de audiostream. Met deze metadata worden de spraakmarkeringen vervolgens verwerkt om de ondertitels te genereren voor de bijbehorende audiostream die wordt gegenereerd door Amazon Polly.

Ten slotte gebruiken we AWS Elementaire MediaConvert om de uiteindelijke video weer te geven met de vertaalde audio en bijbehorende ondertitels.

De volgende video toont het uiteindelijke resultaat van de oplossing:

AWS Step Functions-workflow

Wij gebruiken AWS Stap Functies om dit proces te orkestreren. De volgende afbeelding toont een overzicht op hoog niveau van de workflow Step Functions (sommige stappen zijn weggelaten uit het diagram voor meer duidelijkheid).

Lokaliseer inhoud in meerdere talen met behulp van AWS machine learning-services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

De workflowstappen zijn als volgt:

  1. Een gebruiker uploadt het bronvideobestand naar een Amazon eenvoudige opslagservice (Amazon S3) emmer.
  2. De S3-gebeurtenismelding triggert de AWS Lambda functie state_machine.py (niet weergegeven in het diagram), die de statusmachine Step Functions aanroept.
  3. De eerste stap, Audio transcriberen, roept de Lambda-functie op transcriberen.py, die Amazon Transcribe gebruikt om een โ€‹โ€‹transcript van de audio van de bronvideo te genereren.

De volgende voorbeeldcode laat zien hoe u een transcriptietaak maakt met de 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
)

Nadat de taak is voltooid, worden de uitvoerbestanden opgeslagen in de S3-bucket en gaat het proces verder met de volgende stap van het vertalen van de inhoud.

  1. De Transcriptie vertalen stap roept de Lambda-functie op vertalen.py die Amazon Translate gebruikt om het transcript naar de doeltaal te vertalen. Hier gebruiken we de synchrone/real-time vertaling met behulp van de vertalen_tekst functie:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    Synchrone vertaling heeft beperkingen op de documentgrootte die het kan vertalen; op het moment van schrijven is het ingesteld op 5,000 bytes. Overweeg voor grotere documentformaten een asynchrone route te gebruiken voor het maken van de taak met start_text_translation_job en de status controleren via description_text_translation_job.

  2. De volgende stap is een Step Functions Parallel state, waar we parallelle vertakkingen creรซren in onze toestandsmachine.
    1. In de eerste tak roepen we de Lambda-functie aan, de Lambda-functie genereer_polly_audio.py om onze Amazon Polly-audiostream te genereren:
      # 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']

      Hier gebruiken we de start_spraak_synthese_taak methode van de Amazon Polly Python SDK om de spraaksynthesetaak te activeren die de Amazon Polly-audio creรซert. We zetten de OutputFormat naar mp3, die Amazon Polly vertelt om een โ€‹โ€‹audiostream te genereren voor deze API-aanroep.

    2. In de tweede tak roepen we de Lambda-functie op generator_speech_marks.py om de uitvoer van spraakmarkeringen te genereren:
      ....
      # 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']

  • We gebruiken weer de start_spraak_synthese_taak methode maar specificeer OutputFormat naar json, die Amazon Polly vertelt om spraakmarkeringen te genereren voor deze API-aanroep.

In de volgende stap van de tweede tak roepen we de Lambda-functie op genereer_ondertitels.py, die de logica implementeert om een โ€‹โ€‹ondertitelbestand te genereren uit de uitvoer van spraakmarkeringen.

Het gebruikt de Python-module in het bestand webvtt_utils.py. Deze module heeft meerdere hulpprogramma's om het ondertitelbestand te maken; een dergelijke methode get_phrases_from_speechmarks is verantwoordelijk voor het ontleden van het bestand met spraakmarkeringen. De JSON-structuur voor spraakmarkeringen biedt alleen de starttijd voor elk afzonderlijk woord. Om de timing van de ondertiteling voor het SRT-bestand te creรซren, maken we eerst zinnen van ongeveer n (waarbij n=10) woorden uit de lijst met woorden in het bestand met spraakmarkeringen. Vervolgens schrijven we ze in het SRT-bestandsformaat, waarbij we de starttijd nemen vanaf het eerste woord in de zin, en voor de eindtijd gebruiken we de starttijd van het (n+1) woord en trekken dit af met 1 om de gesequenteerde invoer te maken . De volgende functie maakt de zinnen ter voorbereiding op het schrijven naar het SRT-bestand:

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. De laatste stap, Media Convert, roept de Lambda-functie op create_mediaconvert_job.py om de audiostream van Amazon Polly en het ondertitelbestand te combineren met het bronvideobestand om het uiteindelijke uitvoerbestand te genereren, dat vervolgens wordt opgeslagen in een S3-bucket. Deze stap gebruikt MediaConvert, een op bestanden gebaseerde videotranscoderingsservice met functies van uitzendkwaliteit. Hiermee kunt u eenvoudig video-on-demand inhoud maken en geavanceerde video- en audiomogelijkheden combineren met een eenvoudige webinterface. Ook hier gebruiken we de Python Boto3 SDK om een โ€‹โ€‹te maken MediaConvert functie:
    โ€ฆโ€ฆ
    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"])

Voorwaarden

Voordat u aan de slag gaat, moet u aan de volgende vereisten voldoen:

Implementeer de oplossing

Voer de volgende stappen uit om de oplossing te implementeren met behulp van de AWS CDK:

  1. Kloon het bewaarplaats:
    git clone https://github.com/aws-samples/localize-content-using-aws-ml-services.git 

  2. Om er zeker van te zijn dat de AWS CDK is: bootstrap, voer de opdracht uit cdk bootstrap vanuit de root van de 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. Wijzig de werkmap naar de hoofdmap van de repository en voer de volgende opdracht uit:
    cdk deploy

Standaard zijn de doelaudio-instellingen ingesteld op Amerikaans Spaans (es-US). Als u van plan bent om het met een andere doeltaal te testen, gebruikt u de volgende opdracht:

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

Het proces duurt een paar minuten, waarna een link wordt weergegeven die u kunt gebruiken om het doelvideobestand met de vertaalde audio en vertaalde ondertitels te bekijken.

Lokaliseer inhoud in meerdere talen met behulp van AWS machine learning-services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Test de oplossing

Om deze oplossing te testen, hebben we een klein deel van het volgende gebruikt: AWS re:Invent 2017-video van YouTube, waar Amazon Transcribe voor het eerst werd geรฏntroduceerd. Je kunt de oplossing ook testen met je eigen video. De originele taal van onze testvideo is Engels. Wanneer u deze oplossing implementeert, kunt u de doelaudio-instellingen specificeren of u kunt de standaard doelaudio-instellingen gebruiken, die Spaans gebruiken voor het genereren van audio en ondertitels. De oplossing creรซert een S3-bucket die kan worden gebruikt om het videobestand naar te uploaden.

  1. Navigeer op de Amazon S3-console naar de bucket PollyBlogBucket.
    Lokaliseer inhoud in meerdere talen met behulp van AWS machine learning-services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  2. Kies de emmer, navigeer naar de /inputVideo directory, en upload het videobestand (de oplossing is getest met video's van het type mp4). Op dit punt activeert een S3-gebeurtenismelding de Lambda-functie, die de statusmachine start.
  3. Blader in de Step Functions-console naar de statusmachine (ProcessAudioWithSubtitles).
  4. Kies een van de runs van de staatsmachine om de . te lokaliseren Grafiek Inspecteur.

Dit toont de uitvoeringsresultaten voor elke staat. De workflow van Step Functions duurt enkele minuten, waarna u kunt controleren of alle stappen met succes zijn voltooid.

Lokaliseer inhoud in meerdere talen met behulp van AWS machine learning-services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Bekijk de uitvoer

Om de uitvoer te bekijken, opent u de Amazon S3-console en controleert u of het audiobestand (.mp3) en het spraakmarkeringsbestand (.marks) zijn opgeslagen in de S3-bucket onder <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

Lokaliseer inhoud in meerdere talen met behulp van AWS machine learning-services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Het volgende is een voorbeeld van het spraakmarkeringsbestand dat is gegenereerd op basis van de vertaalde 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"}

In deze uitvoer wordt elk deel van de tekst uitgesplitst in termen van spraakmarkeringen:

  • niet de tijd of โ€“ De tijdstempel in milliseconden vanaf het begin van de corresponderende audiostream
  • type dan: โ€“ Het type spraakmarkering (zin, woord, viseme of SSML)
  • begin โ€“ De offset in bytes (geen tekens) van het begin van het object in de invoertekst (exclusief viseme-markeringen)
  • einde โ€“ De offset in bytes (geen tekens) van het einde van het object in de invoertekst (exclusief viseme-markeringen)
  • waarde โ€“ Individuele woorden in de zin

Het gegenereerde ondertitelbestand wordt teruggeschreven naar de S3-bucket. U vindt het bestand onder <ROOT_S3_BUCKET>/<UID>/subtitlesOutput/. Inspecteer het ondertitelbestand; de inhoud moet lijken op de volgende 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

Nadat het ondertitelingsbestand en het audiobestand zijn gegenereerd, wordt het uiteindelijke bronvideobestand gemaakt met MediaConvert. Controleer de MediaConvert-console om te controleren of de taakstatus is COMPLETE.

Wanneer de MediaConvert-taak is voltooid, wordt het uiteindelijke videobestand gegenereerd en weer opgeslagen in de S3-bucket, die u kunt vinden onder <ROOT_S3_BUCKET>/<UID>/convertedAV/.

Als onderdeel van deze implementatie wordt de uiteindelijke video gedistribueerd via een Amazon CloudFront (CDN)-link en weergegeven in de terminal of in de AWS CloudFormatie console.

Open de URL in een browser om de originele video te bekijken met extra opties voor audio en ondertitels. U kunt controleren of de vertaalde audio en ondertitels synchroon lopen.

Conclusie

In dit bericht hebben we besproken hoe u nieuwe taalversies van videobestanden kunt maken zonder handmatige tussenkomst. Contentmakers kunnen dit proces gebruiken om de audio en ondertitels van hun video's te synchroniseren en een wereldwijd publiek te bereiken.

U kunt deze aanpak eenvoudig integreren in uw eigen productiepijplijnen om grote volumes te verwerken en op te schalen volgens uw behoeften. Amazon Polly gebruikt Neurale TTS (NTTS) om natuurlijke en mensachtige tekst-naar-spraak-stemmen te produceren. Het ondersteunt ook spraak genereren vanuit SSML, waarmee je extra controle hebt over hoe Amazon Polly spraak genereert uit de aangeleverde tekst. Amazon Polly biedt ook een verscheidenheid aan verschillende stemmen in meerdere talen om uw behoeften te ondersteunen.

Ga aan de slag met AWS machine learning-services door naar de: product pagina, of verwijs de Amazon Machine Learning Solutions-lab pagina waar u kunt samenwerken met experts om machine learning-oplossingen naar uw organisatie te brengen.

Extra middelen

Raadpleeg het volgende voor meer informatie over de services die in deze oplossing worden gebruikt:


Over de auteurs

Lokaliseer inhoud in meerdere talen met behulp van AWS machine learning-services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai. Reagan Rosario werkt als solution architect bij AWS met een focus op onderwijstechnologiebedrijven. Hij helpt klanten graag bij het bouwen van schaalbare, zeer beschikbare en veilige oplossingen in de AWS Cloud. Hij heeft meer dan tien jaar ervaring in verschillende technologische rollen, met een focus op software-engineering en architectuur.

Lokaliseer inhoud in meerdere talen met behulp van AWS machine learning-services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Anil Kodali is Solutions Architect bij Amazon Web Services. Hij werkt samen met AWS EdTech-klanten en begeleidt hen met best practices op het gebied van architectuur voor het migreren van bestaande workloads naar de cloud en het ontwerpen van nieuwe workloads met een cloud-first-aanpak. Voordat hij bij AWS kwam, werkte hij met grote retailers om hen te helpen met hun cloudmigraties.

Lokaliseer inhoud in meerdere talen met behulp van AWS machine learning-services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Prasanna Saraswathi Krishnan is Solutions Architect bij Amazon Web Services en werkt samen met EdTech-klanten. Hij helpt hen hun cloudarchitectuur en datastrategie te sturen met behulp van best practices. Zijn achtergrond ligt in gedistribueerde computing, big data-analyse en data-engineering. Hij is gepassioneerd door machine learning en natuurlijke taalverwerking.

Tijdstempel:

Meer van AWS-machine learning