بومی سازی محتوا به چندین زبان با استفاده از خدمات یادگیری ماشینی AWS PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

بومی سازی محتوا به چندین زبان با استفاده از خدمات یادگیری ماشینی AWS

طی چند سال گذشته، پلتفرم‌های آموزش آنلاین شاهد افزایش پذیرش و افزایش تقاضا برای یادگیری‌های مبتنی بر ویدیو بوده‌اند، زیرا رسانه‌ای مؤثر برای تعامل با فراگیران ارائه می‌دهند. برای گسترش به بازارهای بین المللی و پرداختن به جمعیتی متنوع از نظر فرهنگی و زبانی، کسب و کارها همچنین به دنبال تنوع بخشیدن به پیشنهادات یادگیری خود با بومی سازی محتوا به زبان های مختلف هستند. این کسب و کارها به دنبال راه های قابل اعتماد و مقرون به صرفه برای حل موارد استفاده بومی سازی خود هستند.

بومی سازی محتوا عمدتاً شامل ترجمه صداهای اصلی به زبان های جدید و افزودن وسایل کمک بصری مانند زیرنویس است. به طور سنتی، این فرآیند مقرون به صرفه، دستی، و زمان زیادی از جمله کار با متخصصان بومی سازی است. با قدرت خدمات یادگیری ماشینی AWS (ML) مانند آمازون رونوشت, ترجمه آمازونو آمازون پولی، می توانید یک راه حل بومی سازی مناسب و مقرون به صرفه ایجاد کنید. می توانید از Amazon Transcript برای ایجاد رونوشت از جریان های صوتی و تصویری موجود خود استفاده کنید و سپس این رونوشت را با استفاده از Amazon Translate به چندین زبان ترجمه کنید. سپس می توانید از Amazon Polly، یک سرویس متن به گفتار، برای تبدیل متن ترجمه شده به گفتار انسانی با صدای طبیعی استفاده کنید.

مرحله بعدی بومی سازی اضافه کردن زیرنویس به محتوا است که می تواند دسترسی و درک مطلب را بهبود بخشد و به بینندگان کمک کند ویدیوها را بهتر درک کنند. ایجاد زیرنویس در محتوای ویدیویی می‌تواند چالش‌برانگیز باشد زیرا گفتار ترجمه شده با زمان‌بندی گفتار اصلی مطابقت ندارد. این همگام‌سازی بین صدا و زیرنویس یک کار حیاتی است که باید در نظر گرفته شود، زیرا ممکن است مخاطب را از محتوای شما جدا کند، اگر همگام نباشد. آمازون پولی راه حلی برای این چالش از طریق فعال سازی ارائه می دهد علائم گفتاری، که می توانید از آن برای ایجاد یک فایل زیرنویس استفاده کنید که می تواند با خروجی گفتار تولید شده همگام شود.

در این پست، یک راه حل بومی سازی با استفاده از خدمات AWS ML را بررسی می کنیم که در آن از یک ویدیوی اصلی انگلیسی استفاده می کنیم و آن را به اسپانیایی تبدیل می کنیم. ما همچنین روی استفاده از علائم گفتاری برای ایجاد یک فایل زیرنویس همگام‌سازی شده به زبان اسپانیایی تمرکز می‌کنیم.

بررسی اجمالی راه حل

نمودار زیر معماری راه حل را نشان می دهد.

راه حل یک فایل ویدیویی و تنظیمات زبان مقصد را به عنوان ورودی می گیرد و از رونویسی آمازون برای ایجاد رونویسی از ویدیو استفاده می کند. سپس از ترجمه آمازون برای ترجمه رونوشت به زبان مقصد استفاده می کنیم. متن ترجمه شده به عنوان ورودی به Amazon Polly برای تولید جریان صوتی و علائم گفتار در زبان مقصد ارائه می شود. آمازون پولی بازگشت خروجی علامت گفتار در یک جریان JSON با خط محدود، که شامل فیلدهایی مانند زمان، نوع، شروع، پایان و مقدار است. مقدار ممکن است بسته به نوع علامت گفتاری درخواست شده در ورودی متفاوت باشد، مانند SSML, ویزمه، کلمه یا جمله برای هدف مثال خود، ما درخواست کردیم نوع علامت گفتار as word. با این گزینه، آمازون پولی یک جمله را به تک تک کلمات آن در جمله و زمان شروع و پایان آنها در جریان صوتی تقسیم می کند. با استفاده از این ابرداده، علائم گفتار سپس پردازش می‌شوند تا زیرنویس‌های جریان صوتی مربوطه تولید شده توسط Amazon Polly تولید شود.

