Les clients AWS des secteurs de la santé, des services financiers, du secteur public et d'autres secteurs stockent des milliards de documents sous forme d'images ou de PDF dans Service de stockage simple Amazon (Amazon S3). Cependant, ils ne sont pas en mesure d'obtenir des informations telles que l'utilisation des informations verrouillées dans les documents pour les grands modèles de langage (LLM) ou d'effectuer des recherches jusqu'à ce qu'ils extraient le texte, les formulaires, les tableaux et autres données structurées. Avec le traitement intelligent des documents (IDP) AWS utilisant des services d'IA tels que Extrait d'Amazon, vous pouvez profiter de la technologie d'apprentissage automatique (ML) de pointe pour traiter rapidement et précisément les données des PDF ou des images de documents (TIFF, JPEG, PNG). Une fois le texte extrait des documents, vous pouvez l'utiliser pour affiner un modèle de base, résumer les données à l’aide d’un modèle de base, ou envoyez-le à une base de données.
Dans cet article, nous nous concentrons sur le traitement d'une grande collection de documents en fichiers texte brut et sur leur stockage dans Amazon S3. Nous vous proposons deux solutions différentes pour ce cas d’utilisation. Le premier vous permet d'exécuter un script Python à partir de n'importe quel serveur ou instance, y compris un notebook Jupyter ; c'est le moyen le plus rapide de commencer. La deuxième approche est un déploiement clé en main de divers composants d'infrastructure utilisant Kit de développement AWS Cloud (AWSCDK) constructions. La construction AWS CDK fournit un cadre résilient et flexible pour traiter vos documents et créer un pipeline IDP de bout en bout. Grâce à l'utilisation d'AWS CDK, vous pouvez étendre ses fonctionnalités pour inclure la rédaction, stocker la sortie dans Amazon OpenSearch, ou ajoutez un personnalisé AWS Lambda fonctionner avec votre propre logique métier.
Ces deux solutions vous permettent de traiter rapidement plusieurs millions de pages. Avant d'exécuter l'une de ces solutions à grande échelle, nous vous recommandons de tester avec un sous-ensemble de vos documents pour vous assurer que les résultats répondent à vos attentes. Dans les sections suivantes, nous décrivons d'abord la solution de script, suivie de la solution de construction AWS CDK.
Solution 1 : utiliser un script Python
Cette solution traite les documents pour le texte brut via Amazon Textract aussi rapidement que le service le permet, en espérant qu'en cas d'échec dans le script, le processus reprendra là où il s'était arrêté. La solution utilise trois services différents : Amazon S3, Amazon DynamoDB, et Amazon Text.
Le diagramme suivant illustre la séquence des événements dans le script. Une fois le script terminé, un état d'achèvement ainsi que le temps nécessaire seront renvoyés à la console du studio SageMaker.
Nous avons regroupé cette solution dans un Script .ipynb ainsi que script .py. Vous pouvez utiliser n'importe laquelle des solutions déployables selon vos besoins.
Pré-requis
Pour exécuter ce script à partir d'un notebook Jupyter, le Gestion des identités et des accès AWS (IAM) attribué au bloc-notes doit disposer d'autorisations lui permettant d'interagir avec DynamoDB, Amazon S3 et Amazon Textract. Le conseil général est de fournir des autorisations de moindre privilège pour chacun de ces services à votre AmazonSageMaker-ExecutionRole
rôle. Pour en savoir plus, reportez-vous à Démarrez avec les politiques gérées par AWS et évoluez vers les autorisations de moindre privilège.
Vous pouvez également exécuter ce script à partir d'autres environnements, tels qu'un Cloud de calcul élastique Amazon (Amazon EC2) ou un conteneur que vous géreriez, à condition que Python, Pip3 et le AWS SDK pour Python (Boto3) sont installés. Encore une fois, les mêmes politiques IAM doivent être appliquées pour permettre au script d'interagir avec les différents services gérés.
Procédure pas à pas
Pour implémenter cette solution, vous devez d'abord cloner le référentiel GitHub.
Vous devez définir les variables suivantes dans le script avant de pouvoir l'exécuter :
- table_de suivi – Il s'agit du nom de la table DynamoDB qui sera créée.
- bucket_entrée – Il s'agit de votre emplacement source dans Amazon S3 qui contient les documents que vous souhaitez envoyer à Amazon Textract pour la détection de texte. Pour cette variable, fournissez le nom du compartiment, tel que
mybucket
. - bucket_sortie – Il s'agit de stocker l'emplacement où vous souhaitez qu'Amazon Textract écrive les résultats. Pour cette variable, fournissez le nom du compartiment, tel que
myoutputbucket
. - _input_prefix (facultatif) – Si vous souhaitez sélectionner certains fichiers dans un dossier de votre compartiment S3, vous pouvez spécifier ce nom de dossier comme préfixe d'entrée. Sinon, laissez la valeur par défaut vide pour tout sélectionner.
Le scénario est le suivant :
Le schéma de table DynamoDB suivant est créé lors de l'exécution du script :
Lorsque le script est exécuté pour la première fois, il vérifiera si la table DynamoDB existe et la créera automatiquement si nécessaire. Une fois la table créée, nous devons la remplir avec une liste de références d'objets de document d'Amazon S3 que nous souhaitons traiter. De par sa conception, le script énumérera les objets dans la zone spécifiée. input_bucket
et remplissez automatiquement notre table avec leurs noms une fois exécutés. Il faut environ 10 minutes pour énumérer plus de 100,000 3 documents et renseigner ces noms dans la table DynamoDB à partir du script. Si vous avez des millions d'objets dans un compartiment, vous pouvez également utiliser la fonction d'inventaire d'Amazon SXNUMX qui génère un fichier CSV de noms, puis remplir la table DynamoDB de cette liste avec votre propre script à l'avance et ne pas utiliser la fonction appelée fetchAllObjectsInBucketandStoreName
en le commentant. Pour en savoir plus, reportez-vous à Configuration de l'inventaire Amazon S3.
Comme mentionné précédemment, il existe à la fois une version notebook et une version script Python. Le bloc-notes est le moyen le plus simple de commencer ; exécutez simplement chaque cellule du début à la fin.
Si vous décidez d'exécuter le script Python à partir d'une CLI, il est recommandé d'utiliser un multiplexeur de terminal tel que tmux. Cela permet d'empêcher le script de s'arrêter si votre session SSH se termine. Par exemple: tmux new -d ‘python3 textractFeeder.py’
.
Ce qui suit est la point d'entrée du script; à partir de là, vous pouvez commenter les méthodes inutiles :
Les champs suivants sont définis lorsque le script remplit la table DynamoDB :
- NomObjet – Le nom du document situé dans Amazon S3 qui sera envoyé à Amazon Textract
- Nom du compartiment – Le compartiment dans lequel l’objet document est stocké
Ces deux champs doivent être renseignés si vous décidez d'utiliser un fichier CSV du rapport d'inventaire S3 et d'ignorer le remplissage automatique qui se produit dans le script.
Maintenant que la table est créée et remplie avec les références d'objet de document, le script est prêt à commencer à appeler Amazon Textract. StartDocumentTextDetection
API. Amazon Textract, à l'instar d'autres services gérés, dispose d'un limite par défaut sur les API appelées transactions par seconde (TPS). Si nécessaire, vous pouvez demander une augmentation de quota depuis la console Amazon Textract. Le code est conçu pour utiliser plusieurs threads simultanément lors de l'appel d'Amazon Textract afin de maximiser le débit du service. Vous pouvez changer cela dans le code en modifiant le threadCountforTextractAPICall
variable. Par défaut, cela est défini sur 20 threads. Le script lira initialement 200 lignes de la table DynamoDB et les stockera dans une liste en mémoire enveloppée dans une classe pour la sécurité des threads. Chaque thread appelant est ensuite démarré et s'exécute dans son propre couloir. Fondamentalement, le thread appelant Amazon Textract récupérera un élément de la liste en mémoire qui contient notre référence d'objet. Il appellera alors l'asynchrone start_document_text_detection
API et attendez l'accusé de réception avec l'ID du travail. L'ID de tâche est ensuite mis à jour sur la ligne DynamoDB pour cet objet, et le thread se répétera en récupérant l'élément suivant de la liste.
Voici le code principal de l'orchestration scénario:
Les threads appelants continueront à se répéter jusqu'à ce qu'il n'y ait plus d'éléments dans la liste, auquel cas les threads s'arrêteront chacun. Lorsque tous les threads fonctionnant dans leurs couloirs se sont arrêtés, les 200 lignes suivantes de DynamoDB sont récupérées et un nouvel ensemble de 20 threads est démarré, et l'ensemble du processus se répète jusqu'à ce que chaque ligne qui ne contient pas d'ID de travail soit récupérée de DynamoDB et mis à jour. Si le script plante en raison d'un problème inattendu, il peut alors être réexécuté à partir du orchestrate()
méthode. Cela garantit que les threads continueront à traiter les lignes contenant des ID de travail vides. Notez que lors de la réexécution du orchestrate()
Après l'arrêt du script, il est possible que quelques documents soient à nouveau envoyés à Amazon Textract. Ce nombre sera égal ou inférieur au nombre de threads en cours d'exécution au moment du crash.
Lorsqu'il n'y a plus de lignes contenant un ID de tâche vide dans la table DynamoDB, le script s'arrête. Toute la sortie JSON d'Amazon Textract pour tous les objets se trouvera dans le output_bucket
par défaut sous le textract_output
dossier. Chaque sous-dossier dans textract_output
sera nommé avec l'ID de travail qui correspond à l'ID de travail stocké dans la table DynamoDB pour cet objet. Dans le dossier ID de travail, vous trouverez le JSON, qui sera nommé numériquement à partir de 1 et peut potentiellement s'étendre sur des fichiers JSON supplémentaires qui seraient étiquetés 2, 3, etc. La répartition des fichiers JSON est le résultat de documents denses ou de plusieurs pages, dans lesquels la quantité de contenu extrait dépasse la taille JSON par défaut d'Amazon Textract de 1,000 XNUMX blocs. Faire référence à Block pour plus d’informations sur les blocs. Ces fichiers JSON contiendront toutes les métadonnées Amazon Textract, y compris le texte extrait des documents.
Vous pouvez trouver la version du bloc-notes de code Python et le script de cette solution dans GitHub.
Nettoyer
Une fois le script Python terminé, vous pouvez réduire les coûts en arrêtant ou en arrêtant le Amazon SageMakerStudio cahier ou conteneur que vous avez lancé.
Passons maintenant à notre deuxième solution pour les documents à grande échelle.
Solution 2 : utilisez une construction AWS CDK sans serveur
Cette solution utilise Fonctions d'étape AWS et les fonctions Lambda pour orchestrer le pipeline IDP. Nous utilisons le Constructions IDP AWS CDK, ce qui facilite le travail avec Amazon Textract à grande échelle. De plus, nous utilisons un Carte distribuée Step Functions pour parcourir tous les fichiers du compartiment S3 et lancer le traitement. La première fonction Lambda détermine le nombre de pages de vos documents. Cela permet au pipeline d'utiliser automatiquement l'API synchrone (pour les documents d'une seule page) ou asynchrone (pour les documents de plusieurs pages). Lorsque vous utilisez l'API asynchrone, une fonction Lambda supplémentaire est appelée pour tous les fichiers JSON qu'Amazon Textract produira pour toutes vos pages dans un seul fichier JSON afin de permettre à vos applications en aval de travailler facilement avec les informations.
Cette solution contient également deux fonctions Lambda supplémentaires. La première fonction analyse le texte du JSON et l'enregistre sous forme de fichier texte dans Amazon S3. La deuxième fonction analyse le JSON et le stocke pour les métriques sur la charge de travail.
Le diagramme suivant illustre le workflow Step Functions.
Pré-requis
Cette base de code utilise le AWS CDK et nécessite Docker. Vous pouvez le déployer à partir d'un AWSCloud9 instance, sur laquelle AWS CDK et Docker sont déjà configurés.
Procédure pas à pas
Pour implémenter cette solution, vous devez d'abord cloner le dépôt.
Après avoir cloné le dépôt, installez les dépendances :
Utilisez ensuite le code suivant pour déployer la pile AWS CDK :
Vous devez fournir à la fois le compartiment source et le préfixe source (l'emplacement des fichiers que vous souhaitez traiter) pour cette solution.
Une fois le déploiement terminé, accédez à la console Step Functions, où vous devriez voir la machine d'état. ServerlessIDPArchivePipeline
.
Ouvrez la page de détails de la machine d'état et sur le Exécutions onglet, choisissez Lancer l'exécution.
Selectionnez Lancer l'exécution à nouveau pour exécuter la machine à états.
Après avoir démarré la machine d'état, vous pouvez surveiller le pipeline en examinant l'exécution de la carte. Vous verrez un Statut de traitement de l'article section comme la capture d’écran suivante. Comme vous pouvez le voir, ceci est conçu pour exécuter et suivre ce qui a réussi et ce qui a échoué. Ce processus se poursuivra jusqu'à ce que tous les documents aient été lus.
Avec cette solution, vous devriez être en mesure de traiter des millions de fichiers dans votre compte AWS sans vous soucier de savoir comment déterminer correctement quels fichiers envoyer à quelle API ou si les fichiers corrompus échouent dans votre pipeline. Grâce à la console Step Functions, vous pourrez regarder et surveiller vos fichiers en temps réel.
Nettoyer
Une fois l'exécution de votre pipeline terminée, pour le nettoyer, vous pouvez revenir dans votre projet et saisir la commande suivante :
Cela supprimera tous les services déployés pour ce projet.
Conclusion
Dans cet article, nous avons présenté une solution qui facilite la conversion des images de vos documents et de vos PDF en fichiers texte. Il s’agit d’une condition préalable essentielle à l’utilisation de vos documents pour l’IA et la recherche génératives. Pour en savoir plus sur l'utilisation du texte pour entraîner ou affiner vos modèles de base, reportez-vous à Affinez Llama 2 pour la génération de texte sur Amazon SageMaker JumpStart. Pour utiliser avec la recherche, reportez-vous à Implémentez un index de recherche de documents intelligent avec Amazon Textract et Amazon OpenSearch. Pour en savoir plus sur les capacités avancées de traitement de documents offertes par les services AWS AI, reportez-vous à Conseils pour le traitement intelligent des documents sur AWS.
À propos des auteurs
Tim Condello est un architecte senior de solutions spécialisées en intelligence artificielle (IA) et en apprentissage automatique (ML) chez Amazon Web Services (AWS). Son objectif est le traitement du langage naturel et la vision par ordinateur. Tim aime prendre les idées des clients et les transformer en solutions évolutives.
David Girling est un architecte senior de solutions IA/ML avec plus de vingt ans d'expérience dans la conception, la direction et le développement de systèmes d'entreprise. David fait partie d'une équipe de spécialistes qui s'efforce d'aider les clients à apprendre, à innover et à utiliser ces services hautement performants avec leurs données pour leurs cas d'utilisation.
- Contenu propulsé par le référencement et distribution de relations publiques. Soyez amplifié aujourd'hui.
- PlatoData.Network Ai générative verticale. Autonomisez-vous. Accéder ici.
- PlatoAiStream. Intelligence Web3. Connaissance Amplifiée. Accéder ici.
- PlatonESG. Carbone, Technologie propre, Énergie, Environnement, Solaire, La gestion des déchets. Accéder ici.
- PlatoHealth. Veille biotechnologique et essais cliniques. Accéder ici.
- La source: https://aws.amazon.com/blogs/machine-learning/create-a-document-lake-using-large-scale-text-extraction-from-documents-with-amazon-textract/
- :possède
- :est
- :ne pas
- :où
- $UP
- 000
- 1
- 10
- 100
- 12
- 20
- 200
- 7
- 710
- 8
- a
- Capable
- A Propos
- accès
- Compte
- avec précision
- ajouter
- Supplémentaire
- En outre
- avancer
- Avancée
- Avantage
- Après
- encore
- AI
- Services d'IA
- AI / ML
- Tous
- permettre
- permet
- le long de
- déjà
- aussi
- Amazon
- Amazon EC2
- Amazon Sage Maker
- Extrait d'Amazon
- Amazon Web Services
- Amazon Web Services (AWS)
- montant
- an
- des analyses
- ainsi que
- tous
- api
- Apis
- applications
- appliqué
- une approche
- d'environ
- SONT
- artificiel
- intelligence artificielle
- Intelligence artificielle (AI)
- AS
- attribué
- At
- auto
- automatiquement
- AWS
- RETOUR
- base
- En gros
- BE
- était
- before
- milliards
- Blocs
- Bootstrap
- tous les deux
- construire
- construit
- la performance des entreprises
- by
- Appelez-nous
- appelé
- demandeur
- appel
- CAN
- capacités
- capable
- maisons
- cas
- cellule
- certaines
- Change
- vérifier
- Selectionnez
- classe
- espace extérieur plus propre,
- le cloud
- code
- base de code
- collection
- commentaire
- Commentant
- complet
- achèvement
- composants électriques
- calcul
- ordinateur
- Vision par ordinateur
- Console
- construire
- contiennent
- Contenant
- contient
- contenu
- continuer
- convertir
- correspond
- Costs
- pourriez
- Crash
- engendrent
- créée
- Customiser
- des clients
- Clients
- données
- Base de données
- David
- décider
- Réglage par défaut
- dépendances
- déployer
- déployé
- déploiement
- décrire
- Conception
- un
- conception
- détails
- Détection
- Déterminer
- détermine
- développement
- Développement
- différent
- distribué
- Docker
- document
- INSTITUTIONNELS
- Ne fait pas
- down
- deux
- chacun
- Plus tôt
- non plus
- permet
- end-to-end
- se termine
- Entrer
- Entreprise
- entrée
- environnements
- égal
- événements
- Chaque
- exemple
- dépasse
- exécution
- existe
- attente
- attentes
- d'experience
- étendre
- extrait
- extraction
- Échoué
- défaut
- Échec
- Fonctionnalité
- few
- Des champs
- Déposez votre dernière attestation
- Fichiers
- la traduction de documents financiers
- services financiers
- Trouvez
- finition
- Prénom
- première fois
- flexible
- Focus
- se concentre
- suivi
- Abonnement
- suit
- Pour
- document
- trouvé
- Fondation
- Framework
- De
- fonction
- fonctions
- Gain
- Général
- génère
- génération
- génératif
- IA générative
- obtenez
- Go
- l'orientation
- arrive
- Vous avez
- la médecine
- aider
- ici
- très
- sa
- Comment
- How To
- Cependant
- HTML
- http
- HTTPS
- i
- ID
- et idées cadeaux
- Identite
- ids
- if
- illustre
- satellite
- Mettre en oeuvre
- in
- comprendre
- Y compris
- Améliore
- indice
- secteurs
- leader de l'industrie
- d'information
- Infrastructure
- possible
- initier
- innovons
- contribution
- idées.
- installer
- Installé
- instance
- Intelligence
- Intelligent
- Traitement intelligent des documents
- interagir
- développement
- inventaire
- IT
- articles
- SES
- Emploi
- jpg
- json
- ACTIVITES
- lac
- Voie
- langue
- gros
- grande échelle
- conduisant
- APPRENTISSAGE
- apprentissage
- Laisser
- à gauche
- moins
- comme
- Liste
- Flamme
- situé
- emplacement
- fermé
- logique
- plus long
- recherchez-
- click
- machine learning
- Entrée
- a prendre une
- FAIT DU
- gérer
- gérés
- de nombreuses
- Localisation
- Maximisez
- Découvrez
- mentionné
- Métadonnées
- méthode
- méthodes
- Métrique
- des millions
- Minutes
- ML
- modèle
- numériques jumeaux (digital twin models)
- Surveiller
- PLUS
- (en fait, presque toutes)
- Bougez
- plusieurs
- must
- prénom
- Nommé
- noms
- Nature
- Traitement du langage naturel
- NAVIGUER
- Besoin
- nécessaire
- Nouveauté
- next
- aucune
- noter
- cahier
- maintenant
- nombre
- objet
- objets
- of
- de rabais
- présenté
- on
- ONE
- d'exploitation
- or
- orchestration
- Autre
- autrement
- nos
- ande
- sortie
- plus de
- propre
- emballé
- page
- pages
- partie
- /
- autorisations
- en particulier pendant la préparation
- pipeline
- Platon
- Intelligence des données Platon
- PlatonDonnées
- Point
- politiques
- peuplé
- Post
- défaillances
- l'éventualité
- présenté
- empêcher
- Problème
- processus
- les process
- traitement
- produire
- Projet
- correctement
- fournir
- à condition de
- fournit
- public
- mettre
- Python
- le plus rapide
- vite.
- raw
- Lire
- solutions
- réal
- en temps réel
- recommander
- recommandé
- record
- Articles
- reportez-vous
- référence
- répéter
- rapport
- dépôt
- nécessaire
- conditions
- Exigences
- a besoin
- résilient
- résultat
- Résultats
- Rôle
- RANGÉE
- Courir
- pour le running
- fonctionne
- des
- Sécurité
- sagemaker
- même
- Épargnez
- évolutive
- Escaliers intérieurs
- scénario
- Sdk
- Rechercher
- Deuxièmement
- Section
- les sections
- secteur
- sur le lien
- Sélectionner
- envoyer
- supérieur
- envoyé
- Séquence
- serveur
- Sans serveur
- service
- Services
- Session
- set
- devrait
- arrêter
- similaires
- étapes
- simplement
- Taille
- smart
- So
- sur mesure
- Solutions
- quelques
- Identifier
- envergure
- enjambant
- spécialiste
- spécifié
- pivoté
- empiler
- Commencer
- j'ai commencé
- Commencez
- Région
- Statut
- étapes
- Arrêter
- arrêté
- arrêt
- storage
- Boutique
- stockée
- STORES
- stockage
- simple
- Chaîne
- structuré
- studio
- réussi
- tel
- sûr
- Système
- table
- Prenez
- tâches
- prend
- prise
- équipe
- Technologie
- terminal
- Essais
- texte
- que
- qui
- La
- les informations
- La Source
- L'État
- leur
- Les
- puis
- Là.
- Ces
- l'ont
- this
- ceux
- trois
- Avec
- débit
- Tim
- fiable
- à
- vers
- tps
- suivre
- Train
- Transactions
- Tournant
- clé en main
- deux
- incapable
- sous
- Inattendu
- jusqu'à
- a actualisé
- utilisé
- cas d'utilisation
- Usages
- en utilisant
- utiliser
- utilise
- variable
- divers
- version
- vision
- attendez
- souhaitez
- était
- Montres
- Façon..
- we
- web
- services Web
- ont été
- Quoi
- quand
- qui
- la totalité
- sera
- comprenant
- dans les
- sans
- activités principales
- workflow
- inquiétant
- pourra
- Enveloppé
- écrire
- années
- Vous n'avez
- Votre
- zéphyrnet