Bản địa hóa nội dung sang nhiều ngôn ngữ bằng dịch vụ máy học AWS PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Bản địa hóa nội dung sang nhiều ngôn ngữ bằng các dịch vụ máy học AWS

Trong vài năm qua, các nền tảng giáo dục trực tuyến đã chứng kiến ​​sự gia tăng trong việc áp dụng và nhu cầu học tập dựa trên video tăng lên vì nó cung cấp một phương tiện hiệu quả để thu hút người học. Để mở rộng ra thị trường quốc tế và giải quyết một nhóm dân cư đa dạng về văn hóa và ngôn ngữ, các doanh nghiệp cũng đang tìm cách đa dạng hóa các dịch vụ học tập của họ bằng cách bản địa hóa nội dung sang nhiều ngôn ngữ. Các doanh nghiệp này đang tìm kiếm những cách đáng tin cậy và hiệu quả về chi phí để giải quyết các trường hợp sử dụng bản địa hóa của họ.

Bản địa hóa nội dung chủ yếu bao gồm dịch giọng nói gốc sang ngôn ngữ mới và thêm các công cụ hỗ trợ trực quan như phụ đề. Theo truyền thống, quá trình này tốn kém nhiều chi phí, thủ công và mất rất nhiều thời gian, kể cả làm việc với các chuyên gia bản địa hóa. Với sức mạnh của các dịch vụ máy học AWS (ML) như Phiên âm Amazon, Amazon DịchAmazon Polly, bạn có thể tạo ra một giải pháp bản địa hóa khả thi và hiệu quả về chi phí. Bạn có thể sử dụng Amazon Transcribe để tạo bản ghi các luồng âm thanh và video hiện có của mình, sau đó dịch bản ghi này sang nhiều ngôn ngữ bằng Amazon Dịch. Sau đó, bạn có thể sử dụng Amazon Polly, một dịch vụ chuyển văn bản thành giọng nói, để chuyển văn bản đã dịch thành giọng nói của con người có âm thanh tự nhiên.

Bước tiếp theo của quá trình bản địa hóa là thêm phụ đề vào nội dung, điều này có thể cải thiện khả năng tiếp cận và khả năng hiểu cũng như giúp người xem hiểu video tốt hơn. Việc tạo phụ đề trên nội dung video có thể gặp nhiều khó khăn vì bài phát biểu đã dịch không khớp với thời gian của bài phát biểu gốc. Việc đồng bộ hóa giữa âm thanh và phụ đề này là một nhiệm vụ quan trọng cần xem xét vì nó có thể ngắt kết nối khán giả khỏi nội dung của bạn nếu chúng không đồng bộ. Amazon Polly đưa ra giải pháp cho thách thức này thông qua việc bật dấu giọng nói, mà bạn có thể sử dụng để tạo tệp phụ đề có thể được đồng bộ hóa với đầu ra giọng nói đã tạo.

Trong bài đăng này, chúng tôi xem xét giải pháp bản địa hóa bằng cách sử dụng các dịch vụ AWS ML, nơi chúng tôi sử dụng video gốc tiếng Anh và chuyển đổi video đó sang tiếng Tây Ban Nha. Chúng tôi cũng tập trung vào việc sử dụng dấu giọng nói để tạo tệp phụ đề được đồng bộ hóa bằng tiếng Tây Ban Nha.

Tổng quan về giải pháp

Sơ đồ sau minh họa kiến ​​trúc giải pháp.

Giải pháp lấy một tệp video và cài đặt ngôn ngữ đích làm đầu vào và sử dụng Amazon Transcribe để tạo bản sao của video. Sau đó, chúng tôi sử dụng Amazon Dịch để dịch bản ghi sang ngôn ngữ đích. Văn bản đã dịch được cung cấp làm đầu vào cho Amazon Polly để tạo luồng âm thanh và dấu giọng nói bằng ngôn ngữ đích. Amazon Polly trở lại đầu ra dấu giọng nói trong luồng JSON được phân tách bằng dòng, chứa các trường như thời gian, loại, bắt đầu, kết thúc và giá trị. Giá trị có thể thay đổi tùy thuộc vào loại dấu giọng nói được yêu cầu trong đầu vào, chẳng hạn như SSML, thị giác, từ hoặc câu. Đối với mục đích của ví dụ của chúng tôi, chúng tôi đã yêu cầu loại dấu giọng nói as word. Với tùy chọn này, Amazon Polly chia một câu thành các từ riêng lẻ trong câu và thời gian bắt đầu và kết thúc của chúng trong luồng âm thanh. Với siêu dữ liệu này, các dấu giọng nói sau đó được xử lý để tạo phụ đề cho luồng âm thanh tương ứng do Amazon Polly tạo ra.

