Zlokalizuj treść na wiele języków za pomocą usług uczenia maszynowego AWS PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Zlokalizuj treść na wiele języków za pomocą usług uczenia maszynowego AWS

W ciągu ostatnich kilku lat internetowe platformy edukacyjne odnotowały wzrost popularności i wzrost popytu na naukę w oparciu o wideo, ponieważ oferuje ona skuteczne medium do angażowania uczniów. Aby rozszerzyć działalność na rynki międzynarodowe i dotrzeć do zróżnicowanej kulturowo i językowo populacji, firmy poszukują również dywersyfikacji swojej oferty edukacyjnej poprzez lokalizowanie treści na wiele języków. Firmy te szukają niezawodnych i opłacalnych sposobów rozwiązywania problemów związanych z lokalizacją.

Lokalizacja treści obejmuje głównie tłumaczenie oryginalnych głosów na nowe języki i dodawanie pomocy wizualnych, takich jak napisy. Tradycyjnie proces ten jest kosztowny, ręczny i zajmuje dużo czasu, w tym współpracę ze specjalistami od lokalizacji. Dzięki mocy usług uczenia maszynowego AWS (ML), takich jak Amazon Transcribe, Tłumacz Amazon, Amazon Polly, możesz stworzyć realne i opłacalne rozwiązanie lokalizacyjne. Możesz użyć usługi Amazon Transscribe, aby utworzyć transkrypcję istniejących strumieni audio i wideo, a następnie przetłumaczyć tę transkrypcję na wiele języków za pomocą Tłumacza Amazon. Następnie możesz użyć Amazon Polly, usługi zamiany tekstu na mowę, aby przekonwertować przetłumaczony tekst na naturalnie brzmiącą mowę ludzką.

Kolejnym krokiem lokalizacji jest dodanie napisów do treści, co może poprawić dostępność i zrozumienie oraz pomóc widzom lepiej zrozumieć filmy. Tworzenie napisów w treści wideo może być trudne, ponieważ przetłumaczona mowa nie pasuje do oryginalnego czasu wypowiedzi. Ta synchronizacja między dźwiękiem a napisami jest krytycznym zadaniem do rozważenia, ponieważ może odłączyć odbiorców od treści, jeśli nie są zsynchronizowani. Amazon Polly oferuje rozwiązanie tego wyzwania poprzez umożliwienie znaki mowy, którego można użyć do utworzenia pliku napisów, który można zsynchronizować z wygenerowaną mową.

W tym poście opisujemy rozwiązanie lokalizacyjne przy użyciu usług AWS ML, w którym używamy oryginalnego angielskiego filmu i konwertujemy go na hiszpański. Skupiamy się również na używaniu znaków mowy do tworzenia zsynchronizowanego pliku napisów w języku hiszpańskim.

Omówienie rozwiązania

Poniższy schemat ilustruje architekturę rozwiązania.

Rozwiązanie pobiera plik wideo i ustawienia języka docelowego jako dane wejściowe i wykorzystuje Amazon Transscribe do tworzenia transkrypcji wideo. Następnie korzystamy z Tłumacza Amazon, aby przetłumaczyć transkrypcję na język docelowy. Przetłumaczony tekst jest dostarczany jako dane wejściowe do Amazon Polly w celu wygenerowania strumienia audio i znaków mowy w języku docelowym. Amazon Polly powraca wyjście znaku mowy w rozdzielonym wierszami strumieniu JSON, który zawiera pola, takie jak czas, typ, początek, koniec i wartość. Wartość może się różnić w zależności od typu znaku mowy wymaganego w danych wejściowych, na przykład SSML, wisem, słowo lub zdanie. Na potrzeby naszego przykładu poprosiliśmy o typ znaku mowy as word. Dzięki tej opcji Amazon Polly dzieli zdanie na poszczególne słowa w zdaniu oraz ich czas rozpoczęcia i zakończenia w strumieniu audio. Za pomocą tych metadanych znaki mowy są następnie przetwarzane w celu wygenerowania napisów dla odpowiedniego strumienia audio generowanego przez Amazon Polly.

Wreszcie używamy Podstawowa konwersja mediów AWS aby wyrenderować końcowy film z przetłumaczonym dźwiękiem i odpowiednimi napisami.

Poniższy film przedstawia ostateczny wynik rozwiązania:

Przepływ pracy funkcji krokowych AWS

Używamy pliki Funkcje kroków AWS aby zaaranżować ten proces. Poniższy rysunek przedstawia widok wysokiego poziomu przepływu pracy Funkcje kroków (niektóre kroki zostały pominięte na diagramie dla lepszej przejrzystości).

