Локализуйте контент на несколько языков с помощью сервисов машинного обучения AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Локализуйте контент на несколько языков с помощью сервисов машинного обучения AWS.

За последние несколько лет платформы онлайн-обучения стали свидетелями роста популярности и спроса на видеообучение, поскольку оно предлагает эффективную среду для вовлечения учащихся. Чтобы выйти на международные рынки и обратиться к разнообразному в культурном и языковом отношении населению, предприятия также рассматривают возможность диверсификации своих учебных предложений за счет локализации контента на несколько языков. Эти предприятия ищут надежные и экономичные способы решения своих задач локализации.

Локализация контента в основном включает перевод оригинальных голосов на новые языки и добавление визуальных средств, таких как субтитры. Традиционно этот процесс непомерно затратный, ручной и занимает много времени, включая работу со специалистами по локализации. Благодаря возможностям сервисов машинного обучения (ML) AWS, таких как Amazon транскрибировать, Amazon Translateи Amazon Polly, вы можете создать жизнеспособное и экономичное решение для локализации. Вы можете использовать Amazon Transcribe, чтобы создать расшифровку существующих аудио- и видеопотоков, а затем перевести эту расшифровку на несколько языков с помощью Amazon Translate. Затем вы можете использовать сервис преобразования текста в речь Amazon Polly, чтобы преобразовать переведенный текст в естественно звучащую человеческую речь.

Следующим шагом локализации является добавление к контенту субтитров, которые могут улучшить доступность и понимание, а также помочь зрителям лучше понять видео. Создание субтитров к видеоконтенту может быть сложной задачей, потому что переведенная речь не совпадает с синхронизацией исходной речи. Эта синхронизация между аудио и субтитрами является важной задачей, поскольку она может отключить аудиторию от вашего контента, если они не синхронизированы. Amazon Polly предлагает решение этой проблемы, позволяя речевые знаки, который вы можете использовать для создания файла субтитров, который можно синхронизировать с сгенерированным речевым выводом.

В этом посте мы рассматриваем решение для локализации с использованием сервисов AWS ML, где мы используем оригинальное видео на английском языке и конвертируем его в испанский язык. Мы также сосредоточены на использовании речевых меток для создания синхронизированного файла субтитров на испанском языке.

Обзор решения

Следующая диаграмма иллюстрирует архитектуру решения.

Решение использует видеофайл и настройки целевого языка в качестве входных данных и использует Amazon Transcribe для создания расшифровки видео. Затем мы используем Amazon Translate для перевода стенограммы на целевой язык. Переведенный текст предоставляется в качестве входных данных для Amazon Polly для создания аудиопотока и речевых меток на целевом языке. Амазонка Полли возвращается вывод речевой метки в потоке JSON с разделителями строк, который содержит такие поля, как время, тип, начало, конец и значение. Значение может варьироваться в зависимости от типа речевой метки, запрошенной во входных данных, например ССМЛ, визема, слово или предложение. Для нашего примера мы запросили тип речевой метки as word. С помощью этого параметра Amazon Polly разбивает предложение на отдельные слова в предложении и время их начала и окончания в аудиопотоке. Затем с помощью этих метаданных речевые метки обрабатываются для создания субтитров для соответствующего аудиопотока, созданного Amazon Polly.

Наконец, мы используем AWS Elemental MediaConvert для рендеринга финального видео с переведенным звуком и соответствующими субтитрами.

Следующее видео демонстрирует окончательный результат решения:

Рабочий процесс AWS Step Functions

МЫ ИСПОЛЬЗУЕМ Шаговые функции AWS организовать этот процесс. На следующем рисунке показано общее представление рабочего процесса Step Functions (некоторые шаги опущены на диаграмме для большей ясности).

Локализуйте контент на несколько языков с помощью сервисов машинного обучения AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Этапы рабочего процесса следующие:

  1. Пользователь загружает исходный видеофайл в Простой сервис хранения Amazon (Amazon S3) ведро.
  2. Ассоциация Уведомление о событии S3 вызывает AWS Lambda функция state_machine.py (не показано на диаграмме), который вызывает конечный автомат Step Functions.
  3. Первый шаг, Расшифровать аудио, вызывает лямбда-функцию расшифровать.py, который использует Amazon Transcribe для создания расшифровки аудио из исходного видео.

В следующем примере кода показано, как создать задание расшифровки с помощью Amazon Transcribe. Бото3 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
)

