התמקם תוכן למספר שפות באמצעות שירותי למידת מכונה של AWS PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

התאם תוכן למספר שפות באמצעות שירותי למידת מכונה של AWS

במהלך השנים האחרונות, פלטפורמות חינוך מקוונות ראו עלייה באימוץ ועלייה בביקוש ללמידה מבוססת וידיאו מכיוון שהיא מציעה אמצעי יעיל למשוך לומדים. כדי להתרחב לשווקים בינלאומיים ולתת מענה לאוכלוסייה מגוונת מבחינה תרבותית ולשונית, עסקים בוחנים גם לגוון את היצע הלמידה שלהם על ידי לוקליזציה של תוכן למספר שפות. עסקים אלה מחפשים דרכים אמינות וחסכוניות לפתור את מקרי השימוש שלהם בלקליזציה.

לוקליזציה של תוכן כוללת בעיקר תרגום קולות מקוריים לשפות חדשות והוספת עזרים ויזואליים כגון כתוביות. באופן מסורתי, תהליך זה אינו כרוך בעלויות, ידני ולוקח הרבה זמן, כולל עבודה עם מומחי לוקליזציה. עם העוצמה של שירותי למידת מכונה של AWS (ML) כגון אמזון תעתיק, אמזון תרגם, ו אמזון פולי, אתה יכול ליצור פתרון לוקליזציה בר-קיימא וחסכוני. אתה יכול להשתמש ב- Amazon Transcribe כדי ליצור תמליל של זרמי האודיו והווידאו הקיימים שלך, ולאחר מכן לתרגם את התמליל הזה למספר שפות באמצעות Amazon Translate. לאחר מכן תוכל להשתמש באמזון פולי, שירות טקסט לדיבור, כדי להמיר את הטקסט המתורגם לדיבור אנושי בעל צליל טבעי.

השלב הבא של לוקליזציה הוא הוספת כתוביות לתוכן, מה שיכול לשפר את הנגישות וההבנה, ולעזור לצופים להבין טוב יותר את הסרטונים. יצירת כתוביות בתוכן וידאו יכולה להיות מאתגרת מכיוון שהדיבור המתורגם אינו תואם לתזמון הדיבור המקורי. סנכרון זה בין אודיו וכתוביות הוא משימה קריטית שיש לקחת בחשבון מכיוון שהוא עלול לנתק את הקהל מהתוכן שלך אם הם לא מסונכרנים. אמזון פולי מציעה פתרון לאתגר זה באמצעות אפשור סימני דיבור, שבו אתה יכול להשתמש כדי ליצור קובץ כתוביות שניתן לסנכרן עם פלט הדיבור שנוצר.

בפוסט זה, אנו סוקרים פתרון לוקליזציה באמצעות שירותי AWS ML שבו אנו משתמשים בסרטון מקורי באנגלית וממירים אותו לספרדית. אנו מתמקדים גם בשימוש בסימני דיבור ליצירת קובץ כתוביות מסונכרנות בספרדית.

סקירת פתרונות

התרשים הבא ממחיש את ארכיטקטורת הפתרונות.

הפתרון לוקח קובץ וידאו ואת הגדרות שפת היעד כקלט ומשתמש ב- Amazon Transcribe כדי ליצור תמלול של הסרטון. לאחר מכן אנו משתמשים באמזון Translate כדי לתרגם את התמליל לשפת היעד. הטקסט המתורגם מסופק כקלט לאמזון פולי כדי ליצור את זרם השמע וסימני הדיבור בשפת היעד. אמזון פולי חוזרת פלט סימני דיבור בזרם JSON מופרד בשורות, המכיל את השדות כגון זמן, סוג, התחלה, סוף וערך. הערך עשוי להשתנות בהתאם לסוג סימן הדיבור המבוקש בקלט, כגון SSML, viseme, מילה או משפט. לצורך הדוגמה שלנו, ביקשנו את סוג סימן דיבור as word. עם אפשרות זו, אמזון פולי מפרקת משפט למילים בודדות שלו במשפט וזמני ההתחלה והסיום שלהן בזרם האודיו. עם מטא נתונים אלה, סימני הדיבור מעובדים כדי ליצור את הכתוביות עבור זרם האודיו המתאים שנוצר על ידי אמזון פולי.

