Postimi tregon se si të bënipyetje dhe përgjigje semantike mbi dokumente të mëdha të skanuara dhe pdf, si hipotekat, kontratat ose dokumentet e mëdha financiare. Dokumentet mund të jenë pdf ose imazhe në cilindo prej këtyre formateve të skedarëve të mbështetur.

"Repo kodi" përfshin një "aplikacion Gradio" për të kërkuar dokumente të mëdha duke treguar aftësitë e kombinuara të modeleve Vertex LLM, një dyqan vektori si "Chroma", "LangChain" dhe "Google Cloud Document AI OCR". Pra, në thelb ai zbaton një kërkim semantik në dokumente të mëdha dhe të pastrukturuara, duke i konvertuar ato në tekst fillimisht duke përdorur motorin OCR të Document AI, dhe ata duke zbatuar një proces të shtuar të rikthimit me një LLM.

Mostra pdf e përdorur është raporti vjetor i BBVA 2022 publik (në anglisht), njëpdf me 564 faqe që mund të shkarkohet nga këtu. Ju mund ta zëvendësoni këtë dokument me ndonjë tjetër, si hipoteka ose ndonjë dokument tjetër të madh në industrinë e Financave dhe Sigurimeve, edhe nëse ato përmbajnë imazhe ose informacione të skanuara.

Dokumenti AI OCR (përpunim grupor)

Hapi i parë është shkarkimi i dokumentit publik dhe ngarkimi në GCS, pasi kjo kërkohet për përpunimin e grupit OCR. Referojuni konstantës gcs_input_urilocal/ocr_batch.py në repon e kodit dhe ngarkoni skedarin pdf në GCS.

Vini re gjithashtu që ju duhet të krijoni një procesor OCR të AI Dokumenti dhe të zëvendësoni konstantat project_id, region dhe processor_id.

Pse të përdorni Document AI OCR dhe jo mjete me burim të hapur si PyPDF për të menaxhuar dokumentin?

Arsyeja është që të jeni në gjendje të përpunoni gjithashtu dokumente që përmbajnë tekst që vjen nga skanimi ose fotot, pasi PyPDF dhe mjete të tjera të ngjashme nuk do të bëjnë OCR edhe nëse shtrirja është .pdf.

Prandaj, për të nxjerrë tekstin nga një foto ose një dokument i skanuar, duhet të përdorni mjete OCR si Document AI OCR. Google Cloud Document AI është një zgjidhje për kuptimin e dokumenteve që merr të dhëna të pastrukturuara (p.sh. dokumente, email, fatura, formularë, etj.) dhe i bën të dhënat më të lehta për t'u kuptuar, analizuar dhe konsumuar. Një nga modelet e trajnuara paraprakisht kryen Njohjen optike të karaktereve (OCR), e cila është ajo që do të përdorim në këtë postim. Sipas këtij dokumenti, Dokumenti AI OCR nga Google tejkalon zgjidhjet e tjera OCR të disponueshme.

Analizuesi OCR i AI dokumentesh mbështet përpunimin në linjë dhe grupor. Meqenëse kemi të bëjmë me dokumente të mëdha (më shumë se 15 faqe, që është kufiri aktual për përpunimin online), do të përdorim modalitetin e grupit.

Skenari local/ocr_batch.py nxjerr tekst nga një dokument publik, në këtë rast versioni anglisht i raportit vjetor të BBVA 2002 (i disponueshëm publikisht), një dokument me 564 faqe. Meqenëse nxjerrja nga Document AI OCR është në copa të shumta, ato duhet të bashkohen në një skedar të vetëm output_all.txt, i cili gjithashtu gjenerohet nga i njëjti skenar.

cd local
python3 ocr_batch.py

Indeksimi dhe rikthimi me Chroma dhe LangChain

Pasi të keni marrë tekstin OCR output_all.txt nga hapi i parë, duhet të krijoni indeksin në Chroma (vini re se ruajtja është bërë vazhdimisht), duke ekzekutuar python3 create_index_chroma.py:

python3 create_index_chroma.py

Pasi të jetë ndërtuar indeksi, ju jeni gati tënisni procesin e rikthimit. Procesi i rikthimit është i ngjashëm me atë të përshkruar në këtë punim, i cili propozon një qasje të drejtpërdrejtë për kombinimin e sistemeve të rikthimit me modele të mëdha gjuhësore për përgjigjen e pyetjeve. Në thelb, këto janë hapat:

  1. Përdoruesi i fundit bën një pyetje.
  2. Sistemi i rikthimit gjen dy pasazhe (numri i pasazheve është i konfigurueshëm në kod) nga teksti origjinal.
  3. Dy pasazhet janë të lidhura me pyetjen e përdoruesit.
  4. I gjithë ai informacion i bashkuar (pyetja e përdoruesit dhe dy pasazhe) dërgohen te modeli PaLM-2 text-bison@001. Punimi emërton procesin e lidhjes së pyetjes dhe të dy pasazheve si fusion-in-the-decoder, pas së cilës përgjigja i kthehet përdoruesit.