در نهایت استفاده می کنیم AWS Elemental MediaConvert برای ارائه ویدیوی نهایی با صوتی ترجمه شده و زیرنویس مربوطه.

ویدئوی زیر نتیجه نهایی راه حل را نشان می دهد:

گردش کار توابع مرحله AWS

استفاده می کنیم توابع مرحله AWS برای هماهنگ کردن این روند. شکل زیر نمای سطح بالایی از گردش کار توابع مرحله را نشان می دهد (برخی از مراحل برای وضوح بهتر از نمودار حذف شده اند).

بومی سازی محتوا به چندین زبان با استفاده از خدمات یادگیری ماشینی AWS PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

مراحل گردش کار به شرح زیر است:

  1. یک کاربر فایل ویدیوی منبع را در یک آپلود می کند سرویس ذخیره سازی ساده آمازون سطل (Amazon S3).
  2. La اطلاع رسانی رویداد S3 باعث می شود AWS لامبدا تابع state_machine.py (در نمودار نشان داده نشده است)، که ماشین حالت توابع Step را فراخوانی می کند.
  3. اولین گام، رونویسی صدا، تابع لامبدا را فراخوانی می کند رونویسی.py، که از Amazon Transcript برای تولید رونوشت صدا از ویدیوی منبع استفاده می کند.

کد نمونه زیر نحوه ایجاد یک کار رونویسی را با استفاده از رونویسی آمازون نشان می دهد 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
)

پس از اتمام کار، فایل های خروجی در سطل S3 ذخیره می شوند و فرآیند به مرحله بعدی ترجمه محتوا ادامه می یابد.

  1. La ترجمه رونویسی step تابع Lambda را فراخوانی می کند translate.py که از مترجم آمازون برای ترجمه رونوشت به زبان مقصد استفاده می کند. در اینجا، ما از ترجمه همزمان/زمان واقعی با استفاده از ترجمه_متن عملکرد:
    # 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']

      در اینجا ما از start_speech_synthesis_task روش Amazon Polly Python SDK برای راه اندازی وظیفه سنتز گفتار که صدای Amazon Polly را ایجاد می کند. را تنظیم کردیم OutputFormat به mp3، که به آمازون پولی می گوید برای این تماس API یک جریان صوتی ایجاد کند.

    2. در شاخه دوم تابع 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']

  • ما دوباره از start_speech_synthesis_task روش اما مشخص کنید OutputFormat به json، که به آمازون پولی می گوید برای این تماس API علامت های گفتاری ایجاد کند.

در مرحله بعدی شاخه دوم تابع Lambda را فراخوانی می کنیم generate_subtitles.py، که منطق تولید یک فایل زیرنویس را از خروجی علائم گفتار پیاده سازی می کند.

از ماژول پایتون در فایل استفاده می کند 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، یک سرویس رمزگذاری ویدیویی مبتنی بر فایل با ویژگی های درجه پخش. این امکان را به شما می دهد تا به راحتی محتوای ویدیویی بر اساس تقاضا ایجاد کنید و قابلیت های صوتی و تصویری پیشرفته را با یک رابط وب ساده ترکیب می کند. در اینجا دوباره از پایتون استفاده می کنیم Boto3 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. جستجوی عمودی Ai.

محلول را تست کنید

برای آزمایش این محلول، از بخش کوچکی از موارد زیر استفاده کردیم ویدیوی AWS re:Invent 2017 از یوتیوب، جایی که آمازون رونویسی برای اولین بار معرفی شد. شما همچنین می توانید راه حل را با ویدئوی خود تست کنید. زبان اصلی ویدیوی تست ما انگلیسی است. هنگامی که این راه حل را اجرا می کنید، می توانید تنظیمات صوتی هدف را مشخص کنید یا می توانید از تنظیمات صوتی هدف پیش فرض استفاده کنید که از اسپانیایی برای تولید صدا و زیرنویس استفاده می کند. راه حل یک سطل S3 ایجاد می کند که می توان از آن برای آپلود فایل ویدیویی استفاده کرد.

  1. در کنسول آمازون S3، به سطل بروید PollyBlogBucket.
    بومی سازی محتوا به چندین زبان با استفاده از خدمات یادگیری ماشینی AWS PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.
  2. سطل را انتخاب کنید، به آن بروید /inputVideo دایرکتوری، و فایل ویدئویی را آپلود کنید (راه حل با ویدئوهایی از نوع mp4 تست شده است). در این مرحله، یک اعلان رویداد S3 عملکرد Lambda را فعال می کند، که ماشین حالت را راه اندازی می کند.
  3. در کنسول Step Functions، به دستگاه حالت (ProcessAudioWithSubtitles).
  4. یکی از اجراهای ماشین حالت را برای تعیین محل انتخاب کنید بازرس گراف.