Cuối cùng, chúng tôi sử dụng AWS Elemental MediaChuyển đổi để hiển thị video cuối cùng với âm thanh đã dịch và phụ đề tương ứng.

Video sau đây minh họa kết quả cuối cùng của giải pháp:

Quy trình làm việc của Chức năng từng bước AWS

Chúng tôi sử dụng Chức năng bước AWS để sắp xếp quá trình này. Hình sau đây cho thấy dạng xem cấp cao của dòng công việc Chức năng Bước (một số bước được bỏ qua khỏi sơ đồ để rõ ràng hơn).

Bản địa hóa nội dung sang nhiều ngôn ngữ bằng dịch vụ máy học AWS PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Các bước quy trình làm việc như sau:

  1. Người dùng tải tệp video nguồn lên một Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) xô.
  2. Sản phẩm Thông báo sự kiện S3 kích hoạt AWS Lambda chức năng bang_machine.py (không được hiển thị trong sơ đồ), gọi máy trạng thái Chức năng Bước.
  3. Bước đầu tiên, Phiên âm âm thanh, gọi hàm Lambda phiên âm.py, sử dụng Amazon Transcribe để tạo bản ghi âm thanh từ video nguồn.

Mã mẫu sau đây trình bày cách tạo công việc phiên âm bằng Amazon Transcribe boto3 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
)

Sau khi công việc hoàn tất, các tệp đầu ra được lưu vào thùng S3 và quá trình tiếp tục sang bước dịch nội dung tiếp theo.

  1. Sản phẩm Dịch phiên âm bước gọi hàm Lambda dịch.py sử dụng Amazon Dịch để dịch bản ghi sang ngôn ngữ đích. Ở đây, chúng tôi sử dụng bản dịch đồng bộ / thời gian thực bằng cách sử dụng dịch_text chức năng:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    Bản dịch đồng bộ có giới hạn về kích thước tài liệu mà nó có thể dịch; kể từ khi viết bài này, nó được đặt thành 5,000 byte. Đối với các kích thước tài liệu lớn hơn, hãy xem xét sử dụng một lộ trình không đồng bộ để tạo công việc bằng cách sử dụng bắt đầu_text_translation_job và kiểm tra trạng thái thông qua description_text_translation_job.

  2. Bước tiếp theo là một chức năng bước Song song trạng thái, nơi chúng ta tạo các nhánh song song trong máy trạng thái của chúng ta.
    1. Trong nhánh đầu tiên, chúng ta gọi hàm Lambda là hàm Lambda create_polly_audio.py để tạo luồng âm thanh Amazon Polly của chúng tôi:
      # 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']

      Ở đây chúng tôi sử dụng start_speech_synthesis_task phương pháp của Amazon Polly Python SDK để kích hoạt tác vụ tổng hợp giọng nói tạo ra âm thanh Amazon Polly. Chúng tôi đặt OutputFormat đến mp3, yêu cầu Amazon Polly tạo luồng âm thanh cho lệnh gọi API này.

    2. Trong nhánh thứ hai, chúng ta gọi hàm Lambda create_speech_marks.py để tạo đầu ra dấu giọng nói:
      ....
      # 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']

  • Chúng tôi lại sử dụng start_speech_synthesis_task phương pháp nhưng chỉ định OutputFormat đến json, yêu cầu Amazon Polly tạo dấu giọng nói cho lệnh gọi API này.

Trong bước tiếp theo của nhánh thứ hai, chúng ta gọi hàm Lambda create_subtitles.py, thực hiện logic để tạo tệp phụ đề từ đầu ra dấu giọng nói.

Nó sử dụng mô-đun Python trong tệp webvtt_utils.py. Mô-đun này có nhiều chức năng tiện ích để tạo tệp phụ đề; một trong những phương pháp như vậy get_phrases_from_speechmarks chịu trách nhiệm phân tích cú pháp tệp dấu giọng nói. Cấu trúc JSON đánh dấu lời nói chỉ cung cấp thời gian bắt đầu cho từng từ riêng lẻ. Để tạo thời gian phụ đề cần thiết cho tệp SRT, trước tiên chúng ta tạo các cụm từ gồm khoảng n (trong đó n = 10) từ từ danh sách các từ trong tệp dấu giọng nói. Sau đó, chúng tôi viết chúng vào định dạng tệp SRT, lấy thời gian bắt đầu từ từ đầu tiên trong cụm từ và đối với thời gian kết thúc, chúng tôi sử dụng thời gian bắt đầu của (n + 1) từ và trừ nó đi 1 để tạo mục nhập theo trình tự . Hàm sau tạo các cụm từ để chuẩn bị ghi chúng vào tệp 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. Bước cuối cùng, Chuyển đổi phương tiện truyền thông, gọi hàm Lambda create_mediaconvert_job.py để kết hợp luồng âm thanh từ Amazon Polly và tệp phụ đề với tệp video nguồn để tạo tệp đầu ra cuối cùng, sau đó được lưu trữ trong bộ chứa S3. Bước này sử dụng MediaConvert, một dịch vụ chuyển mã video dựa trên tệp với các tính năng cấp độ phát sóng. Nó cho phép bạn dễ dàng tạo nội dung video theo yêu cầu và kết hợp khả năng video và âm thanh nâng cao với giao diện web đơn giản. Ở đây một lần nữa chúng tôi sử dụng Python boto3 SDK để tạo MediaConvert Công việc:
    ……
    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"])