Për të nisur rikthimin, ekzekutoni python3 retrieval_chroma.py. Ky skript përdor zinxhirin e rikthimit të QA në LangChainpër të rikuperuar blloqet më afër pyetjes, i cili përfshin një model Vertex LLM (PaLM-2) për të gjeneruar daljen te përdoruesi.

python3 retrieval_chroma.py

Aplikim nga fundi në fund në Gradio

Aplikacioni Gradio do të zbatojë ciklin e plotë të përshkruar më sipër në një aplikacion të vetëm:

  1. Ngarko një skedar pdf
  2. Kryeni përpunim grupor me analizuesin OCR të AI të dokumentit, duke e kthyer në tekst.
  3. Krijo indeksin me Chroma.
  4. Pas 20–30 minutash (për shkak të përpunimit të grupit në Document AI OCR), përdoruesi më pas mund të shkruajë pyetjen dhe zinxhiri QA i rikuperimit do të rikuperojë pasazhet më afër pyetjes. Një model Vertex LLM do t'i shkruajë rezultatin përdoruesit.

SHËNIM: cikli i plotë i përshkruar më sipër mund të zgjasë deri në 30 minuta përpara se të mund të kërkoni dokumentin. Konsumi i kohës kryesore është për shkak të përpunimit të grupit të Document AI OCR.

Referojuni ky postim mesatar se si të vendosni llogarinë e shërbimit Cloud Run me lejet minimale. Në krye të këtyre lejeve minimale, do t'ju duhen rolet shtesë të mëposhtme për këtë aplikacion: roles/logging.privateLogViewer, roles/storage.admin (krijoni kova) dhe roles/documentai.apiUser.

# extra roles required on top of minimum permissions
PROJECT_ID=<REPLACE_WITH_YOUR_PROJECT_ID>

# add logging.privateLogViewer role
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:cloud-run-llm@${PROJECT_ID}.iam.gserviceaccount.com" \
    --role="roles/logging.privateLogViewer"

# add documentai.apiUser role 
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:cloud-run-llm@${PROJECT_ID}.iam.gserviceaccount.com" \
    --role="roles/documentai.apiUser"

# add storage.admin role
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:cloud-run-llm@${PROJECT_ID}.iam.gserviceaccount.com" \
    --role="roles/storage.admin"

Për të ndërtuar dhe vendosur "aplikacionin Gradio" në "Cloud Run", ekzekutoni komandat e mëposhtme. Autentifikimi i shënimit është i çaktivizuar dhe llogaria e shërbimit është ajo e konfiguruar më parë:

PROJECT_ID=<REPLACE_WITH_YOUR_PROJECT_ID>
REGION=<REPLACE_WITH_YOUR_GCP_REGION_NAME>
AR_REPO=<REPLACE_WITH_YOUR_AR_REPO_NAME>
SERVICE_NAME=docai-large

gcloud artifacts repositories create $AR_REPO --location=$REGION --repository-format=Docker
gcloud auth configure-docker $REGION-docker.pkg.dev
gcloud builds submit --tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME
gcloud run deploy $SERVICE_NAME --port 7860 --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME --service-account=cloud-run-llm@$PROJECT_ID.iam.gserviceaccount.com --allow-unauthenticated --region=europe-west4 --platform=managed  --project=$PROJECT_ID

konkluzione

Ky postim tregon se si të bëni kërkim semantik në dokumente të mëdha të skanuara duke përdorur modele LLM si PaLM-2 në Vertex AI, së bashku me mjete me burim të hapur si Chroma dhe LangChain.

Postimi përshkruan se si të zbatoni kërkimin semantik hap pas hapi në kompjuterin tuaj lokal, dhe gjithashtu me një aplikacion nga fundi në fund të vendosur në Cloud Run duke përdorur Gradio.

Repon me të gjithë kodin mund ta gjeni në këtë lidhje.

Referencat

[1] Postim i mesëm: Generative AI - PaLM-2 model disployment with Cloud Run
[2] Letër: Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering
[3] Punim: Rikthim-Gjenerimi i shtuar për Detyrat NLP me njohuri intensive
[4] Video në YouTube: Inteligjencë artificiale gjeneruese në Google Cloud
[5] Dokumentacioni: Dokumenti AI OCR i Google Cloud
[6] Dokumentacioni i LangChain: Google Cloud Platform Vertex AI PaLM