AWS-kunder inden for sundhedspleje, finansielle tjenesteydelser, den offentlige sektor og andre industrier gemmer milliarder af dokumenter som billeder eller PDF'er i Amazon Simple Storage Service (Amazon S3). De er dog ikke i stand til at få indsigt, såsom at bruge informationen, der er låst i dokumenterne til store sprogmodeller (LLM'er) eller søge, før de uddrager teksten, formularer, tabeller og andre strukturerede data. Med AWS intelligent dokumentbehandling (IDP) ved hjælp af AI-tjenester som f.eks amazontekst, kan du drage fordel af brancheførende maskinlæringsteknologi (ML) til hurtigt og præcist at behandle data fra PDF'er eller dokumentbilleder (TIFF, JPEG, PNG). Når teksten er udtrukket fra dokumenterne, kan du bruge den til at finjustere en fundamentmodel, opsummere data ved hjælp af en fundamentmodel, eller send den til en database.
I dette indlæg fokuserer vi på at behandle en stor samling dokumenter til rå tekstfiler og gemme dem i Amazon S3. Vi giver dig to forskellige løsninger til denne use case. Den første giver dig mulighed for at køre et Python-script fra enhver server eller instans inklusive en Jupyter-notesbog; dette er den hurtigste måde at komme i gang på. Den anden tilgang er en nøglefærdig implementering af forskellige infrastrukturkomponenter ved hjælp af AWS Cloud Development Kit (AWS CDK) konstruktioner. AWS CDK-konstruktionen giver en robust og fleksibel ramme til at behandle dine dokumenter og opbygge en end-to-end IDP-pipeline. Ved at bruge AWS CDK kan du udvide dens funktionalitet til at omfatte redaktion, gem outputtet i Amazon OpenSearch, eller tilføje en brugerdefineret AWS Lambda fungere med din egen forretningslogik.
Begge disse løsninger giver dig mulighed for hurtigt at behandle mange millioner sider. Før du kører en af disse løsninger i skala, anbefaler vi at teste med en delmængde af dine dokumenter for at sikre, at resultaterne lever op til dine forventninger. I de følgende afsnit beskriver vi først scriptløsningen efterfulgt af AWS CDK-konstruktionsløsningen.
Løsning 1: Brug et Python-script
Denne løsning behandler dokumenter til rå tekst gennem Amazon Textract så hurtigt, som tjenesten tillader, med en forventning om, at hvis der er en fejl i scriptet, vil processen fortsætte, hvor den slap. Løsningen bruger tre forskellige tjenester: Amazon S3, Amazon DynamoDBog Amazon Textract.
Følgende diagram illustrerer rækkefølgen af begivenheder i scriptet. Når scriptet slutter, returneres en færdiggørelsesstatus sammen med den tid, det tager, til SageMaker-studiekonsollen.
Vi har pakket denne løsning i en .ipynb script , .py-script. Du kan bruge enhver af de implementerbare løsninger i henhold til dine krav.
Forudsætninger
For at køre dette script fra en Jupyter-notesbog, AWS identitets- og adgangsstyring (IAM)-rolle, der er tildelt notesbogen, skal have tilladelser, der tillader den at interagere med DynamoDB, Amazon S3 og Amazon Textract. Den generelle vejledning er at give mindst privilegerede tilladelser for hver af disse tjenester til din AmazonSageMaker-ExecutionRole
rolle. For at lære mere, se Kom godt i gang med AWS-administrerede politikker, og gå i retning af tilladelser med mindst privilegium.
Alternativt kan du køre dette script fra andre miljøer som f.eks Amazon Elastic Compute Cloud (Amazon EC2) instans eller container, som du ville administrere, forudsat at Python, Pip3 og AWS SDK til Python (Boto3) er installeret. Igen skal de samme IAM-politikker anvendes, som gør det muligt for scriptet at interagere med de forskellige administrerede tjenester.
Går igennem
For at implementere denne løsning skal du først klone depotet GitHub.
Du skal indstille følgende variabler i scriptet, før du kan køre det:
- sporingstabel – Dette er navnet på DynamoDB-tabellen, der vil blive oprettet.
- input_bucket – Dette er din kildeplacering i Amazon S3, der indeholder de dokumenter, du vil sende til Amazon Textract til tekstgenkendelse. For denne variabel skal du angive navnet på bøtten, som f.eks
mybucket
. - output_bucket – Dette er til at gemme placeringen af, hvor du vil have Amazon Textract til at skrive resultaterne til. For denne variabel skal du angive navnet på bøtten, som f.eks
myoutputbucket
. - _input_prefix (valgfrit) – Hvis du vil vælge bestemte filer fra en mappe i din S3-bøtte, kan du angive dette mappenavn som inputpræfiks. Ellers skal du lade standarden være tom for at vælge alle.
Scriptet er som følger:
Følgende DynamoDB-tabelskema oprettes, når scriptet køres:
Når scriptet køres for første gang, vil det kontrollere, om DynamoDB-tabellen findes, og vil automatisk oprette den, hvis det er nødvendigt. Efter at tabellen er oprettet, skal vi udfylde den med en liste over dokumentobjektreferencer fra Amazon S3, som vi vil behandle. Scriptet by design vil opregne over objekter i det angivne input_bucket
og automatisk udfylde vores tabel med deres navne, når de blev kørt. Det tager cirka 10 minutter at opregne over 100,000 dokumenter og udfylde disse navne i DynamoDB-tabellen fra scriptet. Hvis du har millioner af objekter i en bøtte, kan du alternativt bruge inventarfunktionen i Amazon S3, der genererer en CSV-fil med navne, og derefter udfylde DynamoDB-tabellen fra denne liste med dit eget script på forhånd og ikke bruge funktionen kaldet fetchAllObjectsInBucketandStoreName
ved at kommentere det. For at lære mere, se Konfiguration af Amazon S3 Inventory.
Som tidligere nævnt er der både en notebook-version og en Python-scriptversion. Notesbogen er den mest ligetil måde at komme i gang på; Kør blot hver celle fra start til slut.
Hvis du beslutter dig for at køre Python-scriptet fra en CLI, anbefales det, at du bruger en terminal multiplexer såsom tmux. Dette er for at forhindre scriptet i at stoppe, hvis din SSH-session afsluttes. For eksempel: tmux new -d ‘python3 textractFeeder.py’
.
Følgende er scriptets indgangspunkt; herfra kan du kommentere metoder, der ikke er nødvendige:
Følgende felter indstilles, når scriptet udfylder DynamoDB-tabellen:
- objektnavn – Navnet på dokumentet i Amazon S3, der sendes til Amazon Textract
- spandnavn – Den spand, hvor dokumentobjektet er opbevaret
Disse to felter skal udfyldes, hvis du beslutter dig for at bruge en CSV-fil fra S3-beholdningsrapporten og springer over den automatiske udfyldning, der sker i scriptet.
Nu hvor tabellen er oprettet og udfyldt med dokumentobjektreferencerne, er scriptet klar til at begynde at kalde Amazon Textract StartDocumentTextDetection
API. Amazon Textract har ligesom andre administrerede tjenester en standardgrænse på API'erne kaldet transaktioner per sekund (TPS). Hvis det er nødvendigt, kan du anmode om en kvoteforhøjelse fra Amazon Textract-konsollen. Koden er designet til at bruge flere tråde samtidigt, når du kalder Amazon Textract for at maksimere gennemløbet med tjenesten. Du kan ændre dette i koden ved at ændre threadCountforTextractAPICall
variabel. Som standard er dette indstillet til 20 tråde. Scriptet vil i første omgang læse 200 rækker fra DynamoDB-tabellen og gemme disse i en hukommelsesliste, der er pakket ind med en klasse for trådsikkerhed. Hver opkaldstråd startes derefter og kører inden for sin egen svømmebane. Grundlæggende vil Amazon Textract-opkaldstråden hente et element fra in-memory-listen, der indeholder vores objektreference. Det vil så kalde det asynkrone start_document_text_detection
API og vent på bekræftelsen med job-id'et. Job-id'et opdateres derefter tilbage til DynamoDB-rækken for det pågældende objekt, og tråden gentages ved at hente det næste element fra listen.
Det følgende er den vigtigste orkestreringskode script:
Opkaldstrådene fortsætter med at gentage sig, indtil der ikke længere er nogen elementer på listen, hvorefter trådene hver især stopper. Når alle tråde, der opererer inden for deres svømmebaner, er stoppet, hentes de næste 200 rækker fra DynamoDB, og et nyt sæt på 20 tråde startes, og hele processen gentages, indtil hver række, der ikke indeholder et job-id, hentes fra DynamoDB og opdateret. Skulle scriptet gå ned på grund af et uventet problem, så kan scriptet køres igen fra orchestrate()
metode. Dette sikrer, at trådene fortsætter med at behandle rækker, der indeholder tomme job-id'er. Bemærk, at når du kører igen orchestrate()
metode efter at scriptet er stoppet, er der mulighed for, at nogle få dokumenter bliver sendt til Amazon Textract igen. Dette tal vil være lig med eller mindre end antallet af tråde, der kørte på tidspunktet for nedbruddet.
Når der ikke er flere rækker, der indeholder et tomt job-id i DynamoDB-tabellen, stopper scriptet. Al JSON-output fra Amazon Textract for alle objekterne vil blive fundet i output_bucket
som standard under textract_output
folder. Hver undermappe indenfor textract_output
vil blive navngivet med det job-id, der svarer til det job-id, der blev gemt i DynamoDB-tabellen for det pågældende objekt. I job-id-mappen finder du JSON, som vil blive navngivet numerisk fra 1 og potentielt kan spænde over yderligere JSON-filer, der ville blive mærket 2, 3 og så videre. Omspændende JSON-filer er et resultat af tætte eller flersidede dokumenter, hvor mængden af ekstraheret indhold overstiger Amazon Textracts standard JSON-størrelse på 1,000 blokke. Henvise til Bloker for mere information om blokke. Disse JSON-filer vil indeholde alle Amazon Textract-metadata, inklusive den tekst, der blev udtrukket fra dokumenterne.
Du kan finde Python-kodenotebook-versionen og scriptet til denne løsning i GitHub.
Ryd op
Når Python-scriptet er færdigt, kan du spare omkostninger ved at lukke ned eller stoppe Amazon SageMaker Studio notesbog eller beholder, som du har spundet op.
Nu til vores anden løsning til dokumenter i stor skala.
Løsning 2: Brug en serverløs AWS CDK-konstruktion
Denne løsning bruger AWS-trinfunktioner og Lambda-funktioner til at orkestrere IDP-pipelinen. Vi bruger IDP AWS CDK konstruerer, som gør det nemt at arbejde med Amazon Textract i stor skala. Derudover bruger vi en Trin Funktioner distribueret kort at gentage alle filerne i S3-bøtten og starte behandlingen. Den første Lambda-funktion bestemmer, hvor mange sider dine dokumenter har. Dette gør det muligt for pipelinen automatisk at bruge enten den synkrone (for enkeltsidede dokumenter) eller asynkrone (for flersidede dokumenter) API. Når du bruger den asynkrone API, kaldes en ekstra Lambda-funktion til alle de JSON-filer, som Amazon Textract vil producere for alle dine sider til én JSON-fil for at gøre det nemt for dine downstream-applikationer at arbejde med informationen.
Denne løsning indeholder også to ekstra Lambda-funktioner. Den første funktion analyserer teksten fra JSON og gemmer den som en tekstfil i Amazon S3. Den anden funktion analyserer JSON'en og gemmer den for metrics om arbejdsbyrden.
Følgende diagram illustrerer arbejdsgangen Trinfunktioner.
Forudsætninger
Denne kodebase bruger AWS CDK og kræver Docker. Du kan implementere dette fra en AWS Cloud9 instans, som allerede har konfigureret AWS CDK og Docker.
Går igennem
For at implementere denne løsning skal du først klone repository.
Når du har klonet depotet, skal du installere afhængighederne:
Brug derefter følgende kode til at implementere AWS CDK-stakken:
Du skal angive både kildespanden og kildepræfikset (placeringen af de filer, du vil behandle) til denne løsning.
Når implementeringen er fuldført, skal du navigere til konsollen Trinfunktioner, hvor du skal se tilstandsmaskinen ServerlessIDPArchivePipeline
.
Åbn siden med oplysninger om tilstandsmaskinen og på henrettelser fanebladet, vælg Start udførelse.
Vælg Start udførelse igen for at køre statsmaskinen.
Når du har startet statsmaskinen, kan du overvåge rørledningen ved at se på kortkørslen. Du vil se en Status for varebehandling sektion som følgende skærmbillede. Som du kan se, er dette bygget til at køre og spore, hvad der lykkedes, og hvad der mislykkedes. Denne proces vil fortsætte med at køre, indtil alle dokumenter er blevet læst.
Med denne løsning bør du være i stand til at behandle millioner af filer på din AWS-konto uden at bekymre dig om, hvordan du korrekt bestemmer, hvilke filer, der skal sendes til hvilken API eller korrupte filer, der fejler din pipeline. Gennem Step Functions-konsollen vil du være i stand til at se og overvåge dine filer i realtid.
Ryd op
Når din pipeline er færdig med at køre, for at rydde op, kan du gå tilbage til dit projekt og indtaste følgende kommando:
Dette vil slette alle tjenester, der blev implementeret til dette projekt.
Konklusion
I dette indlæg præsenterede vi en løsning, der gør det nemt at konvertere dine dokumentbilleder og PDF'er til tekstfiler. Dette er en vigtig forudsætning for at bruge dine dokumenter til generativ AI og søgning. For at lære mere om at bruge tekst til at træne eller finjustere dine fundamentmodeller, se Finjuster Llama 2 til tekstgenerering på Amazon SageMaker JumpStart. For at bruge med søgning, se Implementer smart dokumentsøgningsindeks med Amazon Textract og Amazon OpenSearch. For at lære mere om avancerede dokumentbehandlingsfunktioner, der tilbydes af AWS AI-tjenester, se Vejledning til intelligent dokumentbehandling på AWS.
Om forfatterne
Tim Condello er en senior arkitekt inden for kunstig intelligens (AI) og maskinlæring (ML) specialistløsninger hos Amazon Web Services (AWS). Hans fokus er naturlig sprogbehandling og computersyn. Tim nyder at tage kundeideer og omsætte dem til skalerbare løsninger.
David Girling er en senior AI/ML-løsningsarkitekt med over tyve års erfaring i at designe, lede og udvikle virksomhedssystemer. David er en del af et specialistteam, der fokuserer på at hjælpe kunder med at lære, innovere og bruge disse yderst kompetente tjenester med deres data til deres brugssituationer.
- SEO Powered Content & PR Distribution. Bliv forstærket i dag.
- PlatoData.Network Vertical Generative Ai. Styrk dig selv. Adgang her.
- PlatoAiStream. Web3 intelligens. Viden forstærket. Adgang her.
- PlatoESG. Kulstof, CleanTech, Energi, Miljø, Solenergi, Affaldshåndtering. Adgang her.
- PlatoHealth. Bioteknologiske og kliniske forsøgs intelligens. Adgang her.
- Kilde: https://aws.amazon.com/blogs/machine-learning/create-a-document-lake-using-large-scale-text-extraction-from-documents-with-amazon-textract/
- :har
- :er
- :ikke
- :hvor
- $OP
- 000
- 1
- 10
- 100
- 12
- 20
- 200
- 7
- 710
- 8
- a
- I stand
- Om
- adgang
- Konto
- præcist
- tilføje
- Yderligere
- Derudover
- fremme
- fremskreden
- Fordel
- Efter
- igen
- AI
- AI-tjenester
- AI / ML
- Alle
- tillade
- tillader
- sammen
- allerede
- også
- Amazon
- Amazon EC2
- Amazon SageMaker
- amazontekst
- Amazon Web Services
- Amazon Web Services (AWS)
- beløb
- an
- analyser
- ,
- enhver
- api
- API'er
- applikationer
- anvendt
- tilgang
- cirka
- ER
- kunstig
- kunstig intelligens
- Kunstig intelligens (AI)
- AS
- tildelt
- At
- auto
- automatisk
- AWS
- tilbage
- bund
- I bund og grund
- BE
- været
- før
- milliarder
- Blocks
- Bootstrap
- både
- bygge
- bygget
- virksomhed
- by
- ringe
- kaldet
- Caller
- ringer
- CAN
- kapaciteter
- stand
- tilfælde
- tilfælde
- celle
- vis
- lave om
- kontrollere
- Vælg
- klasse
- ren
- Cloud
- kode
- kodebase
- samling
- KOMMENTAR
- I en kommentar
- fuldføre
- færdiggørelse
- komponenter
- Compute
- computer
- Computer Vision
- Konsol
- konstruere
- indeholder
- Container
- indeholder
- indhold
- fortsæt
- konvertere
- svarer
- Omkostninger
- kunne
- Crash
- skabe
- oprettet
- skik
- kunde
- Kunder
- data
- Database
- David
- beslutte
- Standard
- afhængigheder
- indsætte
- indsat
- implementering
- beskrive
- Design
- konstrueret
- designe
- detaljer
- Detektion
- Bestem
- bestemmer
- udvikling
- Udvikling
- forskellige
- distribueret
- Docker
- dokumentet
- dokumenter
- Er ikke
- ned
- grund
- hver
- tidligere
- enten
- muliggør
- ende til ende
- ender
- Indtast
- Enterprise
- indrejse
- miljøer
- lige
- begivenheder
- Hver
- eksempel
- overstiger
- udførelse
- eksisterer
- forventning
- forventninger
- erfaring
- udvide
- ekstrakt
- udvinding
- mislykkedes
- svigtende
- Manglende
- Feature
- få
- Fields
- File (Felt)
- Filer
- finansielle
- finansielle tjenesteydelser
- Finde
- slut
- Fornavn
- første gang
- fleksibel
- Fokus
- fokuserer
- efterfulgt
- efter
- følger
- Til
- formularer
- fundet
- Foundation
- Framework
- fra
- funktion
- funktionalitet
- funktioner
- Gevinst
- Generelt
- genererer
- generation
- generative
- Generativ AI
- få
- Go
- vejledning
- sker
- Have
- sundhedspleje
- hjælpe
- link.
- stærkt
- hans
- Hvordan
- How To
- Men
- HTML
- http
- HTTPS
- i
- ID
- ideer
- Identity
- id'er
- if
- illustrerer
- billeder
- gennemføre
- in
- omfatter
- Herunder
- Forøg
- indeks
- industrier
- brancheførende
- oplysninger
- Infrastruktur
- i første omgang
- indlede
- innovere
- indgang
- indsigt
- installere
- installeret
- instans
- Intelligens
- Intelligent
- Intelligent dokumentbehandling
- interagere
- ind
- opgørelse
- IT
- Varer
- ITS
- Job
- jpg
- json
- Nøgle
- sø
- Lane
- Sprog
- stor
- storstilet
- førende
- LÆR
- læring
- Forlade
- til venstre
- mindre
- ligesom
- Liste
- Llama
- placeret
- placering
- låst
- logik
- længere
- leder
- maskine
- machine learning
- Main
- lave
- maerker
- administrere
- lykkedes
- mange
- kort
- Maksimer
- Mød
- nævnte
- Metadata
- metode
- metoder
- Metrics
- millioner
- minutter
- ML
- model
- modeller
- Overvåg
- mere
- mest
- bevæge sig
- flere
- skal
- navn
- Som hedder
- navne
- Natural
- Natural Language Processing
- Naviger
- Behov
- behov
- Ny
- næste
- ingen
- Bemærk
- notesbog
- nu
- nummer
- objekt
- objekter
- of
- off
- tilbydes
- on
- ONE
- drift
- or
- orkestrering
- Andet
- Ellers
- vores
- ud
- output
- i løbet af
- egen
- emballeret
- side
- sider
- del
- per
- Tilladelser
- pick
- pipeline
- plato
- Platon Data Intelligence
- PlatoData
- Punkt
- politikker
- befolkede
- Indlæg
- potentiale
- potentielt
- forelagt
- forhindre
- Problem
- behandle
- Processer
- forarbejdning
- producere
- projekt
- korrekt
- give
- forudsat
- giver
- offentlige
- sætte
- Python
- hurtigste
- hurtigt
- Raw
- Læs
- klar
- ægte
- realtid
- anbefaler
- anbefales
- optage
- optegnelser
- henvise
- henvisningen
- referencer
- gentag
- indberette
- Repository
- anmode
- påkrævet
- Krav
- Kræver
- elastisk
- resultere
- Resultater
- roller
- RÆKKE
- Kør
- kører
- løber
- sikker
- Sikkerhed
- sagemaker
- samme
- Gem
- skalerbar
- Scale
- script
- SDK
- Søg
- Anden
- Sektion
- sektioner
- sektor
- se
- Vælg
- send
- senior
- sendt
- Sequence
- server
- Serverless
- tjeneste
- Tjenester
- Session
- sæt
- bør
- lukker ned
- lignende
- Simpelt
- ganske enkelt
- Størrelse
- Smart
- So
- løsninger
- Løsninger
- nogle
- Kilde
- span
- spænding
- specialist
- specificeret
- spundet
- stable
- starte
- påbegyndt
- Starter
- Tilstand
- Status
- Trin
- Stands
- stoppet
- standsning
- opbevaring
- butik
- opbevaret
- forhandler
- lagring
- ligetil
- String
- struktureret
- Studio
- vellykket
- sådan
- sikker
- Systemer
- bord
- Tag
- taget
- tager
- tager
- hold
- Teknologier
- terminal
- Test
- tekst
- end
- at
- oplysninger
- The Source
- Staten
- deres
- Them
- derefter
- Der.
- Disse
- de
- denne
- dem
- tre
- Gennem
- kapacitet
- Tim
- tid
- til
- mod
- TPS
- spor
- Tog
- Transaktioner
- Drejning
- nøglefærdige
- to
- ude af stand
- under
- Uventet
- indtil
- opdateret
- brug
- brug tilfælde
- bruger
- ved brug af
- udnytte
- udnytter
- variabel
- forskellige
- udgave
- vision
- vente
- ønsker
- var
- Ur
- Vej..
- we
- web
- webservices
- var
- Hvad
- hvornår
- som
- Hele
- vilje
- med
- inden for
- uden
- Arbejde
- workflow
- bekymrende
- ville
- Indpakket
- skriver
- år
- Du
- Din
- zephyrnet