Document Question Answering
Transformers
PyTorch
English
document-processing
ocr
ner
text-classification
information-extraction
invoice
receipt
form
Instructions to use mrrobot2610/IDP-Machine-learning with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use mrrobot2610/IDP-Machine-learning with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("document-question-answering", model="mrrobot2610/IDP-Machine-learning")# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("mrrobot2610/IDP-Machine-learning", device_map="auto") - Notebooks
- Google Colab
- Kaggle
|
Download TECHNICAL_ARCHITECTURE.md from mrrobot2610/IDP-Machine-learning: direct link, hf CLI and curl.
- Browser
- Download file 6.29 kB
-
https://huggingface.co/mrrobot2610/IDP-Machine-learning/resolve/main/TECHNICAL_ARCHITECTURE.md
- Command line
-
hf download hf://mrrobot2610/IDP-Machine-learning/TECHNICAL_ARCHITECTURE.md
-
curl -L -o TECHNICAL_ARCHITECTURE.md https://huggingface.co/mrrobot2610/IDP-Machine-learning/resolve/main/TECHNICAL_ARCHITECTURE.md
6.29 kB
Technical Architecture & Implementation Guide
This document provides a deep dive into the internal workings of the IDP (Intelligent Document Processing) system. It explains the "how" and "why" behind the implementation decisions.
1. System Architecture
The system follows a modern decoupled architecture:
graph TD
User[User] -->|Uploads File| Frontend[Next.js Frontend]
Frontend -->|POST /process| API[FastAPI Backend]
subgraph "Inference Pipeline"
API -->|Raw Image/PDF| Preprocessor[Preprocessing Module]
Preprocessor -->|Cleaned Image| OCR[OCR Engine]
OCR -->|Raw Text + BBoxes| Classifier[Document Classifier]
OCR -->|Raw Text| NER[NER Model]
Classifier -->|Doc Type| PostProcessor[Post-Processing]
NER -->|Entities| PostProcessor
OCR -->|Text + BBoxes| PostProcessor
PostProcessor -->|Structured JSON| API
end
API -->|JSON Response| Frontend
Frontend -->|Render| UI[Results Display]
2. Component Deep Dive
A. Frontend (/frontend)
Built with Next.js 14 (App Router), React 18, and Tailwind CSS.
app/page.tsx: The main entry point. It manages the global state forresult,loading, andisSystemOnline. It uses a polling mechanism (setInterval) to check the backend health status every 30 seconds.components/DocumentUpload.tsx: Handles file selection and drag-and-drop.- Auto-Processing: As soon as a valid file is selected, it automatically triggers the upload.
- Validation: Checks file size (<10MB) and type (PDF, PNG, JPEG).
components/ResultsDisplay.tsx: Renders the JSON response.- Dynamic Badges: Uses
getDocTypeStyleto color-code document types (Purple for Invoice, Pink for Receipt, Blue for Bank Statement). - Confidence Indicators: Color-codes confidence scores (Green > 80%, Yellow > 60%, Red < 60%).
- Dynamic Badges: Uses
- Styling: Uses
globals.cssfor custom animations (animate-fade-in-up) and utility classes (glass-panel,bento-card).
B. Backend API (api_server.py)
Built with FastAPI.
- Endpoints:
GET /health: Simple status check.POST /process: The core endpoint. Acceptsmultipart/form-data.
- File Handling: Uses
tempfileto safely store uploaded files temporarily for processing, ensuring they are cleaned up afterwards. - CORS: Configured to allow requests from the frontend (localhost or production domain).
C. Inference Pipeline (inference_pipeline.py)
The heart of the system. It orchestrates the flow of data through various ML models.
1. Preprocessing (preprocessing.py)
Before OCR, images are cleaned to improve accuracy:
- Resizing: Images are resized to a standard width (2048px) to maintain aspect ratio.
- Denoising:
cv2.fastNlMeansDenoisingremoves grain/noise. - Thresholding: Adaptive thresholding converts images to binary (black/white) for clearer text.
- Deskewing: Detects text orientation and rotates the image to be horizontal.
2. OCR Engine (ocr_engine.py)
- Engine: Uses EasyOCR (or PaddleOCR) to extract text and bounding boxes.
- Output: Returns a list of text lines with their coordinates and confidence scores.
3. Classification (classifier_model.py & demo_mode.py)
Determines if the document is an Invoice, Receipt, Bank Statement, etc.
- Model: Uses a fine-tuned MiniLM transformer model.
- Demo Mode / Heuristics: If the model isn't loaded, it falls back to smart keyword matching:
- Invoice: Contains "invoice".
- Bank Statement: Contains "account statement", "summary", etc.
- Receipt: Contains "receipt", "total".
- Refinement: Even with a trained model, we use
_refine_classificationin the pipeline to override the model if strong keywords are present (e.g., correcting "Receipt" to "Invoice" if the word "Invoice" is clearly visible).
4. NER (Named Entity Recognition) (ner_model.py)
Extracts specific fields like Dates, Amounts, and IDs.
- Model: DistilBERT fine-tuned for token classification.
- Tags: Uses BIO tagging (e.g.,
B-DATE,I-DATE) to identify the start and continuation of entities.
5. Post-Processing (postprocessing.py)
Cleans up and validates the raw ML outputs.
- Regex Fallbacks: If NER misses a field (like a date), regex patterns (
\d{2}/\d{2}/\d{4}) attempt to find it in the raw text. - Validation: Checks if extracted values make sense (e.g., is the "Total" actually a number?).
- Normalization: Converts dates to
YYYY-MM-DDand amounts to standard float format (removing currency symbols). - Confidence Scoring: Combines Model Confidence + OCR Confidence to give a final reliability score.
3. Data Flow Example
- Upload: User uploads
invoice.pdf. - Conversion:
PDFtoImageConverterconverts it toinvoice.png. - Preprocess: Image is deskewed and binarized.
- OCR: Text "Invoice #123" is detected at
[100, 100]. - Classify: Model sees "Invoice" -> Classifies as
INVOICE(Conf: 0.98). - NER: Model identifies "123" as
INVOICE_NUMBER. - Post-Process:
INVOICE_NUMBER"123" is validated.- Date "Jan 1, 2024" is normalized to
2024-01-01.
- Response: JSON returned to frontend.
- Display: Frontend shows "Invoice" badge and lists extracted fields.
4. Key Technologies & Libraries
- PyTorch: Deep learning framework for Classifier and NER.
- Transformers (Hugging Face): Model architecture (DistilBERT, MiniLM).
- OpenCV: Image manipulation.
- EasyOCR: Optical Character Recognition.
- NumPy: Numerical operations.
- Uvicorn: ASGI server for FastAPI.
5. Customization
Adding New Doc Types:
- Update
classifier_model.pylabels. - Add keywords to
_refine_classificationininference_pipeline.py. - Add field extraction logic to
postprocessing.py. - Update
ResultsDisplay.tsxin frontend to handle new badge types.
- Update
Tuning Accuracy:
- Adjust
ocr_confidence_thresholdinapi_server.py. - Add more regex patterns in
postprocessing.py.
- Adjust