AWS機械学習サービスPlatoBlockchainDataIntelligenceを使用して、コンテンツを複数の言語にローカライズします。 垂直検索。 愛。

AWS機械学習サービスを使用して、コンテンツを複数の言語にローカライズします

過去数年間で、オンライン教育プラットフォームは、学習者を引き付けるための効果的な媒体を提供するため、ビデオベースの学習の採用が増加し、需要が高まっています。 国際市場に拡大し、文化的および言語的に多様な人口に対応するために、企業はコンテンツを複数の言語にローカライズすることによって学習サービスを多様化することも検討しています。 これらの企業は、ローカリゼーションのユースケースを解決するための信頼性が高く費用効果の高い方法を探しています。

コンテンツのローカライズには、主に元の音声を新しい言語に翻訳したり、字幕などの視覚補助を追加したりすることが含まれます。 従来、このプロセスはコストが高く、手動で行われ、ローカリゼーションの専門家との連携を含め、多くの時間がかかります。 次のようなAWS機械学習(ML)サービスの力で Amazon Transcribe, Amazon翻訳, Amazon Polly、実行可能で費用効果の高いローカリゼーションソリューションを作成できます。 Amazon Transcribeを使用して、既存のオーディオおよびビデオストリームのトランスクリプトを作成し、AmazonTranslateを使用してこのトランスクリプトを複数の言語に翻訳できます。 次に、テキスト読み上げサービスであるAmazon Pollyを使用して、翻訳されたテキストを自然な音声に変換できます。

ローカリゼーションの次のステップは、コンテンツに字幕を追加することです。これにより、アクセシビリティと理解が向上し、視聴者が動画をよりよく理解できるようになります。 翻訳された音声が元の音声のタイミングと一致しないため、ビデオコンテンツでの字幕の作成は難しい場合があります。 オーディオと字幕の間のこの同期は、視聴者が同期していない場合にコンテンツから切断される可能性があるため、考慮する必要のある重要なタスクです。 Amazon Pollyは、次のことを可能にすることで、この課題に対するソリューションを提供します スピーチマーク、生成された音声出力と同期できる字幕ファイルを作成するために使用できます。

この投稿では、AWS MLサービスを使用したローカリゼーションソリューションを確認します。ここでは、元の英語のビデオを使用してスペイン語に変換します。 また、スペイン語で同期された字幕ファイルを作成するためにスピーチマークを使用することに焦点を当てています。

ソリューションの概要

次の図は、ソリューションのアーキテクチャを示しています。

このソリューションは、ビデオファイルとターゲット言語設定を入力として受け取り、AmazonTranscribeを使用してビデオの文字起こしを作成します。 次に、Amazon Translateを使用して、トランスクリプトをターゲット言語に翻訳します。 翻訳されたテキストは、Amazon Pollyへの入力として提供され、ターゲット言語でオーディオストリームとスピーチマークを生成します。 AmazonPollyが返品 スピーチマーク出力 時間、タイプ、開始、終了、値などのフィールドを含む行区切りのJSONストリーム内。 値は、入力で要求されたスピーチマークのタイプによって異なる場合があります。 SSML, 口形素、単語、または文。 この例では、 スピーチマークタイプ as word。 このオプションを使用すると、Amazon Pollyは、センテンスをセンテンス内の個々の単語と、オーディオストリーム内の開始時刻と終了時刻に分割します。 このメタデータを使用して、スピーチマークが処理され、AmazonPollyによって生成された対応するオーディオストリームの字幕が生成されます。

最後に、 AWS Elemental MediaConvert 翻訳されたオーディオと対応する字幕を使用して最終的なビデオをレンダリングします。

次のビデオは、ソリューションの最終的な結果を示しています。

AWS StepFunctionsワークフロー

を使用しております AWSステップ関数 このプロセスを調整します。 次の図は、ステップ関数ワークフローの概要を示しています(わかりやすくするために、一部のステップは図から省略されています)。

AWS機械学習サービスPlatoBlockchainDataIntelligenceを使用して、コンテンツを複数の言語にローカライズします。 垂直検索。 愛。

ワークフローの手順は次のとおりです。

  1. ユーザーがソースビデオファイルをにアップロードします Amazon シンプル ストレージ サービス (Amazon S3)バケット。
  2.   S3イベント通知 トリガー AWSラムダ function state_machine.py (図には示されていません)。これにより、StepFunctionsステートマシンが呼び出されます。
  3. 最初のステップ、 音声を書き写す、Lambda関数を呼び出します 転写.py、Amazonトランスクリプトを使用して、ソースビデオからオーディオのトランスクリプトを生成します。

