قم بترجمة المحتوى إلى لغات متعددة باستخدام خدمات التعلم الآلي لـ AWS PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

قم بترجمة المحتوى إلى لغات متعددة باستخدام خدمات التعلم الآلي من AWS

على مدى السنوات القليلة الماضية ، شهدت منصات التعليم عبر الإنترنت زيادة في اعتماد وزيادة الطلب على التعلم المستند إلى الفيديو لأنه يوفر وسيلة فعالة لإشراك المتعلمين. للتوسع في الأسواق الدولية ومخاطبة السكان المتنوعين ثقافيًا ولغويًا ، تبحث الشركات أيضًا في تنويع عروض التعلم الخاصة بهم من خلال توطين المحتوى إلى لغات متعددة. تبحث هذه الشركات عن طرق موثوقة وفعالة من حيث التكلفة لحل حالات استخدام الأقلمة.

يتضمن تعريب المحتوى بشكل أساسي ترجمة الأصوات الأصلية إلى لغات جديدة وإضافة مساعدات بصرية مثل الترجمة. تقليديا ، هذه العملية باهظة التكلفة ، يدوية ، وتستغرق الكثير من الوقت ، بما في ذلك العمل مع متخصصي الترجمة. مع قوة خدمات التعلم الآلي (ML) من AWS مثل الأمازون النسخ, ترجمة أمازونو الأمازون بولي، يمكنك إنشاء حل توطين قابل للتطبيق وفعال من حيث التكلفة. يمكنك استخدام Amazon Transcribe لإنشاء نسخة من تدفقات الصوت والفيديو الموجودة لديك ، ثم ترجمة هذا النص إلى لغات متعددة باستخدام Amazon Translate. يمكنك بعد ذلك استخدام Amazon Polly ، وهي خدمة تحويل النص إلى كلام ، لتحويل النص المترجم إلى كلام بشري يبدو طبيعيًا.

الخطوة التالية في الترجمة هي إضافة ترجمات إلى المحتوى ، والتي يمكن أن تحسن إمكانية الوصول والفهم ، وتساعد المشاهدين على فهم مقاطع الفيديو بشكل أفضل. قد يكون إنشاء الترجمة على محتوى الفيديو أمرًا صعبًا لأن الكلام المترجم لا يتطابق مع توقيت الكلام الأصلي. تعد هذه المزامنة بين الصوت والترجمة مهمة حاسمة يجب مراعاتها لأنها قد تؤدي إلى فصل الجمهور عن المحتوى الخاص بك إذا لم تكن متزامنة. تقدم Amazon Polly حلاً لهذا التحدي من خلال التمكين علامات الكلام، والتي يمكنك استخدامها لإنشاء ملف ترجمة يمكن مزامنته مع إخراج الكلام الذي تم إنشاؤه.

في هذا المنشور ، نراجع أحد حلول الترجمة باستخدام خدمات AWS ML حيث نستخدم مقطع فيديو أصليًا باللغة الإنجليزية ونحوله إلى اللغة الإسبانية. نركز أيضًا على استخدام علامات الكلام لإنشاء ملف ترجمة متزامن باللغة الإسبانية.

حل نظرة عامة

يوضح الرسم البياني التالي بنية الحل.

يأخذ الحل ملف فيديو وإعدادات اللغة المستهدفة كمدخلات ويستخدم Amazon Transcribe لإنشاء نسخ للفيديو. ثم نستخدم Amazon Translate لترجمة النص إلى اللغة الهدف. يتم توفير النص المترجم كمدخل إلى Amazon Polly لإنشاء دفق الصوت وعلامات الكلام في اللغة الهدف. عودة أمازون بولي إخراج علامة الكلام في دفق JSON محدد بسطر ، والذي يحتوي على الحقول مثل الوقت والنوع والبدء والانتهاء والقيمة. قد تختلف القيمة اعتمادًا على نوع علامة الكلام المطلوبة في الإدخال ، مثل اس اس ام ال, com.vismeأو كلمة أو جملة. لغرض مثالنا ، طلبنا نوع علامة الكلام as word. باستخدام هذا الخيار ، تقسم Amazon Polly الجملة إلى كلماتها الفردية في الجملة ووقتي البداية والنهاية في البث الصوتي. باستخدام هذه البيانات الوصفية ، تتم معالجة علامات الكلام بعد ذلك لإنشاء ترجمات لدفق الصوت المقابل الذي تم إنشاؤه بواسطة Amazon Polly.

أخيرا ، نستخدم AWS عنصري MediaConvert لعرض الفيديو النهائي بالصوت المترجم والترجمات المقابلة.

يوضح الفيديو التالي النتيجة النهائية للحل:

سير عمل AWS Step Functions

نستخدم وظائف خطوة AWS لتنظيم هذه العملية. يوضح الشكل التالي طريقة عرض عالية المستوى لسير عمل Step Functions (تم حذف بعض الخطوات من الرسم التخطيطي للحصول على وضوح أفضل).

قم بترجمة المحتوى إلى لغات متعددة باستخدام خدمات التعلم الآلي لـ AWS PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

