File size: 5,175 Bytes
8f4f058
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
---
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)