לבסוף, אנו משתמשים AWS Elemental MediaConvert כדי להציג את הסרטון הסופי עם האודיו המתורגם והכתוביות המתאימות.

הסרטון הבא מדגים את התוצאה הסופית של הפתרון:

AWS Step Functions זרימת עבודה

אנו משתמשים פונקציות שלב AWS לתזמר את התהליך הזה. האיור הבא מציג תצוגה ברמה גבוהה של זרימת העבודה של Step Functions (חלק מהשלבים הושמטו מהדיאגרמה לצורך בהירות טובה יותר).

התמקם תוכן למספר שפות באמצעות שירותי למידת מכונה של AWS PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

שלבי זרימת העבודה הם כדלקמן:

  1. משתמש מעלה את קובץ הווידאו המקור ל- an שירות אחסון פשוט של אמזון (אמזון S3) דלי.
  2. השמיים הודעה על אירוע S3 מעורר את AWS למבדה פונקציה state_machine.py (לא מוצג בתרשים), אשר מפעיל את מכונת המצב של Step Functions.
  3. הצעד הראשון, תמלול אודיו, מפעיל את פונקציית Lambda transcribe.py, המשתמשת ב-Amazon Transcribe כדי ליצור תמליל של האודיו מסרטון המקור.

הקוד לדוגמה הבא מדגים כיצד ליצור עבודת תמלול באמצעות Amazon Transcribe 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. השמיים תרגם תמלול שלב מפעיל את פונקציית Lambda translate.py שמשתמשת באמזון Translate כדי לתרגם את התמליל לשפת היעד. כאן אנו משתמשים בתרגום סינכרוני/זמן אמת באמצעות ה translate_text פוּנקצִיָה:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    לתרגום סינכרוני יש מגבלות על גודל המסמך שהוא יכול לתרגם; נכון לכתיבת שורות אלה, הוא מוגדר ל-5,000 בתים. עבור גדלי מסמכים גדולים יותר, שקול להשתמש במסלול אסינכרוני ליצירת העבודה באמצעות start_text_translation_job ובדיקת המצב באמצעות describe_text_translation_job.

  2. השלב הבא הוא שלב פונקציות מקביל מדינה, שבה אנו יוצרים ענפים מקבילים במכונת המדינה שלנו.
    1. בענף הראשון, אנו מפעילים את פונקציית Lambda את פונקציית Lambda gener_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 כדי להפעיל את משימת סינתזת הדיבור שיוצרת את האודיו של Amazon Polly. קבענו את OutputFormat ל mp3, שאומר לאמזון פולי ליצור זרם שמע עבור קריאת ה-API הזו.

    2. בענף השני, אנו מפעילים את פונקציית Lambda gener_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, שאומר לאמזון פולי ליצור סימני דיבור עבור קריאת ה-API הזו.

בשלב הבא של הענף השני, אנו מפעילים את פונקציית Lambda gener_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 לשלב את זרם האודיו מאמזון פולי ואת קובץ הכתוביות עם קובץ הווידאו המקור כדי ליצור את קובץ הפלט הסופי, אשר מאוחסן לאחר מכן בדלי S3. שלב זה משתמש MediaConvert, שירות המרת וידאו מבוסס קבצים עם תכונות בדרגת שידור. היא מאפשרת ליצור בקלות תוכן וידאו לפי דרישה ומשלבת יכולות וידאו ואודיו מתקדמות עם ממשק אינטרנט פשוט. כאן שוב אנו משתמשים ב-Python 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. חיפוש אנכי. איי.

