--- license: mit language: - en pipeline_tag: text-generation tags: - nlu - intent-classification - entity-extraction - telegram-bot - phi-3.5 - fine-tuned base_model: microsoft/Phi-3.5-mini-instruct --- # Telegram Bot NLU - Fine-tuned Phi-3.5-mini Fine-tuned Phi-3.5-mini-instruct for intent classification and entity extraction in a Telegram bot. ## Model Details - **Base Model:** microsoft/Phi-3.5-mini-instruct (3.8B parameters) - **Fine-tuning Method:** LoRA (Low-Rank Adaptation) - **Training Data:** 170 examples across 6 intents - **Training Time:** 5 minutes on RTX 3090 Ti - **Final Loss:** 10.4 ## Intents - check_weather - monitor_chess - goodbye - help - show_menu - cancel ## Entities - city - url - tournament_id - player_snr - round - tournament ## Usage ```python from transformers import AutoModelForCausalLM, AutoTokenizer import torch model = AutoModelForCausalLM.from_pretrained( "CyberSecify/telegram-bot-phi35mini-nlu-merged", torch_dtype=torch.float16, device_map="auto", trust_remote_code=True ) tokenizer = AutoTokenizer.from_pretrained( "CyberSecify/telegram-bot-phi35mini-nlu-merged", trust_remote_code=True ) # Format prompt system_msg = "You are an NLU assistant. Classify intents and extract entities. Return JSON." user_msg = "what is the weather in london?" prompt = f"<|system|>{system_msg}<|end|><|user|>{user_msg}<|end|><|assistant|>" # Generate inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_new_tokens=200, temperature=0.1) response = tokenizer.decode(outputs[0], skip_special_tokens=True) ``` ## Training Details - **Dataset:** 170 examples (Weather: 120, Chess: 12, Simple: 38) - **Epochs:** 3 - **Batch Size:** 4 (effective 16 with gradient accumulation) - **Learning Rate:** 2e-4 - **LoRA Config:** r=16, alpha=32, dropout=0.05 - **Trainable Parameters:** 3.1M (0.16% of total)