次のサンプルコードは、AmazonTranscribeを使用して転記ジョブを作成する方法を示しています ボト3 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
)

ジョブが完了すると、出力ファイルはS3バケットに保存され、プロセスはコンテンツを翻訳する次のステップに進みます。

  1.   転写を翻訳する stepはLambda関数を呼び出します 翻訳.py これは、AmazonTranslateを使用してトランスクリプトをターゲット言語に翻訳します。 ここでは、同期/リアルタイム変換を使用します 翻訳テキスト 関数:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    同期翻訳には、翻訳できるドキュメントサイズに制限があります。 この記事の執筆時点では、5,000バイトに設定されています。 ドキュメントサイズが大きい場合は、を使用してジョブを作成する非同期ルートの使用を検討してください。 start_text_translation_job を介してステータスを確認します 説明テキスト翻訳ジョブ.

  2. 次のステップはステップ関数です 並列シミュレーションの設定 ステート。ステートマシンで並列ブランチを作成します。
    1. 最初のブランチでは、Lambda関数Lambda関数を呼び出します generate_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']

      ここでは、 音声合成タスクの開始 Amazon Polly Python SDKのメソッドで、AmazonPollyオーディオを作成する音声合成タスクをトリガーします。 設定します OutputFormat 〜へ mp3、このAPI呼び出しのオーディオストリームを生成するようにAmazonPollyに指示します。

    2. XNUMX番目のブランチでは、Lambda関数を呼び出します generate_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']

  • 再び使用します 音声合成タスクの開始 メソッドが指定します OutputFormat 〜へ json、これは、AmazonPollyにこのAPI呼び出しのスピーチマークを生成するように指示します。

XNUMX番目のブランチの次のステップでは、Lambda関数を呼び出します 生成_字幕.py、スピーチマーク出力から字幕ファイルを生成するロジックを実装します。

ファイル内のPythonモジュールを使用します webvtt_utils.py。 このモジュールには、字幕ファイルを作成するための複数のユーティリティ機能があります。 そのような方法のXNUMXつ 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. 最後のステップ、 メディアコンバート、Lambda関数を呼び出します create_mediaconvert_job.py Amazon Pollyからのオーディオストリームと字幕ファイルをソースビデオファイルと組み合わせて最終出力ファイルを生成し、S3バケットに保存します。 このステップでは MediaConvert、ブロードキャストグレードの機能を備えたファイルベースのビデオトランスコーディングサービス。 ビデオオンデマンドコンテンツを簡単に作成でき、高度なビデオおよびオーディオ機能とシンプルなWebインターフェイスを組み合わせています。 ここでも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. AWSCDKが ブートストラップ、コマンドを実行します 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機械学習サービスPlatoBlockchainDataIntelligenceを使用して、コンテンツを複数の言語にローカライズします。 垂直検索。 愛。

ソリューションをテストする

このソリューションをテストするために、以下のごく一部を使用しました AWS re:Invent2017ビデオ AmazonTranscribeが最初に紹介されたYouTubeから。 独自のビデオを使用してソリューションをテストすることもできます。 テストビデオの元の言語は英語です。 このソリューションを展開するときは、ターゲットオーディオ設定を指定するか、デフォルトのターゲットオーディオ設定を使用できます。これは、スペイン語を使用してオーディオと字幕を生成します。 このソリューションは、ビデオファイルのアップロードに使用できるS3バケットを作成します。

  1. Amazon S3コンソールで、バケットに移動します PollyBlogBucket.
    AWS機械学習サービスPlatoBlockchainDataIntelligenceを使用して、コンテンツを複数の言語にローカライズします。 垂直検索。 愛。
  2. バケットを選択し、に移動します /inputVideo ディレクトリを作成し、ビデオファイルをアップロードします(ソリューションはタイプmp4のビデオでテストされています)。 この時点で、S3イベント通知がLambda関数をトリガーし、ステートマシンを起動します。
  3. ステップ関数コンソールで、ステートマシンを参照します(ProcessAudioWithSubtitles).
  4. ステートマシンの実行のXNUMXつを選択して、 グラフインスペクター.