בדוק את הפתרון

כדי לבדוק פתרון זה, השתמשנו בחלק קטן מהאפשרויות הבאות סרטון 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/.

כחלק מהפריסה הזו, הסרטון הסופי מופץ באמצעות א אמזון CloudFront קישור (CDN) ומוצג בטרמינל או ב- AWS CloudFormation קונסולה.

פתח את כתובת האתר בדפדפן כדי להציג את הסרטון המקורי עם אפשרויות נוספות לשמע וכתוביות. אתה יכול לוודא שהשמע והכתוביות המתורגמות מסונכרנות.

סיכום

בפוסט זה, דנו כיצד ליצור גרסאות שפה חדשות של קבצי וידאו ללא צורך בהתערבות ידנית. יוצרי תוכן יכולים להשתמש בתהליך זה כדי לסנכרן את האודיו והכתוביות של הסרטונים שלהם ולהגיע לקהל עולמי.

אתה יכול בקלות לשלב גישה זו בצינורות הייצור שלך כדי לטפל בהיקפים גדולים ולהתנסות בהתאם לצרכים שלך. אמזון פולי משתמשת TTS עצבי (NTTS) להפיק קולות טקסט לדיבור טבעיים וכמו אנושיים. זה גם תומך הפקת דיבור מ-SSML, המעניק לך שליטה נוספת על האופן שבו אמזון פולי מייצרת דיבור מהטקסט שסופק. אמזון פולי מספקת גם א מגוון קולות שונים במספר שפות כדי לתמוך בצרכים שלך.

התחל עם שירותי למידת מכונה של AWS על ידי ביקור באתר דף מוצר, או עיין ב מעבדת פתרונות למידת מכונות של אמזון דף שבו תוכל לשתף פעולה עם מומחים כדי להביא פתרונות למידת מכונה לארגון שלך.

משאבים נוספים

למידע נוסף על השירותים המשמשים בפתרון זה, עיין בפרטים הבאים:


על המחברים

התמקם תוכן למספר שפות באמצעות שירותי למידת מכונה של AWS PlatoBlockchain Data Intelligence. חיפוש אנכי. איי. רייגן רוסריו עובד כאדריכל פתרונות ב-AWS תוך התמקדות בחברות טכנולוגיות חינוך. הוא אוהב לעזור ללקוחות לבנות פתרונות ניתנים להרחבה, זמינים ומאובטחים בענן AWS. יש לו יותר מעשור של ניסיון בעבודה במגוון תפקידים טכנולוגיים, עם התמקדות בהנדסת תוכנה וארכיטקטורה.

התמקם תוכן למספר שפות באמצעות שירותי למידת מכונה של AWS PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.אניל קודאלי הוא אדריכל פתרונות עם שירותי האינטרנט של אמזון. הוא עובד עם לקוחות AWS EdTech, מנחה אותם עם שיטות עבודה מומלצות ארכיטקטוניות להעברת עומסי עבודה קיימים לענן ותכנון עומסי עבודה חדשים בגישה של ענן ראשון. לפני שהצטרף ל-AWS, הוא עבד עם קמעונאים גדולים כדי לעזור להם בהעברת הענן שלהם.

התמקם תוכן למספר שפות באמצעות שירותי למידת מכונה של AWS PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.פראסנה סראסוואתי קרישנה הוא אדריכל פתרונות עם שירותי האינטרנט של אמזון שעובד עם לקוחות EdTech. הוא עוזר להם להניע את ארכיטקטורת הענן ואסטרטגיית הנתונים שלהם באמצעות שיטות עבודה מומלצות. הרקע שלו הוא במחשוב מבוזר, ניתוח ביג דאטה והנדסת נתונים. הוא נלהב מלמידת מכונה ועיבוד שפה טבעית.

בול זמן:

עוד מ למידת מכונות AWS