Lokalisieren Sie Inhalte in mehreren Sprachen mithilfe der AWS-Dienste für maschinelles Lernen PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Lokalisieren Sie Inhalte mithilfe von maschinellen Lerndiensten von AWS in mehrere Sprachen

In den letzten Jahren haben Online-Bildungsplattformen eine zunehmende Akzeptanz und einen Anstieg der Nachfrage nach videobasiertem Lernen erlebt, da es ein effektives Medium zur Einbindung von Lernenden bietet. Um auf internationale Märkte zu expandieren und eine kulturell und sprachlich vielfältige Bevölkerung anzusprechen, versuchen Unternehmen auch, ihre Lernangebote zu diversifizieren, indem sie Inhalte in mehrere Sprachen lokalisieren. Diese Unternehmen suchen nach zuverlässigen und kostengünstigen Möglichkeiten, um ihre Anwendungsfälle für die Lokalisierung zu lösen.

Das Lokalisieren von Inhalten umfasst hauptsächlich das Übersetzen von Originalstimmen in neue Sprachen und das Hinzufügen von visuellen Hilfsmitteln wie Untertiteln. Traditionell ist dieser Prozess unerschwinglich, manuell und nimmt viel Zeit in Anspruch, einschließlich der Zusammenarbeit mit Lokalisierungsspezialisten. Mit der Leistungsfähigkeit von AWS-Diensten für maschinelles Lernen (ML) wie z Amazon Transcribe, Amazon Übersetzen und Amazonas Pollykönnen Sie eine praktikable und kostengünstige Lokalisierungslösung erstellen. Sie können Amazon Transcribe verwenden, um eine Abschrift Ihrer vorhandenen Audio- und Videostreams zu erstellen und diese Abschrift dann mit Amazon Translate in mehrere Sprachen zu übersetzen. Sie können dann Amazon Polly, einen Text-zu-Sprache-Dienst, verwenden, um den übersetzten Text in natürlich klingende menschliche Sprache umzuwandeln.

Der nächste Schritt der Lokalisierung besteht darin, den Inhalten Untertitel hinzuzufügen, die die Zugänglichkeit und das Verständnis verbessern und den Zuschauern helfen können, die Videos besser zu verstehen. Das Erstellen von Untertiteln für Videoinhalte kann eine Herausforderung darstellen, da die übersetzte Sprache nicht mit dem ursprünglichen Sprachtiming übereinstimmt. Diese Synchronisierung zwischen Audio und Untertiteln ist eine wichtige Aufgabe, die berücksichtigt werden muss, da sie das Publikum von Ihren Inhalten trennen könnte, wenn sie nicht synchron sind. Amazon Polly bietet eine Lösung für diese Herausforderung, indem es aktiviert wird Anführungszeichen, mit der Sie eine Untertiteldatei erstellen können, die mit der generierten Sprachausgabe synchronisiert werden kann.

In diesem Beitrag überprüfen wir eine Lokalisierungslösung mit AWS ML-Services, bei der wir ein englisches Originalvideo verwenden und es ins Spanische konvertieren. Wir konzentrieren uns auch auf die Verwendung von Sprachzeichen, um eine synchronisierte Untertiteldatei auf Spanisch zu erstellen.

Lösungsüberblick

Das folgende Diagramm zeigt die Lösungsarchitektur.

Die Lösung nimmt eine Videodatei und die Einstellungen der Zielsprache als Eingabe und verwendet Amazon Transcribe, um eine Transkription des Videos zu erstellen. Wir verwenden dann Amazon Translate, um das Transkript in die Zielsprache zu übersetzen. Der übersetzte Text wird als Eingabe für Amazon Polly bereitgestellt, um den Audiostream und Sprachzeichen in der Zielsprache zu generieren. Amazon Polly kehrt zurück Sprachzeichenausgabe in einem durch Zeilen getrennten JSON-Stream, der die Felder wie Zeit, Typ, Start, Ende und Wert enthält. Der Wert kann je nach Art der in der Eingabe angeforderten Sprachmarkierung variieren, z SSML, visem, Wort oder Satz. Für unser Beispiel haben wir die angefordert Art der Sprachmarke as word. Mit dieser Option zerlegt Amazon Polly einen Satz in seine einzelnen Wörter im Satz und deren Start- und Endzeit im Audiostream. Mit diesen Metadaten werden die Sprachmarken dann verarbeitet, um die Untertitel für den entsprechenden von Amazon Polly generierten Audiostream zu generieren.

Schließlich verwenden wir AWS Elemental MediaConvert um das endgültige Video mit dem übersetzten Audio und den entsprechenden Untertiteln zu rendern.

Das folgende Video zeigt das Endergebnis der Lösung:

Workflow für AWS-Schrittfunktionen