Zlokalizuj treść na wiele języków za pomocą usług uczenia maszynowego AWS PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Kroki przepływu pracy są następujące:

  1. Użytkownik przesyła źródłowy plik wideo do Usługa Amazon Simple Storage Łyżka (Amazon S3).
  2. Połączenia Powiadomienie o zdarzeniu S3 wyzwala AWS Lambda funkcjonować state_machine.py (nie pokazano na diagramie), który wywołuje maszynę stanów Step Functions.
  3. Pierwszy krok, Transkrybuj dźwięk, wywołuje funkcję Lambda transkrypcja.py, który wykorzystuje usługę Amazon Transscribe do generowania transkrypcji dźwięku ze źródła wideo.

Poniższy przykładowy kod pokazuje, jak utworzyć zadanie transkrypcji za pomocą usługi Amazon Transscribe Boto3 Pakiet SDK Pythona:

response = transcribe.start_transcription_job(
    TranscriptionJobName = jobName,
    MediaFormat=media_format,
    Media = {"MediaFileUri": "s3://"+bucket+"/"+mediaconvert_video_filename},
    OutputBucketName=bucket,
    OutputKey=outputKey,
    IdentifyLanguage=True
)

Po zakończeniu zadania pliki wyjściowe są zapisywane w zasobniku S3, a proces przechodzi do następnego kroku tłumaczenia treści.

  1. Połączenia Przetłumacz transkrypcję step wywołuje funkcję Lambda przetłumacz.py który używa Tłumacza Amazon do tłumaczenia transkrypcji na język docelowy. Tutaj używamy tłumaczenia synchronicznego/w czasie rzeczywistym za pomocą przetłumacz_tekst funkcjonować:
    # Real-time translation
    response = translate.translate_text(
        Text=transcribe_text,
        SourceLanguageCode=source_language_code,
        TargetLanguageCode=target_language_code,
    )
    

    Tłumaczenie synchroniczne ma ograniczenia dotyczące rozmiaru dokumentu, który może przetłumaczyć; w chwili pisania tego tekstu jest ustawiony na 5,000 bajtów. W przypadku większych rozmiarów dokumentów rozważ użycie asynchronicznej trasy tworzenia zadania za pomocą start_text_translation_job i sprawdzanie statusu przez description_text_translation_job.

  2. Następnym krokiem jest Step Functions Parallel stan, w którym tworzymy równoległe gałęzie w naszej maszynie stanów.
    1. W pierwszej gałęzi wywołujemy funkcję Lambda funkcję Lambda generuj_polly_audio.py aby wygenerować nasz strumień audio 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']

      Tutaj używamy start_speech_synthesis_task metoda zestawu SDK Amazon Polly Python do wyzwalania zadania syntezy mowy, które tworzy dźwięk Amazon Polly. Ustawiliśmy OutputFormat do mp3, który informuje Amazon Polly o wygenerowaniu strumienia audio dla tego wywołania interfejsu API.

    2. W drugiej gałęzi wywołujemy funkcję Lambda generuj_znaki_mowy.py aby wygenerować wyjście znaków mowy:
      ....
      # 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']

  • Ponownie używamy start_speech_synthesis_task metoda, ale sprecyzuj OutputFormat do json, który nakazuje Amazon Polly generowanie znaków mowy dla tego wywołania interfejsu API.

W kolejnym kroku drugiej gałęzi wywołujemy funkcję Lambda generuj_napisy.py, który implementuje logikę generowania pliku napisów z danych wyjściowych znaków mowy.

Używa modułu Python w pliku webvtt_utils.py. Ten moduł ma wiele funkcji narzędziowych do tworzenia pliku napisów; jedna taka metoda get_phrases_from_speechmarks odpowiada za parsowanie pliku znaków mowy. Struktura JSON znaków mowy zapewnia tylko czas rozpoczęcia dla każdego słowa z osobna. Aby utworzyć czas napisów wymagany dla pliku SRT, najpierw tworzymy frazy zawierające około n (gdzie n=10) słów z listy słów w pliku znaczników mowy. Następnie zapisujemy je do formatu pliku SRT, biorąc czas początkowy od pierwszego słowa we frazie, a dla czasu końcowego używamy czasu początkowego słowa (n+1) i odejmujemy go przez 1, aby utworzyć wpis sekwencyjny . Poniższa funkcja tworzy frazy w ramach przygotowań do ich zapisu do pliku 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. Ostatni krok, Konwersja mediów, wywołuje funkcję Lambda utwórz_mediaconvert_job.py aby połączyć strumień audio z Amazon Polly i plik napisów ze źródłowym plikiem wideo w celu wygenerowania końcowego pliku wyjściowego, który jest następnie przechowywany w wiadrze S3. Ten krok wykorzystuje MediaConvert, usługa transkodowania wideo oparta na plikach z funkcjami klasy emisyjnej. Umożliwia łatwe tworzenie treści wideo na żądanie i łączy zaawansowane funkcje wideo i audio z prostym interfejsem internetowym. Tutaj znowu używamy Pythona Boto3 SDK do tworzenia MediaConvert stanowisko:
    ……
    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"])

