Zephyrnet-logo

Creëer een serverloze pijplijn om grote documenten te vertalen met Amazon Translate

Datum:

In onze vorige post, hebben we beschreven hoe u documenten kunt vertalen met behulp van de realtime vertaal-API oppompen van Amazon Vertalen en AWS Lambda. Deze methode werkt echter mogelijk niet voor bestanden die te groot zijn. Ze kunnen tijd te veel tijd kosten, waardoor de Time-outlimiet van 15 minuten van Lambda-functies. Men kan gebruiken batch-API, maar dit is alleen beschikbaar in zeven AWS-regio's (vanaf de publicatie van deze blog). Om vertaling van grote bestanden mogelijk te maken in regio's waar batchvertaling niet wordt ondersteund, hebben we de volgende oplossing gemaakt.

In dit bericht helpen we u bij het vertalen van grote documenten.

Architectuur overzicht

Vergeleken met de architectuur in de post Documenten vertalen met Amazon Translate, AWS Lambda en de nieuwe Batch Translate API, heeft onze architectuur één belangrijk verschil: de aanwezigheid van AWS Stap Functies, een serverloze functie-orkestrator die het eenvoudig maakt om Lambda-functies en meerdere services te sequensen in bedrijfskritische applicaties. Step Functions stelt ons in staat om de uitvoering van de vertaling bij te houden, nieuwe pogingen te beheren in geval van fouten of time-outs, en gebeurtenisgestuurde workflows te orkestreren.

Het volgende diagram illustreert onze oplossingsarchitectuur.

Deze gebeurtenisgestuurde architectuur toont de stroom van acties wanneer een nieuw document in de invoer terechtkomt Amazon eenvoudige opslagservice (Amazon S3) emmer. Deze gebeurtenis activeert de eerste Lambda-functie, die fungeert als het startpunt van de Step Functions-workflow.

Het volgende diagram illustreert de toestandsmachine en de stroom van acties.

De Process Document Lambda-functie wordt geactiveerd wanneer de statusmachine start; deze functie voert alle activiteiten uit die nodig zijn om de documenten te vertalen. Het opent het bestand vanuit de S3-bucket, downloadt het lokaal in de omgeving waarin de functie wordt uitgevoerd, leest de bestandsinhoud, extraheert korte segmenten uit het document die door de real-time vertaal-API kunnen worden geleid en gebruikt de uitvoer van de API om het vertaalde document te maken.

Andere mechanismen zijn in de code geïmplementeerd om fouten te voorkomen, zoals het afhandelen van een Amazon Translate-beperkingsfout en een time-out van de Lambda-functie door actie te ondernemen en de gemaakte voortgang op te slaan in een /temp-map 30 seconden voordat de functie een time-out krijgt. Deze mechanismen zijn van cruciaal belang voor het verwerken van grote tekstdocumenten.

Wanneer de functie de verwerking heeft voltooid, uploadt het het vertaalde tekstdocument in de output S3-bucket in een map voor de doeltaalcode, zoals en voor Engels. De workflow Step Functions eindigt wanneer de Lambda-functie het invoerbestand verplaatst van de map /drop naar de map /processed binnen de input S3-bucket.

We hebben nu alle onderdelen om dit in actie te proberen.

Implementeer de oplossing met behulp van AWS CloudFormation

U kunt deze oplossing in uw AWS-account implementeren door het meegeleverde AWS CloudFormatie stapel. De CloudFormation-sjabloon voorziet in de benodigde resources die nodig zijn voor de oplossing. De sjabloon maakt de stapel in de regio us-east-1, maar u kunt de sjabloon gebruiken om uw stapel te maken in elke regio waar Amazon Translate beschikbaar is. Op het moment van schrijven is Amazon Translate beschikbaar in 16 commerciële regio's en AWS GovCloud (US-West). Voor de meest recente lijst met regio's, zie de Lijst met regionale AWS-services.

Voer de volgende stappen uit om de applicatie te implementeren:

  1. Start de CloudFormation-sjabloon door te kiezen Start Stack:

  1. Kies Volgende.