Điều kiện tiên quyết

Trước khi bắt đầu, bạn phải có các điều kiện tiên quyết sau:

Triển khai giải pháp

Để triển khai giải pháp bằng AWS CDK, hãy hoàn thành các bước sau:

  1. Sao chép kho:
    git clone https://github.com/aws-samples/localize-content-using-aws-ml-services.git 

  2. Để đảm bảo AWS CDK là khởi động, chạy lệnh cdk bootstrap từ gốc của kho lưu trữ:
    $ 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. Thay đổi thư mục làm việc thành thư mục gốc của kho lưu trữ và chạy lệnh sau:
    cdk deploy

Theo mặc định, cài đặt âm thanh mục tiêu được đặt thành tiếng Tây Ban Nha Hoa Kỳ (es-US). Nếu bạn định kiểm tra nó bằng một ngôn ngữ đích khác, hãy sử dụng lệnh sau:

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

Quá trình này mất vài phút để hoàn tất, sau đó, nó sẽ hiển thị một liên kết mà bạn có thể sử dụng để xem tệp video đích với âm thanh đã dịch và phụ đề đã dịch.

Bản địa hóa nội dung sang nhiều ngôn ngữ bằng dịch vụ máy học AWS PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Kiểm tra giải pháp

Để kiểm tra giải pháp này, chúng tôi đã sử dụng một phần nhỏ sau Video AWS re: Invent 2017 từ YouTube, nơi Amazon Transcribe lần đầu tiên được giới thiệu. Bạn cũng có thể kiểm tra giải pháp bằng video của riêng bạn. Ngôn ngữ gốc của video thử nghiệm của chúng tôi là tiếng Anh. Khi bạn triển khai giải pháp này, bạn có thể chỉ định cài đặt âm thanh mục tiêu hoặc bạn có thể sử dụng cài đặt âm thanh mục tiêu mặc định, sử dụng tiếng Tây Ban Nha để tạo âm thanh và phụ đề. Giải pháp tạo một thùng S3 có thể được sử dụng để tải tệp video lên.

  1. Trên bảng điều khiển Amazon S3, điều hướng đến nhóm PollyBlogBucket.
    Bản địa hóa nội dung sang nhiều ngôn ngữ bằng dịch vụ máy học AWS PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.
  2. Chọn nhóm, điều hướng đến /inputVideo và tải lên tệp video (giải pháp được thử nghiệm với các video loại mp4). Tại thời điểm này, một thông báo sự kiện S3 sẽ kích hoạt chức năng Lambda, chức năng này khởi động máy trạng thái.
  3. Trên bảng điều khiển Chức năng Bước, duyệt đến máy trạng thái (ProcessAudioWithSubtitles).
  4. Chọn một trong các lần chạy của máy trạng thái để xác định vị trí Trình kiểm tra đồ thị.

Điều này hiển thị kết quả chạy cho mỗi trạng thái. Quy trình Chức năng Bước mất vài phút để hoàn thành, sau đó bạn có thể xác minh xem tất cả các bước đã hoàn thành thành công hay chưa.

Bản địa hóa nội dung sang nhiều ngôn ngữ bằng dịch vụ máy học AWS PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Xem lại kết quả đầu ra

Để xem lại kết quả đầu ra, hãy mở bảng điều khiển Amazon S3 và kiểm tra xem tệp âm thanh (.mp3) và tệp dấu giọng nói (.marks) có được lưu trữ trong bộ chứa S3 dưới <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

Bản địa hóa nội dung sang nhiều ngôn ngữ bằng dịch vụ máy học AWS PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Sau đây là một mẫu tệp dấu giọng nói được tạo từ văn bản đã dịch:

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

Trong đầu ra này, mỗi phần của văn bản được chia nhỏ theo dấu giọng nói:

  • thời gian - Dấu thời gian tính bằng mili giây kể từ đầu luồng âm thanh tương ứng
  • kiểu - Loại dấu giọng nói (câu, từ, viseme hoặc SSML)
  • Bắt đầu - Độ lệch tính bằng byte (không phải ký tự) của phần bắt đầu đối tượng trong văn bản đầu vào (không bao gồm dấu viseme)
  • cuối - Phần bù theo byte (không phải ký tự) của phần cuối đối tượng trong văn bản đầu vào (không bao gồm dấu viseme)
  • giá trị - Các từ riêng lẻ trong câu

