Views
No views yet
naazimsnh02/fraudsentinel-qwen3-14b-lora.AUTO_APPROVE → APPROVE_WITH_MONITORING → STEP_UP_AUTH → TEMPORARY_HOLD → AUTO_BLOCK → SAR_REVIEW| Property | Value |
|---|---|
| Base model | unsloth/Qwen3-14B (Apache-2.0) |
| Fine-tuning method | SFT + LoRA, merged to full bf16 weights |
| LoRA rank / alpha | 16 / 32 |
| Target modules | All linear layers (q, k, v, o projections + MLP gate/up/down) |
| Trainable parameters (pre-merge) | 64,225,280 (0.433% of 14.83B) |
| Dataset | naazimsnh02/fraud-financial-crime-qwen3-sft-v2 (11,016 train examples) |
| Epochs | 2 |
| Total steps | 1,378 |
| Effective batch size | 16 (2 per device × 8 gradient accumulation) |
| Learning rate | 1e-4 (cosine decay, 5% warmup) |
| Optimizer | AdamW 8-bit |
| Precision | bfloat16 |
| Max sequence length | 4,096 |
| Hardware | AMD MI300X, 192 GB VRAM, ROCm 7.0 |
| Framework | Unsloth 2026.6.1, TRL 0.22.2 |
| Train loss (final) | 0.2467 |
| Training time | 70.5 min |
| Peak VRAM | 39.8 GB (20.8% of 192 GB) |
1from transformers import AutoModelForCausalLM, AutoTokenizer
2import torch
3
4model = AutoModelForCausalLM.from_pretrained(
5 "naazimsnh02/fraudsentinel-qwen3-14b-merged",
6 torch_dtype=torch.bfloat16,
7 device_map="auto",
8)
9tokenizer = AutoTokenizer.from_pretrained("naazimsnh02/fraudsentinel-qwen3-14b-merged")1from unsloth import FastLanguageModel
2import torch
3
4model, tokenizer = FastLanguageModel.from_pretrained(
5 model_name = "naazimsnh02/fraudsentinel-qwen3-14b-merged",
6 max_seq_length = 4096,
7 dtype = torch.bfloat16,
8 load_in_4bit = False,
9)
10FastLanguageModel.for_inference(model)1vllm serve naazimsnh02/fraudsentinel-qwen3-14b-merged \
2 --dtype bfloat16 \
3 --max-model-len 40961messages = [
2 {"role": "system", "content": "You are FraudSentinel, an expert fraud detection and AML investigation assistant."},
3 {"role": "user", "content": (
4 "Analyze this AML transaction and return a structured JSON risk assessment.\n\n"
5 "Transfer: amount_paid=95000 USD, amount_received=94850 EUR, payment_format=ACH, "
6 "sender_out_degree=47, sender_in_degree=3, receiver_in_degree=52, "
7 "ccy_mismatch=True, is_round=False, is_laundering=True"
8 )},
9]
10
11# Fast mode — thinking OFF (default for Tier-2 triage)
12text = tokenizer.apply_chat_template(
13 messages,
14 tokenize=False,
15 add_generation_prompt=True,
16 enable_thinking=False,
17)
18inputs = tokenizer(text, return_tensors="pt").to(model.device)
19
20with torch.no_grad():
21 output = model.generate(
22 **inputs,
23 max_new_tokens=512,
24 temperature=0.1,
25 do_sample=True,
26 )
27print(tokenizer.decode(output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))1text = tokenizer.apply_chat_template(
2 messages,
3 tokenize=False,
4 add_generation_prompt=True,
5 enable_thinking=True, # activates Qwen3 thinking tokens, adds ~3–5 s latency
6)1{
2 "risk_score": 0.91,
3 "risk_level": "CRITICAL",
4 "conclusion": "SUSPICIOUS",
5 "primary_typology": "layering / fan-in gather-scatter",
6 "secondary_typology": "rapid_passthrough",
7 "key_signals": [
8 "high_receiver_in_degree",
9 "cross_currency_conversion",
10 "ach_channel_over_representation"
11 ],
12 "explanation": "Sender account shows unusually low inbound activity (in-degree 3) relative to high outbound fan-out (47 unique counterparties). Receiver account aggregates from 52 sources — consistent with layering...",
13 "feature_importance": {
14 "high_receiver_in_degree": 0.41,
15 "cross_currency_conversion": 0.33,
16 "ach_channel_over_representation": 0.26
17 },
18 "recommended_action": "SAR_REVIEW",
19 "sar_required": true,
20 "sar_rationale": "Transaction exhibits layering indicators — high-degree aggregation, cross-currency conversion, and ACH over-representation consistent with structuring."
21}You are FraudSentinel, an expert fraud detection and AML investigation assistant.