Localisez le contenu dans plusieurs langues à l'aide des services d'apprentissage automatique AWS PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Localisez le contenu dans plusieurs langues à l'aide des services d'apprentissage automatique AWS

Au cours des dernières années, les plateformes d'enseignement en ligne ont connu une augmentation de l'adoption et une augmentation de la demande d'apprentissages vidéo, car elles offrent un moyen efficace d'engager les apprenants. Pour s'étendre aux marchés internationaux et s'adresser à une population culturellement et linguistiquement diversifiée, les entreprises cherchent également à diversifier leurs offres de formation en localisant le contenu dans plusieurs langues. Ces entreprises recherchent des moyens fiables et rentables pour résoudre leurs cas d'utilisation de la localisation.

La localisation du contenu comprend principalement la traduction des voix originales dans de nouvelles langues et l'ajout d'aides visuelles telles que les sous-titres. Traditionnellement, ce processus est d'un coût prohibitif, manuel et prend beaucoup de temps, y compris la collaboration avec des spécialistes de la localisation. Grâce à la puissance des services d'apprentissage automatique AWS tels que Amazon Transcribe, Amazon Traduireet Amazon Polly, vous pouvez créer une solution de localisation viable et rentable. Vous pouvez utiliser Amazon Transcribe pour créer une transcription de vos flux audio et vidéo existants, puis traduire cette transcription en plusieurs langues à l'aide d'Amazon Translate. Vous pouvez ensuite utiliser Amazon Polly, un service de synthèse vocale, pour convertir le texte traduit en un discours humain au son naturel.

La prochaine étape de la localisation consiste à ajouter des sous-titres au contenu, ce qui peut améliorer l'accessibilité et la compréhension, et aider les téléspectateurs à mieux comprendre les vidéos. La création de sous-titres sur le contenu vidéo peut être difficile car le discours traduit ne correspond pas à la synchronisation du discours d'origine. Cette synchronisation entre l'audio et les sous-titres est une tâche essentielle à prendre en compte car elle peut déconnecter le public de votre contenu s'il n'est pas synchronisé. Amazon Polly offre une solution à ce défi en permettant guillemets, que vous pouvez utiliser pour créer un fichier de sous-titres pouvant être synchronisé avec la sortie vocale générée.

Dans cet article, nous passons en revue une solution de localisation utilisant les services AWS ML où nous utilisons une vidéo originale en anglais et la convertissons en espagnol. Nous nous concentrons également sur l'utilisation de marques vocales pour créer un fichier de sous-titres synchronisés en espagnol.

Vue d'ensemble de la solution

Le diagramme suivant illustre l'architecture de la solution.

La solution prend un fichier vidéo et les paramètres de langue cible en entrée et utilise Amazon Transcribe pour créer une transcription de la vidéo. Nous utilisons ensuite Amazon Translate pour traduire la transcription dans la langue cible. Le texte traduit est fourni en tant qu'entrée à Amazon Polly pour générer le flux audio et les marques vocales dans la langue cible. Retour d'Amazon Polly sortie de marque vocale dans un flux JSON délimité par des lignes, qui contient les champs tels que l'heure, le type, le début, la fin et la valeur. La valeur peut varier en fonction du type de marque vocale demandée dans l'entrée, telle que SMSML, visème, mot ou phrase. Pour les besoins de notre exemple, nous avons demandé au type de marque vocale as word. Avec cette option, Amazon Polly décompose une phrase en ses mots individuels dans la phrase et leurs heures de début et de fin dans le flux audio. Avec ces métadonnées, les marques vocales sont ensuite traitées pour générer les sous-titres du flux audio correspondant généré par Amazon Polly.

Enfin, nous utilisons AWS Elemental MediaConvert pour rendre la vidéo finale avec l'audio traduit et les sous-titres correspondants.

La vidéo suivante montre le résultat final de la solution :

Flux de travail AWS Step Functions