Wymagania wstępne

Przed rozpoczęciem musisz spełnić następujące wymagania wstępne:

Wdróż rozwiązanie

Aby wdrożyć rozwiązanie za pomocą AWS CDK, wykonaj następujące kroki:

  1. Sklonuj składnica:
    git clone https://github.com/aws-samples/localize-content-using-aws-ml-services.git 

  2. Aby upewnić się, że AWS CDK jest bootstrapped, uruchom polecenie cdk bootstrap z katalogu głównego repozytorium:
    $ 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. Zmień katalog roboczy na katalog główny repozytorium i uruchom następujące polecenie:
    cdk deploy

Domyślnie docelowe ustawienia dźwięku są ustawione na hiszpański amerykański (es-US). Jeśli planujesz przetestować go z innym językiem docelowym, użyj następującego polecenia:

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

Proces trwa kilka minut, po czym wyświetla link, za pomocą którego można wyświetlić docelowy plik wideo z przetłumaczonym dźwiękiem i przetłumaczonymi napisami.

Zlokalizuj treść na wiele języków za pomocą usług uczenia maszynowego AWS PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Przetestuj rozwiązanie

Aby przetestować to rozwiązanie, wykorzystaliśmy niewielką część poniższych AWS re:Wymyśl wideo 2017 z YouTube, gdzie po raz pierwszy wprowadzono Amazon Transscribe. Możesz również przetestować rozwiązanie za pomocą własnego filmu. Oryginalnym językiem naszego testowego filmu jest język angielski. Podczas wdrażania tego rozwiązania można określić docelowe ustawienia dźwięku lub użyć domyślnych docelowych ustawień dźwięku, które wykorzystują język hiszpański do generowania dźwięku i napisów. Rozwiązanie tworzy zasobnik S3, którego można użyć do przesłania pliku wideo.

  1. W konsoli Amazon S3 przejdź do zasobnika PollyBlogBucket.
    Zlokalizuj treść na wiele języków za pomocą usług uczenia maszynowego AWS PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.
  2. Wybierz wiadro, przejdź do /inputVideo katalogu i wgraj plik wideo (rozwiązanie jest testowane z filmami typu mp4). W tym momencie powiadomienie o zdarzeniu S3 wyzwala funkcję Lambda, która uruchamia maszynę stanów.
  3. W konsoli Step Functions przejdź do maszyny stanów (ProcessAudioWithSubtitles).
  4. Wybierz jeden z przebiegów maszyny stanów, aby zlokalizować Inspektor wykresów.

Pokazuje wyniki uruchomienia dla każdego stanu. Przepływ pracy funkcji kroków zajmuje kilka minut, po czym można sprawdzić, czy wszystkie kroki zostały pomyślnie wykonane.

Zlokalizuj treść na wiele języków za pomocą usług uczenia maszynowego AWS PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Przejrzyj wyniki

Aby przejrzeć dane wyjściowe, otwórz konsolę Amazon S3 i sprawdź, czy plik audio (.mp3) i plik znaku mowy (.marks) są przechowywane w zasobniku S3 pod <ROOT_S3_BUCKET>/<UID>/synthesisOutput/.

Zlokalizuj treść na wiele języków za pomocą usług uczenia maszynowego AWS PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Poniżej znajduje się przykładowy plik znaków mowy wygenerowany z przetłumaczonego tekstu:

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

W tym wyniku każda część tekstu jest podzielona na znaki mowy:

  • czas – Znacznik czasu w milisekundach od początku odpowiedniego strumienia audio
  • rodzaj – Rodzaj znaku mowy (zdanie, słowo, viseme lub SSML)
  • początek – Przesunięcie w bajtach (nie znakach) początku obiektu w tekście wejściowym (bez znaków viseme)
  • zakończenia – Przesunięcie w bajtach (nie znakach) końca obiektu w tekście wejściowym (bez znaków viseme)
  • wartość – Poszczególne słowa w zdaniu