После завершения задания выходные файлы сохраняются в корзину S3, и процесс переходит к следующему этапу перевода содержимого.

  1. Ассоциация Перевести транскрипцию step вызывает функцию Lambda перевести.py который использует Amazon Translate для перевода стенограммы на целевой язык. Здесь мы используем синхронный перевод/перевод в реальном времени, используя перевести_текст функция:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    Синхронный перевод имеет ограничения на размер документа, который он может перевести; на момент написания этой статьи он установлен на 5,000 байт. Для больших размеров документов рассмотрите возможность использования асинхронного маршрута создания задания с использованием start_text_translation_job и проверка состояния через description_text_translation_job.

  2. Следующим шагом является Шаг Функции Параллельные state, где мы создаем параллельные ветки в нашей конечной машине.
    1. В первой ветке мы вызываем лямбда-функцию лямбда-функция генерировать_polly_audio.py для создания нашего аудиопотока 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']

      Здесь мы используем start_speech_synchronous_task метод Amazon Polly Python SDK для запуска задачи синтеза речи, которая создает звук Amazon Polly. Мы устанавливаем OutputFormat в mp3, который указывает Amazon Polly создать аудиопоток для этого вызова API.

    2. Во второй ветке мы вызываем лямбда-функцию генерировать_speech_marks.py для генерации вывода речевых меток:
      ....
      # 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']

  • Мы снова воспользуемся start_speech_synchronous_task метод, но указать OutputFormat в json, который указывает Amazon Polly создать речевые метки для этого вызова API.

На следующем шаге второй ветки мы вызываем лямбда-функцию генерировать_субтитры.py, реализующий логику создания файла субтитров на основе выходных речевых меток.

Он использует модуль Python в файле webvtt_utils.py. Этот модуль имеет несколько служебных функций для создания файла субтитров; один такой метод get_phrases_from_speechmarks отвечает за разбор файла речевых меток. Структура речевых меток JSON предоставляет только время начала для каждого слова в отдельности. Чтобы создать синхронизацию субтитров, необходимую для файла SRT, мы сначала создаем фразы примерно из n (где n = 10) слов из списка слов в файле речевых меток. Затем мы записываем их в формат файла SRT, беря время начала с первого слова во фразе, а в качестве времени окончания мы используем время начала (n+1) слова и вычитаем его на 1, чтобы создать последовательную запись. . Следующая функция создает фразы для подготовки к их записи в файл 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. Последний шаг, Медиа Конвертировать, вызывает лямбда-функцию create_mediaconvert_job.py для объединения аудиопотока из Amazon Polly и файла субтитров с исходным видеофайлом для создания конечного выходного файла, который затем сохраняется в корзине S3. Этот шаг использует MediaConvert, служба перекодирования видео на основе файлов с функциями вещательного уровня. Он позволяет легко создавать контент видео по запросу и сочетает в себе расширенные возможности видео и аудио с простым веб-интерфейсом. Здесь снова мы используем Python Бото3 SDK для создания MediaConvert работа:
    ……
    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"])

Предпосылки

Прежде чем приступить к работе, у вас должны быть следующие предпосылки:

Разверните решение

Чтобы развернуть решение с помощью AWS CDK, выполните следующие действия:

  1. Клонировать хранилище:
    git clone https://github.com/aws-samples/localize-content-using-aws-ml-services.git 

  2. Чтобы убедиться, что AWS CDK бутстрапируемых, выполните команду cdk bootstrap из корня репозитория:
    $ 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. Измените рабочий каталог на корень репозитория и выполните следующую команду:
    cdk deploy

По умолчанию целевые настройки звука установлены на испанский (США) (es-US). Если вы планируете протестировать его с другим целевым языком, используйте следующую команду:

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

Процесс занимает несколько минут, после чего отображается ссылка, которую можно использовать для просмотра целевого видеофайла с переведенным звуком и переведенными субтитрами.

Локализуйте контент на несколько языков с помощью сервисов машинного обучения AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Проверить решение

Чтобы протестировать это решение, мы использовали небольшую часть следующего Видео AWS re:Invent 2017 с YouTube, где впервые был представлен Amazon Transcribe. Вы также можете протестировать решение на собственном видео. Исходный язык нашего тестового видео — английский. При развертывании этого решения вы можете указать параметры целевого звука или использовать параметры целевого звука по умолчанию, в которых для создания звука и субтитров используется испанский язык. Решение создает корзину S3, которую можно использовать для загрузки видеофайла.

  1. На консоли Amazon S3 перейдите к корзине PollyBlogBucket.
    Локализуйте контент на несколько языков с помощью сервисов машинного обучения AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  2. Выберите ведро, перейдите к /inputVideo директорию и загрузите видеофайл (решение протестировано с видео типа mp4). В этот момент уведомление о событии S3 запускает функцию Lambda, которая запускает конечный автомат.
  3. В консоли Step Functions перейдите к конечному автомату (ProcessAudioWithSubtitles).
  4. Выберите один из запусков конечного автомата, чтобы найти Инспектор графиков.