Nous utilisons Fonctions d'étape AWS pour orchestrer ce processus. La figure suivante montre une vue de haut niveau du flux de travail Step Functions (certaines étapes sont omises du diagramme pour plus de clarté).

Localisez le contenu dans plusieurs langues à l'aide des services d'apprentissage automatique AWS PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Les étapes du flux de travail sont les suivantes :

  1. Un utilisateur télécharge le fichier vidéo source sur un Service de stockage simple Amazon (Amazon S3) seau.
  2. Les Notification d'événement S3 déclenche le AWS Lambda fonction state_machine.py (non illustré dans le diagramme), qui appelle la machine d'état Step Functions.
  3. Le premier pas, Transcrire l'audio, appelle la fonction Lambda transcrire.py, qui utilise Amazon Transcribe pour générer une transcription de l'audio à partir de la vidéo source.

L'exemple de code suivant montre comment créer une tâche de transcription à l'aide d'Amazon Transcribe Boto3 SDK Python :

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

Une fois la tâche terminée, les fichiers de sortie sont enregistrés dans le compartiment S3 et le processus passe à l'étape suivante de traduction du contenu.

  1. Les Traduire la transcription l'étape appelle la fonction Lambda traduire.py qui utilise Amazon Translate pour traduire la transcription dans la langue cible. Ici, nous utilisons la traduction synchrone/temps réel en utilisant le traduire_text fonction:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    La traduction synchrone a des limites sur la taille du document qu'elle peut traduire ; au moment d'écrire ces lignes, il est défini sur 5,000 XNUMX octets. Pour les documents de grande taille, envisagez d'utiliser une route asynchrone de création du travail à l'aide de start_text_translation_job et vérifier l'état via décrire_text_translation_job.

  2. L'étape suivante est une étape Fonctions Parallèle state, où nous créons des branches parallèles dans notre machine d'état.
    1. Dans la première branche, nous invoquons la fonction Lambda la fonction Lambda generate_polly_audio.py pour générer notre flux 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']

      Ici, nous utilisons le start_speech_synthesis_task méthode du SDK Amazon Polly Python pour déclencher la tâche de synthèse vocale qui crée l'audio Amazon Polly. Nous fixons le OutputFormat à mp3, qui indique à Amazon Polly de générer un flux audio pour cet appel d'API.

    2. Dans la deuxième branche, nous invoquons la fonction Lambda generate_speech_marks.py pour générer une sortie de marques vocales :
      ....
      # 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']

  • Nous utilisons à nouveau le start_speech_synthesis_task méthode mais précisez OutputFormat à json, qui indique à Amazon Polly de générer des marques vocales pour cet appel d'API.

Dans l'étape suivante de la deuxième branche, nous invoquons la fonction Lambda generate_subtitles.py, qui implémente la logique pour générer un fichier de sous-titres à partir de la sortie des marques vocales.

Il utilise le module Python dans le fichier webvtt_utils.py. Ce module a plusieurs fonctions utilitaires pour créer le fichier de sous-titres ; une telle méthode get_phrases_from_speechmarks est responsable de l'analyse du fichier de marques vocales. La structure JSON des marques vocales fournit uniquement l'heure de début de chaque mot individuellement. Pour créer la synchronisation des sous-titres requise pour le fichier SRT, nous créons d'abord des phrases d'environ n (où n = 10) mots à partir de la liste de mots du fichier de marques vocales. Ensuite, nous les écrivons dans le format de fichier SRT, en prenant l'heure de début du premier mot de la phrase, et pour l'heure de fin, nous utilisons l'heure de début du mot (n + 1) et le soustrayons de 1 pour créer l'entrée séquencée . La fonction suivante crée les phrases en préparation de leur écriture dans le fichier 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. La dernière étape, Media Convert, appelle la fonction Lambda create_mediaconvert_job.py pour combiner le flux audio d'Amazon Polly et le fichier de sous-titres avec le fichier vidéo source pour générer le fichier de sortie final, qui est ensuite stocké dans un compartiment S3. Cette étape utilise MediaConvert, un service de transcodage vidéo basé sur des fichiers avec des fonctionnalités de qualité broadcast. Il vous permet de créer facilement du contenu vidéo à la demande et combine des fonctionnalités vidéo et audio avancées avec une interface Web simple. Ici encore, nous utilisons le Python Boto3 SDK pour créer un MediaConvert emploi:
    ……
    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"])

