--- license: apache-2.0 base_model: Qwen/Qwen2.5-3B-Instruct library_name: transformers tags: - medical - red-flag - extraction - qwen2.5 - multi-lingual - brunei-english language: - en - zh - ms --- # Red Flag Detection: `context` module (Qwen2.5-3B-Instruct + LoRA merged) Part of a **5-module medical red flag detection system** for Brunei English (Manglish), Chinese, and Bahasa Melayu clinical notes / patient messages. This model is the **`context` extraction module** — one of 5 specialized modules used together with a Python rule engine (V20 spec, 59 rules). ## Sister modules - `peiyan-ning/redflag-symptom-3b` — 83-symptom multi-label extraction - `peiyan-ning/redflag-context-3b` — 12 context flags (post_trauma, drowning, etc.) - `peiyan-ning/redflag-modifier-3b` — onset / fever_celsius / consciousness / etc. - `peiyan-ning/redflag-denied-3b` — denied symptoms (multi-turn negation) - `peiyan-ning/redflag-gate-3b` — 8 population gates (is_pregnant, is_child, ...) ## Performance (2246-case independent test set) Full 5-module pipeline + rule engine V46: | Metric | P | R | F1 | Acc | |---|---|---|---|---| | PRIMARY (any_matched × labeled_matched) | **0.902** | **0.911** | **0.906** | 91.9% | | STRICT matched-only | 0.893 | 0.828 | 0.859 | 91.8% | | STRICT m+s | 0.844 | 0.905 | 0.873 | 92.1% | ## System prompt used at inference ``` Extract environmental context / mechanism from the user's message. ===== EXTRACT WHEN text mentions ===== - Trauma / fall / accident / crash → post_trauma - Recent surgery / procedure → post_surgery - Long sitting / long flight / long trip → post_flight - Heat / sun exposure / hot day / outdoor 30°C+ → outdoor_heat - Pills / medication / chemicals / poison ingested → substance_ingestion - Fire / smoke inhaled → smoke_inhalation - Chemical fumes / bleach / gas leak → chemical_exposure - Cold outdoors / freezing / hypothermia → cold_exposure - Water incident / drowning / near-drown → drowning - Electric shock / lightning → electrical_injury - Snake / spider / scorpion / jellyfish bite/sting → venomous_bite - Physical attack / beaten / assault → serious_assault ===== EXAMPLES ===== "Fell off bike hit head" → {"context_flags": ["post_trauma"]} "10-hour flight, chest hurts" → {"context_flags": ["post_flight"]} "Been outdoor all day 40 degrees" → {"context_flags": ["outdoor_heat"]} "Took double dose of pills" → {"context_flags": ["substance_ingestion"]} "Chemical fumes at work" → {"context_flags": ["chemical_exposure"]} "Kena patuk ular" → {"context_flags": ["venomous_bite"]} "How is asthma treated?" → {"context_flags": []} Look for context described DIRECTLY or through natural descriptors. Output: {"context_flags": [...]} ===== MULTILINGUAL / MANGLISH GUIDANCE ===== Text may be in Brunei/Manglish English or mixed with Malay/Chinese. Ignore these colloquial particles when extracting: "lah", "kah", "meh", "ah", "leh", "lor", "sia", "one". Common Manglish/Malay/Chinese mappings: - "kena panic attack" / "feel like dying" / "jantung deg-deg" → severe_panic - "sesak nafas" (Malay) / "喘不过气" → breathlessness - "sakit dada" (Malay) / "胸口疼" → chest_pain - "sakit kepala teruk" / "剧烈头痛" / "worst headache" → thunderclap_headache - "pengsan" (Malay) / "晕倒" → fainting - "sawan" (Malay) / "抽搐" → seizure - "anak saya" (Malay: my child) → is_child - "bayi saya" (Malay: my baby) → is_baby - "warga emas" / "老人家" → is_elderly - "hamil" / "怀孕" → is_pregnant - "kencing manis" (Malay: diabetes) → has_diabetes - "asma" (Malay: asthma) → has_asthma - "kena patuk ular" (Malay: snake bit) → context_flags: venomous_bite Auntie/uncle in Manglish family reference: usually elderly family member → is_elderly. ``` ## Usage ```python from transformers import AutoTokenizer, AutoModelForCausalLM import torch, json tok = AutoTokenizer.from_pretrained('peiyan-ning/redflag-context-3b') model = AutoModelForCausalLM.from_pretrained( 'peiyan-ning/redflag-context-3b', torch_dtype=torch.float16, device_map='auto' ) SYSTEM_PROMPT = tok.chat_template # or use the prompt above messages = [ {'role': 'system', 'content': SYSTEM_PROMPT}, {'role': 'user', 'content': 'My 3-year-old child has severe fever and vomiting lah'}, ] inputs = tok.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors='pt').to(model.device) out = model.generate(inputs, max_new_tokens=200, do_sample=False) text = tok.decode(out[0][inputs.shape[1]:], skip_special_tokens=True) result = json.loads(text) print(result) ``` ## Full pipeline See [git.evyd.tech/ai/redflag-detection-2.0](https://git.evyd.tech/ai/redflag-detection-2.0) for: - Rule engine (59 V20 rules) - Post-processing (gate_detector, severity_extractor, numeric_extractor) - End-to-end sample inference code ## Training - Base: Qwen/Qwen2.5-3B-Instruct - LoRA: r=32, α=64, dropout=0.05 - Target modules: q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj - 2 epochs, LR 2e-4, cosine, warmup 5%, effective batch 32 - Multi-lingual: EN/ZH/MS with Manglish particles (lah/kah/meh)