Это показывает результаты выполнения для каждого состояния. Рабочий процесс Step Functions занимает несколько минут, после чего вы можете проверить, все ли шаги выполнены успешно.

Локализуйте контент на несколько языков с помощью сервисов машинного обучения AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Просмотрите результат

Чтобы просмотреть результат, откройте консоль Amazon S3 и проверьте, сохранены ли аудиофайл (.mp3) и файл речевых меток (.marks) в корзине S3 в разделе <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

Локализуйте контент на несколько языков с помощью сервисов машинного обучения AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Ниже приведен пример файла речевой метки, созданного из переведенного текста:

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

В этом выводе каждая часть текста разбита на речевые метки:

  • время – Отметка времени в миллисекундах с начала соответствующего аудиопотока
  • напишите – Тип речевой метки (предложение, слово, визема или SSML)
  • Начало – Смещение в байтах (не символов) начала объекта во входном тексте (не включая метки виземы)
  • конец – Смещение в байтах (не символов) конца объекта во входном тексте (не включая метки виземы)
  • ценностное - Отдельные слова в предложении

Сгенерированный файл субтитров записывается обратно в корзину S3. Вы можете найти файл под <ROOT_S3_BUCKET>/<UID>/subtitlesOutput/. Осмотрите файл субтитров; содержание должно быть похоже на следующий текст:

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

После создания файла субтитров и аудиофайла окончательный исходный видеофайл создается с помощью MediaConvert. Проверьте консоль MediaConvert, чтобы убедиться, что статус задания COMPLETE.

Когда задание MediaConvert завершено, окончательный видеофайл создается и сохраняется обратно в корзину S3, которую можно найти в разделе <ROOT_S3_BUCKET>/<UID>/convertedAV/.

В рамках этого развертывания конечное видео распространяется через Amazon CloudFront (CDN) и отображается в терминале или в AWS CloudFormation приставка.

Откройте URL-адрес в браузере, чтобы просмотреть исходное видео с дополнительными параметрами звука и субтитров. Вы можете убедиться, что переведенное аудио и субтитры синхронизированы.

Заключение

В этом посте мы обсудили, как создавать новые языковые версии видеофайлов без необходимости ручного вмешательства. Создатели контента могут использовать этот процесс для синхронизации звука и субтитров своих видео и охвата глобальной аудитории.

Вы можете легко интегрировать этот подход в свои собственные производственные конвейеры для обработки больших объемов и масштабирования в соответствии с вашими потребностями. Амазонка Полли использует Нейронный TTS (NTTS) для создания естественных и человеческих голосов преобразования текста в речь. Он также поддерживает генерация речи из SSML, что дает вам дополнительный контроль над тем, как Amazon Polly генерирует речь из предоставленного текста. Amazon Polly также предоставляет разнообразие разных голосов на нескольких языках для удовлетворения ваших потребностей.

Начните работу с сервисами машинного обучения AWS, посетив странице продукта, или обратитесь к Лаборатория решений для машинного обучения Amazon страницу, где вы можете сотрудничать с экспертами, чтобы внедрить решения для машинного обучения в вашу организацию.

Дополнительные ресурсы

Дополнительные сведения о службах, используемых в этом решении, см. в следующих разделах:


Об авторах

Локализуйте контент на несколько языков с помощью сервисов машинного обучения AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай. Рейган Росарио работает архитектором решений в AWS, специализируясь на компаниях, занимающихся образовательными технологиями. Ему нравится помогать клиентам создавать масштабируемые, высокодоступные и безопасные решения в облаке AWS. Он имеет более чем десятилетний опыт работы на различных технологических должностях, уделяя особое внимание разработке программного обеспечения и архитектуре.

Локализуйте контент на несколько языков с помощью сервисов машинного обучения AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Анил Кодали является архитектором решений в Amazon Web Services. Он работает с клиентами AWS EdTech, предоставляя им рекомендации по архитектуре для переноса существующих рабочих нагрузок в облако и разработки новых рабочих нагрузок с использованием облачного подхода. До прихода в AWS он работал с крупными ритейлерами, помогая им с миграцией в облако.

Локализуйте контент на несколько языков с помощью сервисов машинного обучения AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Прасанна Сарасвати Кришнан является архитектором решений в Amazon Web Services, работающим с клиентами EdTech. Он помогает им управлять своей облачной архитектурой и стратегией работы с данными, используя передовой опыт. Его опыт работы связан с распределенными вычислениями, аналитикой больших данных и проектированием данных. Он увлечен машинным обучением и обработкой естественного языка.

Отметка времени:

Больше от Машинное обучение AWS