Pré-requis

Avant de commencer, vous devez avoir les prérequis suivants :

Déployez la solution

Pour déployer la solution à l'aide d'AWS CDK, procédez comme suit :

  1. Cloner le dépôt:
    git clone https://github.com/aws-samples/localize-content-using-aws-ml-services.git 

  2. Pour vous assurer que le CDK AWS est amorcé, exécutez la commande cdk bootstrap depuis la racine du dépôt :
    $ 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. Remplacez le répertoire de travail par la racine du dépôt et exécutez la commande suivante :
    cdk deploy

Par défaut, les paramètres audio cibles sont définis sur l'espagnol américain (es-US). Si vous envisagez de le tester avec une autre langue cible, utilisez la commande suivante :

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

Le processus prend quelques minutes, après quoi il affiche un lien que vous pouvez utiliser pour afficher le fichier vidéo cible avec l'audio traduit et les sous-titres traduits.

Localisez le contenu dans plusieurs langues à l'aide des services d'apprentissage automatique AWS PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Testez la solution

Pour tester cette solution, nous avons utilisé une petite partie des éléments suivants Vidéo AWS re:Invent 2017 de YouTube, où Amazon Transcribe a été introduit pour la première fois. Vous pouvez également tester la solution avec votre propre vidéo. La langue d'origine de notre vidéo de test est l'anglais. Lorsque vous déployez cette solution, vous pouvez spécifier les paramètres audio cibles ou vous pouvez utiliser les paramètres audio cibles par défaut, qui utilisent l'espagnol pour générer l'audio et les sous-titres. La solution crée un compartiment S3 qui peut être utilisé pour télécharger le fichier vidéo.

  1. Sur la console Amazon S3, accédez au compartiment PollyBlogBucket.
    Localisez le contenu dans plusieurs langues à l'aide des services d'apprentissage automatique AWS PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  2. Choisissez le bucket, accédez au /inputVideo répertoire, et téléchargez le fichier vidéo (la solution est testée avec des vidéos de type mp4). À ce stade, une notification d'événement S3 déclenche la fonction Lambda, qui démarre la machine d'état.
  3. Sur la console Step Functions, accédez à la machine d'état (ProcessAudioWithSubtitles).
  4. Choisissez l'une des exécutions de la machine d'état pour localiser le Inspecteur de graphique.

Cela montre les résultats d'exécution pour chaque état. Le flux de travail Step Functions prend quelques minutes, après quoi vous pouvez vérifier si toutes les étapes se sont déroulées avec succès.

Localisez le contenu dans plusieurs langues à l'aide des services d'apprentissage automatique AWS PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Examinez la sortie

Pour examiner la sortie, ouvrez la console Amazon S3 et vérifiez si le fichier audio (.mp3) et le fichier de marque vocale (.marks) sont stockés dans le compartiment S3 sous <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

Localisez le contenu dans plusieurs langues à l'aide des services d'apprentissage automatique AWS PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Voici un exemple du fichier de marque vocale généré à partir du texte traduit :

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

Dans cette sortie, chaque partie du texte est décomposée en termes de marques vocales :

  • fiable – L'horodatage en millisecondes depuis le début du flux audio correspondant
  • type – Le type de marque de parole (phrase, mot, visème ou SSML)
  • Commencer - Le décalage en octets (et non en caractères) du début de l'objet dans le texte d'entrée (sans compter les marques de visème)
  • fin - Le décalage en octets (et non en caractères) de la fin de l'objet dans le texte d'entrée (sans compter les marques de visème)
  • Plus-value – Mots individuels dans la phrase