Wir verwenden AWS Step-Funktionen diesen Prozess zu orchestrieren. Die folgende Abbildung zeigt eine allgemeine Ansicht des Step Functions-Workflows (einige Schritte sind zur besseren Übersichtlichkeit aus dem Diagramm weggelassen).

Lokalisieren Sie Inhalte in mehreren Sprachen mithilfe der AWS-Dienste für maschinelles Lernen PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Die Arbeitsschritte sind wie folgt:

  1. Ein Benutzer lädt die Quellvideodatei in eine hoch Amazon Simple Storage-Service (Amazon S3) Eimer.
  2. Das S3-Ereignisbenachrichtigung löst das aus AWS Lambda Funktion state_machine.py (in der Abbildung nicht gezeigt), die die Step Functions-Zustandsmaschine aufruft.
  3. Der erste Schritt, Audio transkribieren, ruft die Lambda-Funktion auf transkribieren.py, das Amazon Transcribe verwendet, um eine Transkription des Audios aus dem Quellvideo zu erstellen.

Der folgende Beispielcode zeigt, wie Sie einen Transkriptionsauftrag mit Amazon Transcribe erstellen 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
)

Nachdem der Job abgeschlossen ist, werden die Ausgabedateien im S3-Bucket gespeichert und der Prozess fährt mit dem nächsten Schritt der Übersetzung des Inhalts fort.

  1. Das Transkription übersetzen Schritt ruft die Lambda-Funktion auf Translate.py die Amazon Translate verwendet, um das Transkript in die Zielsprache zu übersetzen. Hier verwenden wir die Synchron-/Echtzeit-Übersetzung mit der Translate_text Funktion:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    Die synchrone Übersetzung hat Beschränkungen hinsichtlich der Dokumentgröße, die sie übersetzen kann; Während ich dies schreibe, ist es auf 5,000 Bytes eingestellt. Erwägen Sie bei größeren Dokumentgrößen die Verwendung einer asynchronen Route zum Erstellen des Auftrags mit start_text_translation_job und prüfen Sie den Status über description_text_translation_job.

  2. Der nächste Schritt ist eine Schrittfunktion Parallel state, wo wir parallele Verzweigungen in unserer Zustandsmaschine erstellen.
    1. Im ersten Zweig rufen wir die Lambda-Funktion auf die Lambda-Funktion generate_polly_audio.py So generieren Sie unseren Amazon Polly-Audiostream:
      # 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 verwenden wir die start_speech_synthesize_task -Methode des Amazon Polly Python SDK zum Auslösen der Sprachsyntheseaufgabe, die das Amazon Polly-Audio erstellt. Wir setzen die OutputFormat zu mp3, die Amazon Polly anweist, einen Audiostream für diesen API-Aufruf zu generieren.

    2. Im zweiten Zweig rufen wir die Lambda-Funktion auf generic_speech_marks.py So erzeugen Sie die Ausgabe von Sprachzeichen:
      ....
      # 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']

  • Wir verwenden wieder die start_speech_synthesize_task Methode, sondern spezifizieren OutputFormat zu json, die Amazon Polly anweist, Sprachmarkierungen für diesen API-Aufruf zu generieren.

Im nächsten Schritt des zweiten Zweigs rufen wir die Lambda-Funktion auf generieren_subtitles.py, die die Logik zum Generieren einer Untertiteldatei aus der Ausgabe der Sprachzeichen implementiert.

Es verwendet das Python-Modul in der Datei webvtt_utils.py. Dieses Modul verfügt über mehrere Hilfsfunktionen zum Erstellen der Untertiteldatei; eine solche Methode get_phrases_from_speechmarks ist für das Parsen der Sprachmarkendatei verantwortlich. Die Sprachmarken-JSON-Struktur stellt nur die Startzeit für jedes Wort einzeln bereit. Um das für die SRT-Datei erforderliche Untertitel-Timing zu erstellen, erstellen wir zunächst Sätze aus etwa n (wobei n = 10) Wörtern aus der Wortliste in der Sprachmarkendatei. Dann schreiben wir sie in das SRT-Dateiformat, wobei wir die Startzeit vom ersten Wort in der Phrase nehmen, und für die Endzeit verwenden wir die Startzeit des (n+1) Wortes und subtrahieren sie um 1, um den sequenzierten Eintrag zu erstellen . Die folgende Funktion erstellt die Phrasen in Vorbereitung auf das Schreiben in die SRT-Datei:

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. Der letzte Schritt, Medien konvertieren, ruft die Lambda-Funktion auf create_mediaconvert_job.py um den Audiostream von Amazon Polly und die Untertiteldatei mit der Quellvideodatei zu kombinieren, um die endgültige Ausgabedatei zu generieren, die dann in einem S3-Bucket gespeichert wird. Dieser Schritt verwendet MediaConvert, ein dateibasierter Videotranscodierungsdienst mit Funktionen in Broadcast-Qualität. Es ermöglicht Ihnen die einfache Erstellung von Video-on-Demand-Inhalten und kombiniert erweiterte Video- und Audiofunktionen mit einer einfachen Webschnittstelle. Auch hier verwenden wir Python Boto3 SDK zum Erstellen eines 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"])