این نتایج اجرای هر ایالت را نشان می دهد. گردش کار توابع مرحله چند دقیقه طول می کشد تا تکمیل شود، پس از آن می توانید بررسی کنید که آیا تمام مراحل با موفقیت انجام شده است یا خیر.

بومی سازی محتوا به چندین زبان با استفاده از خدمات یادگیری ماشینی AWS PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

خروجی را مرور کنید

برای بررسی خروجی، کنسول آمازون S3 را باز کنید و بررسی کنید که آیا فایل صوتی (mp3.) و فایل علامت گفتار (مارک‌ها) در سطل S3 در زیر ذخیره می‌شوند یا خیر. <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

بومی سازی محتوا به چندین زبان با استفاده از خدمات یادگیری ماشینی AWS PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

نمونه زیر نمونه ای از فایل علامت گفتار تولید شده از متن ترجمه شده است:

{"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)
  • شروع - تعدیل در بایت (نه کاراکتر) شروع شی در متن ورودی (بدون احتساب علائم 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 را در مرورگر باز کنید تا ویدیوی اصلی را با گزینه های اضافی برای صدا و زیرنویس مشاهده کنید. می‌توانید تأیید کنید که صدای ترجمه شده و زیرنویس‌ها همگام هستند.

نتیجه

در این پست، نحوه ایجاد نسخه های زبان جدید فایل های ویدئویی بدون نیاز به مداخله دستی را مورد بحث قرار دادیم. سازندگان محتوا می توانند از این فرآیند برای همگام سازی صدا و زیرنویس ویدیوهای خود و دستیابی به مخاطبان جهانی استفاده کنند.

شما به راحتی می توانید این رویکرد را در خطوط لوله تولید خود ادغام کنید تا حجم و مقیاس بزرگ را با توجه به نیازهای خود مدیریت کنید. آمازون پولی استفاده می کند TTS عصبی (NTTS) برای تولید صداهای تبدیل متن به گفتار طبیعی و شبیه انسان. همچنین پشتیبانی می کند تولید گفتار از SSML، که به شما کنترل بیشتری بر نحوه تولید گفتار آمازون پولی از متن ارائه شده می دهد. آمازون پولی نیز یک انواع صداهای مختلف در چندین زبان برای پشتیبانی از نیازهای شما.

با مراجعه به سایت، با خدمات یادگیری ماشینی AWS شروع کنید صفحه محصول، یا مراجعه کنید آزمایشگاه راه حل های یادگیری ماشین آمازون صفحه ای که در آن می توانید با کارشناسان همکاری کنید تا راه حل های یادگیری ماشین را به سازمان خود بیاورید.

منابع اضافی

برای اطلاعات بیشتر در مورد خدمات استفاده شده در این راه حل، به موارد زیر مراجعه کنید:


درباره نویسندگان

بومی سازی محتوا به چندین زبان با استفاده از خدمات یادگیری ماشینی AWS PlatoBlockchain Data Intelligence. جستجوی عمودی Ai. ریگان روزاریو به عنوان یک معمار راه حل در AWS با تمرکز بر شرکت های فناوری آموزش کار می کند. او عاشق کمک به مشتریان برای ساخت راه حل های مقیاس پذیر، بسیار در دسترس و ایمن در AWS Cloud است. او بیش از یک دهه تجربه کار در نقش های مختلف فناوری، با تمرکز بر مهندسی نرم افزار و معماری دارد.

بومی سازی محتوا به چندین زبان با استفاده از خدمات یادگیری ماشینی AWS PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.آنیل کدالی یک معمار راه حل با خدمات وب آمازون است. او با مشتریان AWS EdTech کار می کند و آنها را با بهترین شیوه های معماری برای انتقال بارهای کاری موجود به فضای ابری و طراحی بارهای کاری جدید با رویکرد اول ابری راهنمایی می کند. قبل از پیوستن به AWS، او با خرده فروشان بزرگ کار می کرد تا به آنها در مهاجرت ابری کمک کند.

بومی سازی محتوا به چندین زبان با استفاده از خدمات یادگیری ماشینی AWS PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.پراسانا ساراسواتی کریشنان یک معمار راه حل با خدمات وب آمازون است که با مشتریان EdTech کار می کند. او به آنها کمک می کند تا معماری ابری و استراتژی داده خود را با استفاده از بهترین شیوه ها هدایت کنند. سابقه او در محاسبات توزیع شده، تجزیه و تحلیل داده های بزرگ و مهندسی داده است. او علاقه زیادی به یادگیری ماشینی و پردازش زبان طبیعی دارد.

تمبر زمان:

بیشتر از آموزش ماشین AWS