sanjeevani-api / docs /ML_MODELS.md
Sivaneshakumar's picture
V1
151ec26
|
Raw History Blame Contribute Delete
3.43 kB
# SanjeevaniAI — Machine Learning & Biomedical NER Specification
## 1. Local Neural Architecture
SanjeevaniAI utilizes a dedicated local transformer model for biomedical token classification:
- **Base Architecture**: `roberta-large` (24 layers, 16 attention heads, 1024 hidden dimensions, 355 Million parameters).
- **Fine-Tuning Dataset**: BioCreative V Chemical Disease Relation dataset (BC5CDR).
- **Local Model Path**: `D:\SanjeevaniAI\models\bc5cdr-ner` (1.4 GB model weights).
- **Classification Head**: `RobertaForTokenClassification` with linear projection layer mapping hidden states to BIO label space.
- **Hardware Acceleration**: Automatically prioritizes `CUDA:0` when an NVIDIA GPU is present; gracefully falls back to multithreaded CPU inference.
---
## 2. Label Taxonomy & BIO Tag Normalization
The model is trained on standard IOB2 tagging for biomedical literature:
| Label ID | Raw Tag | Standard Entity Class | Description |
| :--- | :--- | :--- | :--- |
| 0 | `O` | Outside | Non-biomedical token |
| 1 | `B-Chemical` | `CHEMICAL` | Beginning of a chemical/drug entity |
| 2 | `B-Disease` | `DISEASE` | Beginning of a disease/condition entity |
| 3 | `I-Chemical` | `CHEMICAL` | Inside/continuation of a chemical entity |
| 4 | `I-Disease` | `DISEASE` | Inside/continuation of a disease entity |
### Sub-word Token Span Reconstruction
Because RoBERTa uses Byte-Pair Encoding (BPE), sub-word tokens starting with `Ġ` or raw fragments must be mapped back to original text character offsets:
1. Model generates predictions for all tokens.
2. `BC5CDRNERModel` aggregates sequential `B-` and `I-` tokens of matching entity types.
3. Whitespace and sub-word boundary artifacts are resolved using character index tracking `[start_offset, end_offset]`.
4. Extracted text is sliced from original input: `text[start_offset:end_offset]`.
---
## 3. Confidence Calibration & Post-Processing
- Softmax is applied to model output logits $z$:
$$P(y_i = c) = \frac{e^{z_{i, c}}}{\sum_{j} e^{z_{i, j}}}$$
- Confidence for an entity span $E = (t_1, t_2, \dots, t_k)$ is calculated as the mean token probability:
$$\text{Confidence}(E) = \frac{1}{k} \sum_{i=1}^k P(y_i = \hat{y}_i)$$
- **Default Confidence Filter**: $\tau = 0.85$. Entities below this threshold are discarded to prevent false positive hallucinations.
---
## 4. Inference Performance Benchmarks
| Hardware Platform | Average Latency (100-word text) | Peak Memory Usage |
| :--- | :--- | :--- |
| NVIDIA GeForce RTX 3050 Laptop GPU (CUDA) | **14.2 ms** | 1,480 MB VRAM |
| Intel Core i7-13700H (CPU Multithreading) | **82.4 ms** | 1,520 MB RAM |
---
## 5. Conversational LLM Architecture (Provider Abstraction)
SanjeevaniAI decouples reasoning from specific LLM vendors via `BaseLLMProvider`:
1. **`GeminiProvider`**: Calls Google Gemini 1.5 Pro / Flash via `google-genai` SDK with healthcare decision-support system prompts, structured JSON schema outputs, and safety settings blocking diagnostic assertions.
2. **`MockLLMProvider`**: High-availability offline fallback providing deterministic, evidence-grounded educational answers for diabetes, hypertension, cardiology, and pharmacology.
3. **Emergency Red-Flag Heuristic Triage**: Runs synchronously prior to LLM inference to identify acute life-threatening presentations (e.g., crushing chest pain, dyspnea, acute neurological deficits) and output emergency escalation notices.