خطوات سير العمل كالتالي:

  1. يقوم المستخدم بتحميل ملف الفيديو المصدر إلى ملف خدمة تخزين أمازون البسيطة دلو (أمازون S3).
  2. إشعار حدث S3 يؤدي إلى AWS لامدا وظيفة State_machine.py (غير موضح في الرسم التخطيطي) ، والذي يستدعي آلة حالة Step Functions.
  3. الخطوة الأولى، نسخ الصوت، لاستدعاء وظيفة Lambda Transcribe.py، والذي يستخدم Amazon Transcribe لإنشاء نسخة من الصوت من الفيديو المصدر.

يوضح نموذج التعليمات البرمجية التالي كيفية إنشاء وظيفة نسخ باستخدام Amazon Transcribe بوتو 3 بايثون 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. ترجمة النسخ تستدعي الخطوة دالة 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. الخطوة التالية هي Step Functions موازية الدولة ، حيث نقوم بإنشاء فروع متوازية في آلة دولتنا.
    1. في الفرع الأول ، نستدعي دالة Lambda دالة Lambda create_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_ynthetic_task طريقة Amazon Polly Python SDK لتشغيل مهمة تركيب الكلام التي تنشئ صوت Amazon Polly. وضعنا OutputFormat إلى mp3، والذي يخبر Amazon Polly بإنشاء دفق صوتي لاستدعاء API هذا.

    2. في الفرع الثاني ، نستدعي دالة Lambda create_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_ynthetic_task طريقة ولكن تحدد OutputFormat إلى json، والذي يخبر Amazon Polly بإنشاء علامات الكلام لاستدعاء واجهة برمجة التطبيقات هذا.

في الخطوة التالية من الفرع الثاني ، نستدعي دالة Lambda create_subtitles.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. الخطوة الأخيرة ، تحويل وسائل الإعلام، لاستدعاء وظيفة Lambda 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 video من YouTube ، حيث تم تقديم Amazon Transcribe لأول مرة. يمكنك أيضًا اختبار الحل باستخدام الفيديو الخاص بك. اللغة الأصلية لفيديو الاختبار الخاص بنا هي الإنجليزية. عند نشر هذا الحل ، يمكنك تحديد إعدادات الصوت الهدف أو يمكنك استخدام إعدادات الصوت الهدف الافتراضية ، والتي تستخدم اللغة الإسبانية لتوليد الصوت والترجمة. ينشئ الحل حاوية S3 يمكن استخدامها لتحميل ملف الفيديو إليه.

  1. في وحدة التحكم Amazon S3 ، انتقل إلى الحاوية PollyBlogBucket.
    قم بترجمة المحتوى إلى لغات متعددة باستخدام خدمات التعلم الآلي لـ AWS PlatoBlockchain Data Intelligence. البحث العمودي. عاي.
  2. اختر الدلو ، وانتقل إلى /inputVideo الدليل ، وتحميل ملف الفيديو (يتم اختبار الحل باستخدام مقاطع فيديو من النوع mp4). في هذه المرحلة ، يؤدي إشعار حدث S3 إلى تشغيل وظيفة Lambda ، والتي تبدأ تشغيل جهاز الحالة.
  3. في وحدة التحكم في وظائف الخطوة ، استعرض للوصول إلى جهاز الحالة (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"}

في هذا الإخراج ، يتم تقسيم كل جزء من النص من حيث علامات الكلام:

  • الوقت - الطابع الزمني بالمللي ثانية من بداية دفق الصوت المقابل
  • نوع - نوع علامة الكلام (جملة ، كلمة ، viseme ، أو 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/.

كجزء من هذا النشر ، يتم توزيع الفيديو النهائي من خلال ملف الأمازون CloudFront (CDN) ويتم عرضه في المحطة أو في ملف تكوين سحابة AWS وحدة التحكم.

افتح عنوان URL في المستعرض لعرض الفيديو الأصلي مع خيارات إضافية للصوت والترجمة. يمكنك التحقق من أن الصوت المترجم والترجمات متزامنة.

وفي الختام

في هذا المنشور ، ناقشنا كيفية إنشاء إصدارات لغة جديدة لملفات الفيديو دون الحاجة إلى تدخل يدوي. يمكن لمنشئي المحتوى استخدام هذه العملية لمزامنة الصوت والترجمة لمقاطع الفيديو الخاصة بهم والوصول إلى جمهور عالمي.

يمكنك بسهولة دمج هذا النهج في خطوط أنابيب الإنتاج الخاصة بك للتعامل مع الأحجام الكبيرة والقياس وفقًا لاحتياجاتك. يستخدم أمازون بولي العصبية TTS (NTTS) لإنتاج أصوات تحويل النص إلى كلام طبيعية وشبيهة بالبشر. كما أنه يدعم ملفات توليد الكلام من SSML، مما يمنحك تحكمًا إضافيًا في كيفية قيام Amazon Polly بتوليد الكلام من النص المقدم. يوفر Amazon Polly أيضًا ملف مجموعة متنوعة من الأصوات المختلفة بلغات متعددة لدعم احتياجاتك.

ابدأ في استخدام خدمات التعلم الآلي من AWS من خلال زيارة موقع صفحة المنتج، أو قم بإحالة مختبر أمازون لحلول التعلم الآلي الصفحة حيث يمكنك التعاون مع الخبراء لتقديم حلول التعلم الآلي لمؤسستك.

موارد إضافية

لمزيد من المعلومات حول الخدمات المستخدمة في هذا الحل ، يرجى الرجوع إلى ما يلي:


عن المؤلفين

قم بترجمة المحتوى إلى لغات متعددة باستخدام خدمات التعلم الآلي لـ 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