Voraussetzungen:

Bevor Sie beginnen, müssen Sie die folgenden Voraussetzungen erfüllen:

Stellen Sie die Lösung bereit

Führen Sie die folgenden Schritte aus, um die Lösung mithilfe des AWS CDK bereitzustellen:

  1. Klonen Sie die Quelle:
    git clone https://github.com/aws-samples/localize-content-using-aws-ml-services.git 

  2. Um sicherzustellen, dass das AWS CDK ist bootstrapped, führe den Befehl aus cdk bootstrap aus dem Stammverzeichnis des Repositorys:
    $ 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. Ändern Sie das Arbeitsverzeichnis in das Stammverzeichnis des Repositorys und führen Sie den folgenden Befehl aus:
    cdk deploy

Standardmäßig sind die Zielaudioeinstellungen auf US-Spanisch (es-US). Wenn Sie es mit einer anderen Zielsprache testen möchten, verwenden Sie den folgenden Befehl:

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

Der Vorgang dauert einige Minuten, danach wird ein Link angezeigt, über den Sie die Zielvideodatei mit dem übersetzten Audio und den übersetzten Untertiteln anzeigen können.

Lokalisieren Sie Inhalte in mehreren Sprachen mithilfe der AWS-Dienste für maschinelles Lernen PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Testen Sie die Lösung

Um diese Lösung zu testen, haben wir einen kleinen Teil des Folgenden verwendet AWS re:Invent 2017-Video von YouTube, wo Amazon Transcribe erstmals vorgestellt wurde. Sie können die Lösung auch mit Ihrem eigenen Video testen. Die Originalsprache unseres Testvideos ist Englisch. Wenn Sie diese Lösung bereitstellen, können Sie die Zielaudioeinstellungen angeben oder die standardmäßigen Zielaudioeinstellungen verwenden, die Spanisch zum Generieren von Audio und Untertiteln verwenden. Die Lösung erstellt einen S3-Bucket, in den die Videodatei hochgeladen werden kann.

  1. Navigieren Sie auf der Amazon S3-Konsole zum Bucket PollyBlogBucket.
    Lokalisieren Sie Inhalte in mehreren Sprachen mithilfe der AWS-Dienste für maschinelles Lernen PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.
  2. Wählen Sie den Bucket aus, navigieren Sie zu /inputVideo Verzeichnis und laden Sie die Videodatei hoch (die Lösung wurde mit Videos vom Typ mp4 getestet). An diesem Punkt löst eine S3-Ereignisbenachrichtigung die Lambda-Funktion aus, die die Zustandsmaschine startet.
  3. Navigieren Sie in der Step Functions-Konsole zum Zustandsautomaten (ProcessAudioWithSubtitles).
  4. Wählen Sie einen der Läufe der Zustandsmaschine aus, um die zu lokalisieren Diagramm-Inspektor.

Dies zeigt die Laufergebnisse für jeden Zustand. Der Step Functions-Workflow dauert einige Minuten, danach können Sie überprüfen, ob alle Schritte erfolgreich abgeschlossen wurden.

Lokalisieren Sie Inhalte in mehreren Sprachen mithilfe der AWS-Dienste für maschinelles Lernen PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Überprüfen Sie die Ausgabe

Um die Ausgabe zu überprüfen, öffnen Sie die Amazon S3-Konsole und prüfen Sie, ob die Audiodatei (.mp3) und die Sprachmarkierungsdatei (.marks) im S3-Bucket unter gespeichert sind <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

Lokalisieren Sie Inhalte in mehreren Sprachen mithilfe der AWS-Dienste für maschinelles Lernen PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Das Folgende ist ein Beispiel der aus dem übersetzten Text generierten Sprachmarkendatei:

{"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 dieser Ausgabe wird jeder Teil des Textes nach Redezeichen aufgeschlüsselt:

  • Zeit – Der Zeitstempel in Millisekunden ab Beginn des entsprechenden Audiostreams
  • tippe – Die Art des Sprachzeichens (Satz, Wort, Mundbild oder SSML)
  • Anfang – Der Offset in Bytes (nicht Zeichen) des Beginns des Objekts im Eingabetext (ohne Mundzeichen)
  • Ende – Der Offset in Bytes (nicht Zeichen) des Objektendes im Eingabetext (ohne Mundbildzeichen)
  • Wert – Einzelne Wörter im Satz

Die generierte Untertiteldatei wird in den S3-Bucket zurückgeschrieben. Sie finden die Datei unter <ROOT_S3_BUCKET>/<UID>/subtitlesOutput/. Überprüfen Sie die Untertiteldatei; Der Inhalt sollte dem folgenden Text ähneln:

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

Nachdem die Untertiteldatei und die Audiodatei generiert wurden, wird die endgültige Quellvideodatei mit MediaConvert erstellt. Überprüfen Sie die MediaConvert-Konsole, um zu überprüfen, ob der Auftragsstatus lautet COMPLETE.

Wenn der MediaConvert-Job abgeschlossen ist, wird die endgültige Videodatei generiert und wieder im S3-Bucket gespeichert, der unter zu finden ist <ROOT_S3_BUCKET>/<UID>/convertedAV/.

Als Teil dieser Bereitstellung wird das endgültige Video über eine verteilt Amazon CloudFront (CDN) verknüpft und im Terminal oder in der angezeigt AWS CloudFormation Konsole.

Öffnen Sie die URL in einem Browser, um das Originalvideo mit zusätzlichen Optionen für Audio und Untertitel anzuzeigen. Sie können überprüfen, ob das übersetzte Audio und die Untertitel synchron sind.

Zusammenfassung

In diesem Beitrag haben wir besprochen, wie Sie neue Sprachversionen von Videodateien erstellen können, ohne dass manuelle Eingriffe erforderlich sind. Ersteller von Inhalten können diesen Prozess nutzen, um Audio und Untertitel ihrer Videos zu synchronisieren und ein globales Publikum zu erreichen.

Sie können diesen Ansatz problemlos in Ihre eigenen Produktionspipelines integrieren, um große Volumina zu verarbeiten und entsprechend Ihren Anforderungen zu skalieren. Amazon Polly verwendet Neurales TTS (NTTS) um natürliche und menschenähnliche Text-to-Speech-Stimmen zu erzeugen. Es unterstützt auch Generieren von Sprache aus SSML, was Ihnen zusätzliche Kontrolle darüber gibt, wie Amazon Polly Sprache aus dem bereitgestellten Text generiert. Amazon Polly bietet auch eine Vielzahl unterschiedlicher Stimmen in mehreren Sprachen, um Ihre Bedürfnisse zu unterstützen.

Beginnen Sie mit AWS-Services für maschinelles Lernen, indem Sie die besuchen zur Produktseite, oder beziehen Sie sich auf die Amazon Machine Learning Solutions Lab Seite, auf der Sie mit Experten zusammenarbeiten können, um Lösungen für maschinelles Lernen in Ihr Unternehmen zu bringen.

Zusätzliche Ressourcen

Weitere Informationen zu den in dieser Lösung verwendeten Diensten finden Sie unter:


Über die Autoren

Lokalisieren Sie Inhalte in mehreren Sprachen mithilfe der AWS-Dienste für maschinelles Lernen PlatoBlockchain Data Intelligence. Vertikale Suche. Ai. Reagan Rosario arbeitet als Lösungsarchitekt bei AWS mit Schwerpunkt auf Bildungstechnologieunternehmen. Er liebt es, Kunden dabei zu helfen, skalierbare, hochverfügbare und sichere Lösungen in der AWS Cloud zu entwickeln. Er verfügt über mehr als ein Jahrzehnt Erfahrung in verschiedenen Technologiefunktionen mit Schwerpunkt auf Softwareentwicklung und -architektur.

Lokalisieren Sie Inhalte in mehreren Sprachen mithilfe der AWS-Dienste für maschinelles Lernen PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Anil Kodali ist ein Lösungsarchitekt bei Amazon Web Services. Er arbeitet mit AWS EdTech-Kunden zusammen und leitet sie mit architektonischen Best Practices für die Migration bestehender Workloads in die Cloud und das Entwerfen neuer Workloads mit einem Cloud-First-Ansatz. Bevor er zu AWS kam, arbeitete er mit großen Einzelhändlern zusammen, um sie bei ihren Cloud-Migrationen zu unterstützen.

Lokalisieren Sie Inhalte in mehreren Sprachen mithilfe der AWS-Dienste für maschinelles Lernen PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Prasanna Saraswati Krishnan ist ein Lösungsarchitekt bei Amazon Web Services, der mit EdTech-Kunden zusammenarbeitet. Er hilft ihnen, ihre Cloud-Architektur und Datenstrategie mithilfe von Best Practices voranzutreiben. Sein Hintergrund liegt in den Bereichen Distributed Computing, Big Data Analytics und Data Engineering. Er interessiert sich leidenschaftlich für maschinelles Lernen und die Verarbeitung natürlicher Sprache.

Zeitstempel:

Mehr von AWS Maschinelles Lernen