Of kies op de AWS CloudFormation-console Stack maken met nieuwe resources (standaard), kiezen Amazon S3-URL voer als de sjabloonbron in https://s3.amazonaws.com/aws-ml-blog/artifacts/create-a-serverless-pipeline-to-translate-large-docs-amazon-translate/translate.ymlen kies Volgende.

  1. Voor Stack naam, voer een unieke stacknaam in voor dit account; bijvoorbeeld serverloze documentvertaling.
  2. Voor InputBucketnaam, voer een unieke naam in voor de S3-bucket die de stapel maakt; bijvoorbeeld serverloze-vertaling-invoer-bucket.

De documenten worden naar deze bucket geüpload voordat ze worden vertaald. Gebruik alleen kleine letters en geen spaties wanneer u de naam van de invoer S3-bucket opgeeft. Met deze bewerking wordt een nieuwe bucket gemaakt, dus gebruik niet de naam van een bestaande bucket. Voor meer informatie, zie Regels voor naamgeving van buckets.

  1. Voor OutputBucketnaam, voer een unieke naam in voor uw output S3-bucket; bijvoorbeeld serverloze-vertaling-output-bucket.

In deze bucket worden de documenten opgeslagen nadat ze zijn vertaald. Volg dezelfde naamgevingsregels als uw invoerbucket.

  1. Voor BronTaalCode, voer de taalcode in waarin uw invoerdocumenten staan; voor dit bericht voeren we auto in om de dominante taal te detecteren.
  2. Voor DoelTaalCode, voer de taalcode in waarin u uw vertaalde documenten wilt hebben; bijvoorbeeld en voor Engels.

Zie voor meer informatie over ondersteunde taalcodes Ondersteunde talen en taalcodes.

  1. Kies Volgende.

  1. Op de Configureer stapelopties pagina, stel eventuele aanvullende parameters voor de stapel in, inclusief tags.
  2. Kies Volgende.
  3. kies Ik erken dat AWS CloudFormation IAM-bronnen met aangepaste namen kan maken.
  4. Kies Maak een stapel.

Het maken van een stapel duurt ongeveer een minuut.

Vertaal uw documenten

U kunt nu een tekstdocument uploaden dat u wilt vertalen naar de input S3-bucket, onder de drop/ folder.

De volgende schermafbeelding toont ons voorbeelddocument, dat een zin in het Grieks bevat.

Deze actie start de workflow en het vertaalde document verschijnt automatisch in de uitvoer S3-bucket, in de map voor de doeltaal (in dit voorbeeld nl). Hoe lang het bestand verschijnt, hangt af van de grootte van het invoerdocument.

Ons vertaalde bestand ziet eruit als de volgende schermafbeelding.

U kunt de voortgang van de statusmachine ook volgen op de Step Functions-console of met de relevante API-aanroepen.

Laten we de oplossing proberen met een groter bestand. Het bestand test_large.txt bevat inhoud van meerdere AWS-blogberichten en andere inhoud die in het Duits is geschreven (we gebruiken bijvoorbeeld alle tekst uit het bericht AWS DeepLens (versie 2019) komt uit Duitsland en andere landen).

Dit bestand is veel groter dan het bestand in de vorige test. We uploaden het bestand in de drop/folder van de input bucket.

Op de Step Functions-console kunt u bevestigen dat de pijplijn actief is door de status van de statusmachine te controleren.

Op de Grafiek inspecteur pagina kunt u op elk moment meer inzicht krijgen in de status van de statusmachine. Wanneer u een stap kiest, wordt de Stap uitvoer tabblad toont het voltooiingspercentage.

Wanneer de statusmachine compleet is, kunt u het vertaalde bestand ophalen uit de uitvoerbucket.

De volgende schermafbeelding laat zien dat ons bestand in het Engels is vertaald.

Probleem oplossen