これにより、各状態の実行結果が表示されます。 ステップ関数ワークフローは完了するまでに数分かかります。その後、すべてのステップが正常に完了したかどうかを確認できます。

AWS機械学習サービスPlatoBlockchainDataIntelligenceを使用して、コンテンツを複数の言語にローカライズします。 垂直検索。 愛。

出力を確認します

出力を確認するには、Amazon S3コンソールを開き、オーディオファイル(.mp3)とスピーチマークファイル(.marks)がS3バケットに保存されているかどうかを確認します。 <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

AWS機械学習サービスPlatoBlockchainDataIntelligenceを使用して、コンテンツを複数の言語にローカライズします。 垂直検索。 愛。

以下は、翻訳されたテキストから生成されたスピーチマークファイルのサンプルです。

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

この出力では、テキストの各部分がスピーチマークの観点から分割されています。

  • 時間 –対応するオーディオストリームの開始からのミリ秒単位のタイムスタンプ
  • type –スピーチマークのタイプ(文、単語、viseme、またはSSML)
  • start –入力テキスト(ビセムマークを含まない)内のオブジェクトの先頭のバイト単位のオフセット(文字ではない)
  • end –入力テキスト(visemeマークを含まない)のオブジェクトの終わりのバイト単位のオフセット(文字ではない)
  • –文中の個々の単語

生成された字幕ファイルは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/.

この展開の一環として、最終的なビデオは アマゾンCloudFrontの (CDN)リンクとターミナルまたはに表示されます AWS CloudFormation コンソール。

ブラウザでURLを開いて、オーディオと字幕の追加オプションを含む元のビデオを表示します。 翻訳された音声と字幕が同期していることを確認できます。

まとめ

この投稿では、手動による介入を必要とせずに、ビデオファイルの新しい言語バージョンを作成する方法について説明しました。 コンテンツ作成者は、このプロセスを使用して、動画の音声と字幕を同期し、世界中の視聴者にリーチできます。

このアプローチを独自の本番パイプラインに簡単に統合して、ニーズに応じて大量の処理と拡張を行うことができます。 AmazonPollyは ニューラルTTS(NTTS) 自然で人間のようなテキスト読み上げの声を生成します。 また、サポートします SSMLから音声を生成する、これにより、AmazonPollyが提供されたテキストから音声を生成する方法をさらに制御できます。 AmazonPollyは さまざまな声 あなたのニーズをサポートするために複数の言語で。

AWSの機械学習サービスを開始するには、 製品ページ、またはを参照してください Amazon 機械学習ソリューション ラボ 専門家と協力して機械学習ソリューションを組織にもたらすことができるページ。

その他のリソース

このソリューションで使用されるサービスの詳細については、以下を参照してください。


著者について

AWS機械学習サービスPlatoBlockchainDataIntelligenceを使用して、コンテンツを複数の言語にローカライズします。 垂直検索。 愛。 レーガンロザリオ AWSでソリューションアーキテクトとして働いており、教育テクノロジー企業に焦点を当てています。 彼は、お客様がAWSクラウドでスケーラブルで可用性が高く安全なソリューションを構築できるよう支援するのが大好きです。 彼は、ソフトウェアエンジニアリングとアーキテクチャを中心に、さまざまなテクノロジーの役割でXNUMX年以上の経験があります。

AWS機械学習サービスPlatoBlockchainDataIntelligenceを使用して、コンテンツを複数の言語にローカライズします。 垂直検索。 愛。アニルコダリ アマゾンウェブサービスのソリューションアーキテクトです。 彼はAWSEdTechのお客様と協力して、既存のワークロードをクラウドに移行し、クラウドファーストのアプローチで新しいワークロードを設計するためのアーキテクチャのベストプラクティスを指導しています。 AWSに参加する前は、大規模な小売業者と協力してクラウドの移行を支援していました。

AWS機械学習サービスPlatoBlockchainDataIntelligenceを使用して、コンテンツを複数の言語にローカライズします。 垂直検索。 愛。プラザンナサラスワティクリシュナン は、EdTechの顧客と協力しているAmazonWebServicesのソリューションアーキテクトです。 彼は、ベストプラクティスを使用して、クラウドアーキテクチャとデータ戦略を推進するのを支援しています。 彼の経歴は、分散コンピューティング、ビッグデータ分析、およびデータエンジニアリングです。 彼は機械学習と自然言語処理に情熱を注いでいます。

タイムスタンプ:

より多くの AWS機械学習