Wygenerowany plik napisów jest zapisywany z powrotem do zasobnika S3. Możesz znaleźć plik pod <ROOT_S3_BUCKET>/<UID>/subtitlesOutput/. Sprawdź plik napisów; treść powinna być zbliżona do poniższego tekstu:

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

Po wygenerowaniu pliku napisów i pliku audio ostateczny źródłowy plik wideo jest tworzony za pomocą MediaConvert. Sprawdź konsolę MediaConvert, aby sprawdzić, czy stan zadania to COMPLETE.

Po zakończeniu zadania MediaConvert, końcowy plik wideo jest generowany i zapisywany z powrotem do wiadra S3, który można znaleźć pod <ROOT_S3_BUCKET>/<UID>/convertedAV/.

W ramach tego wdrożenia końcowy film jest rozpowszechniany za pośrednictwem Amazon CloudFront (CDN) i wyświetlane w terminalu lub w Tworzenie chmury AWS Konsola.

Otwórz adres URL w przeglądarce, aby wyświetlić oryginalny film z dodatkowymi opcjami dźwięku i napisów. Możesz sprawdzić, czy przetłumaczony dźwięk i napisy są zsynchronizowane.

Wnioski

W tym poście omówiliśmy, jak tworzyć nowe wersje językowe plików wideo bez konieczności ręcznej interwencji. Twórcy treści mogą wykorzystać ten proces do zsynchronizowania dźwięku i napisów w swoich filmach i dotarcia do odbiorców na całym świecie.

Możesz łatwo zintegrować to podejście z własnymi rurociągami produkcyjnymi, aby obsługiwać duże ilości i skalować zgodnie z Twoimi potrzebami. Amazon Polly używa Neuronowy TTS (NTTS) do tworzenia naturalnych i podobnych do ludzkich głosów zamiany tekstu na mowę. Obsługuje również generowanie mowy z SSML, który zapewnia dodatkową kontrolę nad sposobem, w jaki Amazon Polly generuje mowę z dostarczonego tekstu. Amazon Polly zapewnia również różnorodność różnych głosów w wielu językach, aby zaspokoić Twoje potrzeby.

Zacznij korzystać z usług uczenia maszynowego AWS, odwiedzając stronę Strona produktu, lub odnieś się do Laboratorium rozwiązań do uczenia maszynowego Amazon Amazon Strona, na której możesz współpracować z ekspertami, aby wprowadzić rozwiązania uczenia maszynowego do swojej organizacji.

Dodatkowe zasoby

Aby uzyskać więcej informacji o usługach wykorzystywanych w tym rozwiązaniu, zapoznaj się z następującymi informacjami:


O autorach

Zlokalizuj treść na wiele języków za pomocą usług uczenia maszynowego AWS PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI. Reagana Rosario pracuje jako architekt rozwiązań w AWS skupiając się na firmach zajmujących się technologiami edukacyjnymi. Uwielbia pomagać klientom w tworzeniu skalowalnych, wysoce dostępnych i bezpiecznych rozwiązań w chmurze AWS. Ma ponad dziesięcioletnie doświadczenie w pracy na różnych stanowiskach technologicznych, koncentrując się na inżynierii oprogramowania i architekturze.

Zlokalizuj treść na wiele języków za pomocą usług uczenia maszynowego AWS PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Anila Kodali jest architektem rozwiązań w Amazon Web Services. Współpracuje z klientami AWS EdTech, prowadząc ich z najlepszymi praktykami architektonicznymi dotyczącymi migracji istniejących obciążeń do chmury i projektowania nowych obciążeń z podejściem cloud-first. Przed dołączeniem do AWS pracował z dużymi detalistami, aby pomóc im w migracji do chmury.

Zlokalizuj treść na wiele języków za pomocą usług uczenia maszynowego AWS PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Prasanna Saraswati Krysznana jest architektem rozwiązań z Amazon Web Services współpracującym z klientami EdTech. Pomaga im kierować architekturą chmury i strategią danych z wykorzystaniem najlepszych praktyk. Jego doświadczenie obejmuje przetwarzanie rozproszone, analitykę dużych zbiorów danych i inżynierię danych. Pasjonuje się uczeniem maszynowym i przetwarzaniem języka naturalnego.

Znak czasu:

Więcej z Uczenie maszynowe AWS