Als u het vertaalde document niet ziet in de output S3-bucket, vinkt u dit aan Amazon CloudWatch-logboeken voor de overeenkomstige Lambda-functie en zoek naar mogelijke fouten. Voor kostenoptimalisatie gebruikt de oplossing standaard 256 MB geheugen voor de Process Document Lambda-functie. Als u tijdens het verwerken van een groot document Runtime.ExitError ziet voor de functie in de CloudWatch-logboeken, vergroot u het functiegeheugen.

Andere overwegingen

Het is de moeite waard om de kracht van de automatische taaldetectiefunctie van Amazon Translate, vastgelegd als automatisch in het SourceLanguageCode-veld dat we hebben opgegeven bij het implementeren van de CloudFormation-stack. In de vorige voorbeelden hebben we een bestand ingediend met tekst in het Grieks en een ander bestand in het Duits, en beide zijn met succes in het Engels vertaald. Met onze oplossing hoeft u de stapel niet opnieuw te implementeren (of de brontaalcode handmatig te wijzigen in de Lambda-functie) elke keer dat u een bronbestand met een andere taal uploadt. Amazon Translate detecteert de brontaal en start het vertaalproces. Als u na de implementatie de doeltaalcode moet wijzigen, kunt u een nieuwe CloudFormation-stack implementeren of de bestaande stack bijwerken.

Deze oplossing maakt gebruik van de synchrone real-time API van Amazon Translate. Het behandelt de maximale documentgrootte (5,000 bytes) door het document op te splitsen in alinea's (eindigend met een teken voor een nieuwe regel). Indien nodig splitst het elke alinea verder op in zinnen (eindigend met een punt). U kunt deze scheidingstekens wijzigen op basis van uw brontekst. Deze oplossing ondersteunt maximaal 5,000 bytes voor een enkele zin en verwerkt alleen UTF-8-geformatteerde tekstdocumenten met .txt- of .text-bestandsextensies. U kunt de Python-code in de Process Document Lambda-functie wijzigen om verschillende bestandsindelingen te verwerken.

Naast de Amazon S3-kosten brengt de oplossing gebruikskosten met zich mee van Amazon Translate, Lambda en Step Functions. Voor meer informatie, zie Amazon Translate-prijzen, Amazon S3-prijzen, AWS Lambda-prijzen en AWS Step Functions-prijzen.

Conclusie

In dit bericht lieten we de implementatie zien van een serverloze pijplijn die documenten in realtime kan vertalen met behulp van de real-time vertaling kenmerk van Amazon Translate en de kracht van Step Functions als orkestrators van individuele Lambda-functies. Deze oplossing zorgt voor meer controle en voor het toevoegen van geavanceerde functionaliteit aan uw applicaties. Bouw uw pijplijn voor geavanceerde documentvertaling met Amazon Translate!

Voor meer informatie, zie de Amazon Translate-ontwikkelaarshandleiding en Amazon Translate-bronnen. Als Amazon Translate nieuw voor je is, probeer het dan met onze gratis laag, die de eerste 2 maanden gratis 12 miljoen tekens per maand biedt, te beginnen vanaf je eerste vertaalverzoek.


Over de auteurs

Jay Rao is Senior Solutions Architect bij AWS. Hij geeft graag technische begeleiding aan klanten en helpt hen bij het ontwerpen en implementeren van oplossingen op AWS.

 Seb Kaspzak is een oplossingsarchitect bij AWS. Hij brengt zijn dagen bij Amazon door met het helpen van klanten bij het oplossen van hun complexe zakelijke problemen door gebruik te maken van Amazon-technologieën.

Nikiforos Botis is een oplossingsarchitect bij AWS. Hij helpt zijn klanten graag bij het slagen van hun cloudtraject en is vooral geïnteresseerd in AI/ML-technologieën.

Bobbie Couhbor is een Senior Solutions Architect voor digitale innovatie bij AWS en helpt klanten bij het oplossen van uitdagende problemen met opkomende technologie, zoals machine learning, robotica en IoT.

Coinsmart. Beste Bitcoin-beurs in Europa
Bron: https://aws.amazon.com/blogs/machine-learning/create-a-serverless-pipeline-to-translate-large-documents-with-amazon-translate/

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?