AWS-kunder innen helsevesen, finansielle tjenester, offentlig sektor og andre bransjer lagrer milliarder av dokumenter som bilder eller PDF-er i Amazon enkel lagringstjeneste (Amazon S3). Imidlertid er de ikke i stand til å få innsikt som å bruke informasjonen som er låst i dokumentene for store språkmodeller (LLM) eller søke før de trekker ut teksten, skjemaene, tabellene og andre strukturerte data. Med AWS intelligent dokumentbehandling (IDP) ved bruk av AI-tjenester som f.eks amazontekst, kan du dra nytte av bransjeledende maskinlæringsteknologi (ML) for å raskt og nøyaktig behandle data fra PDF-er eller dokumentbilder (TIFF, JPEG, PNG). Etter at teksten er trukket ut fra dokumentene, kan du bruke den til å finjustere en grunnmodell, oppsummere dataene ved hjelp av en grunnmodell, eller send den til en database.
I dette innlegget fokuserer vi på å behandle en stor samling dokumenter til rå tekstfiler og lagre dem i Amazon S3. Vi gir deg to forskjellige løsninger for denne brukssaken. Den første lar deg kjøre et Python-skript fra en hvilken som helst server eller instans, inkludert en Jupyter-notisbok; dette er den raskeste måten å komme i gang på. Den andre tilnærmingen er en nøkkelferdig distribusjon av ulike infrastrukturkomponenter ved hjelp av AWS skyutviklingssett (AWS CDK) konstruerer. AWS CDK-konstruksjonen gir et spenstig og fleksibelt rammeverk for å behandle dokumentene dine og bygge en ende-til-ende IDP-pipeline. Ved å bruke AWS CDK kan du utvide funksjonaliteten til å inkludere redaksjon, lagre utdataene i Amazon OpenSearch, eller legg til en egendefinert AWS Lambda funksjon med din egen forretningslogikk.
Begge disse løsningene lar deg raskt behandle mange millioner sider. Før du kjører en av disse løsningene i stor skala, anbefaler vi å teste med et undersett av dokumentene dine for å sikre at resultatene oppfyller forventningene dine. I de følgende avsnittene beskriver vi først skriptløsningen, etterfulgt av AWS CDK-konstruksjonsløsningen.
Løsning 1: Bruk et Python-skript
Denne løsningen behandler dokumenter for råtekst gjennom Amazon Textract så raskt som tjenesten tillater med forventning om at hvis det er en feil i skriptet, vil prosessen ta seg opp der den slapp. Løsningen bruker tre forskjellige tjenester: Amazon S3, Amazon DynamoDB, og Amazon Textract.
Følgende diagram illustrerer hendelsesforløpet i skriptet. Når skriptet avsluttes, vil en fullføringsstatus sammen med tiden det tar, bli returnert til SageMaker-studiokonsollen.
Vi har pakket denne løsningen i en .ipynb-skript og .py-skript. Du kan bruke hvilken som helst av de distribuerbare løsningene i henhold til dine krav.
Forutsetninger
For å kjøre dette skriptet fra en Jupyter-notisbok, AWS identitets- og tilgangsadministrasjon (IAM)-rollen som er tildelt notatboken, må ha tillatelser som lar den samhandle med DynamoDB, Amazon S3 og Amazon Textract. Den generelle veiledningen er å gi minst privilegerte tillatelser for hver av disse tjenestene til din AmazonSageMaker-ExecutionRole
rolle. For å lære mer, se Kom i gang med AWS-administrerte retningslinjer og gå mot tillatelser med minst privilegier.
Alternativt kan du kjøre dette skriptet fra andre miljøer, for eksempel en Amazon Elastic Compute Cloud (Amazon EC2) forekomst eller beholder som du vil administrere, forutsatt at Python, Pip3 og AWS SDK for Python (Boto3) er installert. Igjen, de samme IAM-policyene må brukes som lar skriptet samhandle med de forskjellige administrerte tjenestene.
walkthrough
For å implementere denne løsningen må du først klone depotet GitHub.
Du må angi følgende variabler i skriptet før du kan kjøre det:
- sporingstabell – Dette er navnet på DynamoDB-tabellen som skal opprettes.
- input_bucket – Dette er kildeplasseringen din i Amazon S3 som inneholder dokumentene du vil sende til Amazon Textract for tekstgjenkjenning. For denne variabelen, oppgi navnet på bøtten, for eksempel
mybucket
. - output_bucket – Dette er for å lagre plasseringen der du vil at Amazon Textract skal skrive resultatene til. For denne variabelen, oppgi navnet på bøtten, for eksempel
myoutputbucket
. - _input_prefix (valgfritt) – Hvis du vil velge bestemte filer fra en mappe i S3-bøtten din, kan du angi dette mappenavnet som inngangsprefiks. Ellers lar du standarden være tom for å velge alle.
Manuset er som følger:
Følgende DynamoDB-tabellskjema blir opprettet når skriptet kjøres:
Når skriptet kjøres for første gang, vil det sjekke om DynamoDB-tabellen eksisterer og vil automatisk opprette den om nødvendig. Etter at tabellen er opprettet, må vi fylle den med en liste over dokumentobjektreferanser fra Amazon S3 som vi ønsker å behandle. Skriptet ved design vil telle over objekter i det spesifiserte input_bucket
og automatisk fylle ut tabellen med navnene deres når de kjøres. Det tar omtrent 10 minutter å telle opp over 100,000 3 dokumenter og fylle disse navnene inn i DynamoDB-tabellen fra skriptet. Hvis du har millioner av objekter i en bøtte, kan du alternativt bruke inventarfunksjonen til Amazon SXNUMX som genererer en CSV-fil med navn, og deretter fylle ut DynamoDB-tabellen fra denne listen med ditt eget skript på forhånd og ikke bruke funksjonen kalt fetchAllObjectsInBucketandStoreName
ved å kommentere det. For å lære mer, se Konfigurering av Amazon S3 Inventory.
Som nevnt tidligere er det både en bærbar versjon og en Python-skriptversjon. Notatboken er den enkleste måten å komme i gang på; bare kjør hver celle fra start til slutt.
Hvis du bestemmer deg for å kjøre Python-skriptet fra en CLI, anbefales det at du bruker en terminalmultiplekser som tmux. Dette er for å forhindre at skriptet stopper hvis SSH-økten din er ferdig. For eksempel: tmux new -d ‘python3 textractFeeder.py’
.
Følgende er manusets inngangspunkt; herfra kan du kommentere metoder som ikke er nødvendige:
Følgende felt angis når skriptet fyller ut DynamoDB-tabellen:
- objektnavn – Navnet på dokumentet i Amazon S3 som sendes til Amazon Textract
- bøttenavn – Bøtten der dokumentobjektet er lagret
Disse to feltene må fylles ut hvis du bestemmer deg for å bruke en CSV-fil fra S3-beholdningsrapporten og hopper over den automatiske utfyllingen som skjer i skriptet.
Nå som tabellen er opprettet og fylt ut med dokumentobjektreferansene, er skriptet klart til å begynne å kalle Amazon Textract StartDocumentTextDetection
API. Amazon Textract, i likhet med andre administrerte tjenester, har en standardgrense på API-ene kalt transaksjoner per sekund (TPS). Om nødvendig kan du be om en kvoteøkning fra Amazon Textract-konsollen. Koden er designet for å bruke flere tråder samtidig når du ringer Amazon Textract for å maksimere gjennomstrømningen med tjenesten. Du kan endre dette i koden ved å endre threadCountforTextractAPICall
variabel. Som standard er dette satt til 20 tråder. Skriptet vil i utgangspunktet lese 200 rader fra DynamoDB-tabellen og lagre disse i en minneliste som er pakket inn med en klasse for trådsikkerhet. Hver innringertråd startes deretter og går innenfor sin egen svømmebane. I utgangspunktet vil Amazon Textract-anropstråden hente et element fra minnelisten som inneholder objektreferansen vår. Den vil da kalle den asynkrone start_document_text_detection
API og vent på bekreftelse med jobb-ID. Jobb-ID-en oppdateres deretter tilbake til DynamoDB-raden for det objektet, og tråden vil gjentas ved å hente neste element fra listen.
Følgende er den viktigste orkestreringskoden script:
Trådene som ringer vil fortsette å gjenta seg til det ikke lenger er noen elementer i listen, og deretter stopper trådene. Når alle tråder som opererer innenfor svømmebanene deres har stoppet, hentes de neste 200 radene fra DynamoDB og et nytt sett med 20 tråder startes, og hele prosessen gjentas til hver rad som ikke inneholder en jobb-ID hentes fra DynamoDB og oppdatert. Skulle skriptet krasje på grunn av et uventet problem, kan skriptet kjøres igjen fra orchestrate()
metode. Dette sikrer at trådene fortsetter å behandle rader som inneholder tomme jobb-ID-er. Merk at når du kjører på nytt orchestrate()
metode etter at skriptet har stoppet, er det et potensial for at noen få dokumenter vil bli sendt til Amazon Textract igjen. Dette tallet vil være lik eller mindre enn antall tråder som kjørte på tidspunktet for krasjet.
Når det ikke er flere rader som inneholder en tom jobb-ID i DynamoDB-tabellen, stopper skriptet. All JSON-utdata fra Amazon Textract for alle objektene vil bli funnet i output_bucket
som standard under textract_output
mappe. Hver undermappe innenfor textract_output
vil bli navngitt med jobb-ID-en som tilsvarer jobb-ID-en som ble lagret i DynamoDB-tabellen for det objektet. Innenfor jobb-ID-mappen finner du JSON, som vil få numerisk navn fra 1 og potensielt kan spenne over flere JSON-filer som vil bli merket 2, 3 og så videre. Spennende JSON-filer er et resultat av tette eller flersidige dokumenter, der mengden innhold som trekkes ut overskrider Amazon Textracts standard JSON-størrelse på 1,000 blokker. Referere til Blokker for mer informasjon om blokker. Disse JSON-filene vil inneholde alle Amazon Textract-metadataene, inkludert teksten som ble trukket ut fra dokumentene.
Du kan finne Python-kodenotatbokversjonen og skriptet for denne løsningen i GitHub.
Rydd opp
Når Python-skriptet er fullført, kan du spare kostnader ved å slå av eller stoppe Amazon SageMaker Studio notatbok eller beholder som du spunnet opp.
Nå over til vår andre løsning for dokumenter i stor skala.
Løsning 2: Bruk en serverløs AWS CDK-konstruksjon
Denne løsningen bruker AWS trinnfunksjoner og Lambda-funksjoner for å orkestrere IDP-rørledningen. Vi bruker IDP AWS CDK konstruerer, som gjør det enkelt å jobbe med Amazon Textract i stor skala. I tillegg bruker vi en Trinn Funksjoner distribuert kart for å iterere over alle filene i S3-bøtten og starte behandlingen. Den første Lambda-funksjonen bestemmer hvor mange sider dokumentene dine har. Dette gjør at rørledningen automatisk kan bruke enten den synkrone (for enkeltsides dokumenter) eller asynkrone (for flersidede dokumenter) API. Når du bruker den asynkrone APIen, kalles en ekstra Lambda-funksjon til alle JSON-filene som Amazon Textract vil produsere for alle sidene dine til én JSON-fil for å gjøre det enkelt for nedstrømsapplikasjonene dine å jobbe med informasjonen.
Denne løsningen inneholder også to ekstra lambdafunksjoner. Den første funksjonen analyserer teksten fra JSON og lagrer den som en tekstfil i Amazon S3. Den andre funksjonen analyserer JSON og lagrer den for beregninger for arbeidsbelastningen.
Følgende diagram illustrerer arbeidsflyten for trinnfunksjoner.
Forutsetninger
Denne kodebasen bruker AWS CDK og krever Docker. Du kan distribuere dette fra en AWS Cloud9 instans, som har AWS CDK og Docker allerede satt opp.
walkthrough
For å implementere denne løsningen må du først klone oppbevaringssted.
Etter at du har klonet depotet, installer avhengighetene:
Bruk deretter følgende kode for å distribuere AWS CDK-stakken:
Du må oppgi både kildeområdet og kildeprefikset (plasseringen til filene du vil behandle) for denne løsningen.
Når distribusjonen er fullført, naviger til Step Functions-konsollen, hvor du skal se tilstandsmaskinen ServerlessIDPArchivePipeline
.
Åpne detaljsiden for statens maskin og på henrettelser kategorien, velg Start utførelse.
Velg Start utførelse igjen for å kjøre statsmaskinen.
Etter at du har startet statsmaskinen, kan du overvåke rørledningen ved å se på kartkjøringen. Du vil se en Varebehandlingsstatus seksjon som følgende skjermbilde. Som du kan se, er dette bygget for å kjøre og spore hva som var vellykket og hva som mislyktes. Denne prosessen vil fortsette å kjøre til alle dokumenter er lest.
Med denne løsningen bør du være i stand til å behandle millioner av filer på AWS-kontoen din uten å bekymre deg for hvordan du skal finne ut hvilke filer som skal sendes til hvilke API eller korrupte filer som mislykkes i pipelinen. Gjennom Step Functions-konsollen vil du kunne se og overvåke filene dine i sanntid.
Rydd opp
Etter at rørledningen er ferdig å kjøre, for å rydde opp, kan du gå tilbake til prosjektet og skrive inn følgende kommando:
Dette vil slette alle tjenester som ble distribuert for dette prosjektet.
konklusjonen
I dette innlegget presenterte vi en løsning som gjør det enkelt å konvertere dine dokumentbilder og PDF-er til tekstfiler. Dette er en nøkkelforutsetning for å bruke dokumentene dine til generativ AI og søk. For å lære mer om bruk av tekst til å trene eller finjustere grunnmodellene dine, se Finjuster Llama 2 for tekstgenerering på Amazon SageMaker JumpStart. For bruk med søk, se Implementer smart dokumentsøkeindeks med Amazon Textract og Amazon OpenSearch. For å lære mer om avanserte dokumentbehandlingsfunksjoner som tilbys av AWS AI-tjenester, se Veiledning for intelligent dokumentbehandling på AWS.
Om forfatterne
Tim Condello er en senior arkitekt for kunstig intelligens (AI) og maskinlæring (ML) spesialistløsninger hos Amazon Web Services (AWS). Hans fokus er naturlig språkbehandling og datasyn. Tim liker å ta kundeideer og gjøre dem om til skalerbare løsninger.
David Girling er en senior AI/ML-løsningsarkitekt med over tjue års erfaring i å designe, lede og utvikle bedriftssystemer. David er en del av et spesialistteam som fokuserer på å hjelpe kunder med å lære, innovere og bruke disse svært dyktige tjenestene med dataene deres for deres brukstilfeller.
- SEO-drevet innhold og PR-distribusjon. Bli forsterket i dag.
- PlatoData.Network Vertical Generative Ai. Styrk deg selv. Tilgang her.
- PlatoAiStream. Web3 Intelligence. Kunnskap forsterket. Tilgang her.
- PlatoESG. Karbon, CleanTech, Energi, Miljø, Solenergi, Avfallshåndtering. Tilgang her.
- PlatoHelse. Bioteknologisk og klinisk etterretning. Tilgang 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
- $OPP
- 000
- 1
- 10
- 100
- 12
- 20
- 200
- 7
- 710
- 8
- a
- I stand
- Om oss
- adgang
- Logg inn
- nøyaktig
- legge til
- Ytterligere
- I tillegg
- avansere
- avansert
- Fordel
- Etter
- en gang til
- AI
- AI-tjenester
- AI / ML
- Alle
- tillate
- tillater
- langs
- allerede
- også
- Amazon
- Amazon EC2
- Amazon SageMaker
- amazontekst
- Amazon Web Services
- Amazon Web Services (AWS)
- beløp
- an
- analyser
- og
- noen
- api
- APIer
- søknader
- anvendt
- tilnærming
- ca
- ER
- kunstig
- kunstig intelligens
- Kunstig intelligens (AI)
- AS
- tildelt
- At
- auto
- automatisk
- AWS
- tilbake
- basen
- I utgangspunktet
- BE
- vært
- før du
- milliarder
- Blocks
- Bootstrap
- både
- bygge
- bygget
- virksomhet
- by
- ring
- som heter
- Caller
- ringer
- CAN
- evner
- stand
- saken
- saker
- celle
- viss
- endring
- sjekk
- Velg
- klasse
- ren
- Cloud
- kode
- kodebase
- samling
- kommentere
- kommenterer
- fullføre
- ferdigstillelse
- komponenter
- Beregn
- datamaskin
- Datamaskin syn
- Konsoll
- konstruere
- inneholde
- Container
- inneholder
- innhold
- fortsette
- konvertere
- tilsvarer
- Kostnader
- kunne
- Crash
- skape
- opprettet
- skikk
- kunde
- Kunder
- dato
- Database
- David
- bestemme
- Misligholde
- avhengig
- utplassere
- utplassert
- distribusjon
- beskrive
- utforming
- designet
- utforme
- detaljer
- Gjenkjenning
- Bestem
- bestemmes
- utvikle
- Utvikling
- forskjellig
- distribueres
- Docker
- dokument
- dokumenter
- ikke
- ned
- to
- hver enkelt
- Tidligere
- enten
- muliggjør
- ende til ende
- slutter
- Enter
- Enterprise
- entry
- miljøer
- lik
- hendelser
- Hver
- eksempel
- stiger
- gjennomføring
- finnes
- forventning
- forventninger
- erfaring
- utvide
- trekke ut
- utdrag
- Mislyktes
- sviktende
- Failure
- Trekk
- Noen få
- Felt
- filet
- Filer
- finansiell
- finansielle tjenester
- Finn
- ferdig
- Først
- første gang
- fleksibel
- Fokus
- fokuserer
- fulgt
- etter
- følger
- Til
- skjemaer
- funnet
- Fundament
- Rammeverk
- fra
- funksjon
- funksjonalitet
- funksjoner
- Gevinst
- general
- genererer
- generasjonen
- generative
- Generativ AI
- få
- Go
- veiledning
- skjer
- Ha
- helsetjenester
- hjelpe
- her.
- svært
- hans
- Hvordan
- Hvordan
- Men
- HTML
- http
- HTTPS
- i
- ID
- Ideer
- Identitet
- ids
- if
- illustrerer
- bilder
- iverksette
- in
- inkludere
- Inkludert
- Øke
- indeks
- bransjer
- bransjeledende
- informasjon
- Infrastruktur
- i utgangspunktet
- initiere
- innovere
- inngang
- innsikt
- installere
- installerte
- f.eks
- Intelligens
- Intelligent
- Intelligent dokumentbehandling
- samhandle
- inn
- inventar
- IT
- varer
- DET ER
- Jobb
- jpg
- JSON
- nøkkel
- innsjø
- Lane
- Språk
- stor
- storskala
- ledende
- LÆRE
- læring
- Permisjon
- venstre
- mindre
- i likhet med
- Liste
- Llama
- ligger
- plassering
- låst
- logikk
- lenger
- ser
- maskin
- maskinlæring
- Hoved
- gjøre
- GJØR AT
- administrer
- fikk til
- mange
- kart
- Maksimer
- Møt
- nevnt
- metadata
- metode
- metoder
- Metrics
- millioner
- minutter
- ML
- modell
- modeller
- Overvåke
- mer
- mest
- flytte
- flere
- må
- navn
- oppkalt
- navn
- Naturlig
- Natural Language Processing
- Naviger
- Trenger
- nødvendig
- Ny
- neste
- Nei.
- note
- bærbare
- nå
- Antall
- objekt
- gjenstander
- of
- off
- tilbudt
- on
- ONE
- drift
- or
- orkestre
- Annen
- ellers
- vår
- ut
- produksjon
- enn
- egen
- pakket
- side
- sider
- del
- for
- tillatelser
- plukke
- rørledning
- plato
- Platon Data Intelligence
- PlatonData
- Point
- Politikk
- befolket
- Post
- potensiell
- potensielt
- presentert
- forebygge
- Problem
- prosess
- Prosesser
- prosessering
- produsere
- prosjekt
- riktig
- gi
- forutsatt
- gir
- offentlig
- sette
- Python
- raskeste
- raskt
- Raw
- Lese
- klar
- ekte
- sanntids
- anbefaler
- anbefales
- rekord
- poster
- referere
- referanse
- referanser
- gjenta
- rapporterer
- Repository
- anmode
- påkrevd
- Krav
- Krever
- spenstig
- resultere
- Resultater
- Rolle
- RAD
- Kjør
- rennende
- går
- trygge
- Sikkerhet
- sagemaker
- samme
- Spar
- skalerbar
- Skala
- script
- SDK
- Søk
- Sekund
- Seksjon
- seksjoner
- sektor
- se
- velg
- send
- senior
- sendt
- Sequence
- server
- server~~POS=TRUNC
- tjeneste
- Tjenester
- Session
- sett
- bør
- nedleggelse
- lignende
- Enkelt
- ganske enkelt
- Størrelse
- Smart
- So
- løsning
- Solutions
- noen
- kilde
- span
- Spenning
- spesialist
- spesifisert
- spunnet
- stable
- Begynn
- startet
- Start
- Tilstand
- status
- Trinn
- Stopp
- stoppet
- stoppe
- lagring
- oppbevare
- lagret
- butikker
- lagring
- rett fram
- String
- strukturert
- studio
- vellykket
- slik
- sikker
- Systemer
- bord
- Ta
- tatt
- tar
- ta
- lag
- Teknologi
- terminal
- Testing
- tekst
- enn
- Det
- De
- informasjonen
- Kilden
- Staten
- deres
- Dem
- deretter
- Der.
- Disse
- de
- denne
- De
- tre
- Gjennom
- gjennomstrømning
- Tim
- tid
- til
- mot
- tps
- spor
- Tog
- Transaksjoner
- Turning
- vri nøkkel
- to
- ute av stand
- etter
- Uventet
- til
- oppdatert
- bruke
- bruk sak
- bruker
- ved hjelp av
- bruke
- bruker
- variabel
- ulike
- versjon
- syn
- vente
- ønsker
- var
- Se
- Vei..
- we
- web
- webtjenester
- var
- Hva
- når
- hvilken
- hele
- vil
- med
- innenfor
- uten
- Arbeid
- arbeidsflyt
- bekymringsfull
- ville
- Innpakket
- skrive
- år
- Du
- Din
- zephyrnet