Tệp phụ đề đã tạo được ghi trở lại nhóm S3. Bạn có thể tìm thấy tệp dưới <ROOT_S3_BUCKET>/<UID>/subtitlesOutput/. Kiểm tra tệp phụ đề; nội dung phải tương tự như văn bản sau:

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

Sau khi tệp phụ đề và tệp âm thanh được tạo, tệp video nguồn cuối cùng sẽ được tạo bằng MediaConvert. Kiểm tra bảng điều khiển MediaConvert để xác minh xem trạng thái công việc có COMPLETE.

Khi công việc MediaConvert hoàn tất, tệp video cuối cùng sẽ được tạo và lưu trở lại nhóm S3, bạn có thể tìm thấy tệp này trong <ROOT_S3_BUCKET>/<UID>/convertedAV/.

Là một phần của quá trình triển khai này, video cuối cùng được phân phối thông qua Amazon CloudFront (CDN) và hiển thị trong thiết bị đầu cuối hoặc trong Hình thành đám mây AWS giao diện điều khiển.

Mở URL trong trình duyệt để xem video gốc với các tùy chọn bổ sung cho âm thanh và phụ đề. Bạn có thể xác minh rằng âm thanh đã dịch và phụ đề được đồng bộ hóa.

Kết luận

Trong bài đăng này, chúng tôi đã thảo luận về cách tạo phiên bản ngôn ngữ mới của tệp video mà không cần can thiệp thủ công. Người sáng tạo nội dung có thể sử dụng quy trình này để đồng bộ hóa âm thanh và phụ đề của video của họ và tiếp cận khán giả toàn cầu.

Bạn có thể dễ dàng tích hợp phương pháp này vào đường ống sản xuất của riêng mình để xử lý khối lượng và quy mô lớn theo nhu cầu của bạn. Amazon Polly sử dụng TTS thần kinh (NTTS) để tạo ra giọng nói chuyển văn bản thành giọng nói tự nhiên và giống con người. Nó cũng hỗ trợ tạo giọng nói từ SSML, giúp bạn kiểm soát thêm cách Amazon Polly tạo giọng nói từ văn bản được cung cấp. Amazon Polly cũng cung cấp một nhiều giọng nói khác nhau bằng nhiều ngôn ngữ để hỗ trợ nhu cầu của bạn.

Bắt đầu với các dịch vụ máy học AWS bằng cách truy cập vào trang sản phẩm, hoặc tham khảo Phòng thí nghiệm Giải pháp Máy học của Amazon trang nơi bạn có thể cộng tác với các chuyên gia để mang lại các giải pháp máy học cho tổ chức của mình.

Tài nguyên bổ sung

Để biết thêm thông tin về các dịch vụ được sử dụng trong giải pháp này, hãy tham khảo phần sau:


Giới thiệu về tác giả

Bản địa hóa nội dung sang nhiều ngôn ngữ bằng dịch vụ máy học AWS PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái. Reagan Rosario làm việc với tư cách là kiến ​​trúc sư giải pháp tại AWS, tập trung vào các công ty công nghệ giáo dục. Anh ấy thích giúp khách hàng xây dựng các giải pháp có thể mở rộng, khả dụng cao và an toàn trong Đám mây AWS. Ông có hơn một thập kỷ kinh nghiệm làm việc trong nhiều vai trò công nghệ, tập trung vào kỹ thuật phần mềm và kiến ​​trúc.

Bản địa hóa nội dung sang nhiều ngôn ngữ bằng dịch vụ máy học AWS PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Anil Kodali là một Kiến trúc sư Giải pháp với Dịch vụ Web của Amazon. Anh ấy làm việc với các khách hàng của AWS EdTech, hướng dẫn họ các phương pháp hay nhất về kiến ​​trúc để di chuyển khối lượng công việc hiện có lên đám mây và thiết kế khối lượng công việc mới với cách tiếp cận dựa trên đám mây. Trước khi gia nhập AWS, anh ấy đã làm việc với các nhà bán lẻ lớn để giúp họ di chuyển qua đám mây.

Bản địa hóa nội dung sang nhiều ngôn ngữ bằng dịch vụ máy học AWS PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Prasanna Saraswathi Krishnan là một Kiến trúc sư giải pháp của Amazon Web Services làm việc với các khách hàng của EdTech. Anh ấy giúp họ định hướng kiến ​​trúc đám mây và chiến lược dữ liệu bằng các phương pháp hay nhất. Nền tảng của anh ấy là về máy tính phân tán, phân tích dữ liệu lớn và kỹ thuật dữ liệu. Anh ấy đam mê học máy và xử lý ngôn ngữ tự nhiên.

Dấu thời gian:

Thêm từ Học máy AWS