Le fichier de sous-titres généré est réécrit dans le compartiment S3. Vous pouvez trouver le fichier sous <ROOT_S3_BUCKET>/<UID>/subtitlesOutput/. Inspectez le fichier de sous-titres ; le contenu doit être similaire au texte suivant :

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

Une fois le fichier de sous-titres et le fichier audio générés, le fichier vidéo source final est créé à l'aide de MediaConvert. Consultez la console MediaConvert pour vérifier si l'état de la tâche est COMPLETE.

Lorsque la tâche MediaConvert est terminée, le fichier vidéo final est généré et enregistré dans le compartiment S3, qui se trouve sous <ROOT_S3_BUCKET>/<UID>/convertedAV/.

Dans le cadre de ce déploiement, la vidéo finale est distribuée via un Amazon CloudFront (CDN) et affiché dans le terminal ou dans le AWS CloudFormation console.

Ouvrez l'URL dans un navigateur pour afficher la vidéo originale avec des options supplémentaires pour l'audio et les sous-titres. Vous pouvez vérifier que l'audio et les sous-titres traduits sont synchronisés.

Conclusion

Dans cet article, nous avons expliqué comment créer de nouvelles versions linguistiques de fichiers vidéo sans intervention manuelle. Les créateurs de contenu peuvent utiliser ce processus pour synchroniser l'audio et les sous-titres de leurs vidéos et atteindre un public mondial.

Vous pouvez facilement intégrer cette approche dans vos propres pipelines de production pour gérer de gros volumes et évoluer en fonction de vos besoins. Amazon Polly utilise TTS neuronal (NTTS) pour produire des voix de synthèse vocale naturelles et humaines. Il prend également en charge générer de la parole à partir de SSML, ce qui vous donne un contrôle supplémentaire sur la façon dont Amazon Polly génère la parole à partir du texte fourni. Amazon Polly fournit également un variété de voix différentes en plusieurs langues pour répondre à vos besoins.

Démarrez avec les services d'apprentissage automatique AWS en visitant le page produit, ou consulter le Laboratoire de solutions Amazon Machine Learning page où vous pouvez collaborer avec des experts pour apporter des solutions d'apprentissage automatique à votre organisation.

Ressources additionnelles

Pour plus d'informations sur les services utilisés dans cette solution, reportez-vous aux éléments suivants :


À propos des auteurs

Localisez le contenu dans plusieurs langues à l'aide des services d'apprentissage automatique AWS PlatoBlockchain Data Intelligence. Recherche verticale. Aï. Reagan Rosario travaille comme architecte de solutions chez AWS en se concentrant sur les entreprises de technologie de l'éducation. Il aime aider les clients à créer des solutions évolutives, hautement disponibles et sécurisées dans le cloud AWS. Il a plus d'une décennie d'expérience dans divers rôles technologiques, avec un accent sur l'ingénierie et l'architecture logicielles.

Localisez le contenu dans plusieurs langues à l'aide des services d'apprentissage automatique AWS PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Anil Kodali est un architecte de solutions chez Amazon Web Services. Il travaille avec les clients AWS EdTech, les guidant avec les meilleures pratiques architecturales pour la migration des charges de travail existantes vers le cloud et la conception de nouvelles charges de travail avec une approche axée sur le cloud. Avant de rejoindre AWS, il a travaillé avec de grands détaillants pour les aider dans leurs migrations vers le cloud.

Localisez le contenu dans plusieurs langues à l'aide des services d'apprentissage automatique AWS PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Prasanna Saraswathi Krishnan est un architecte de solutions avec Amazon Web Services travaillant avec des clients EdTech. Il les aide à piloter leur architecture cloud et leur stratégie de données en utilisant les meilleures pratiques. Il a une formation en informatique distribuée, en analyse de données volumineuses et en ingénierie des données. Il est passionné par l'apprentissage automatique et le traitement du langage naturel.

Horodatage:

Plus de Apprentissage automatique AWS