ovinduG's picture
Upload multi-domain classifier model
cdcea68 verified
metadata
language: en
license: apache-2.0
tags:
  - text-classification
  - multi-domain
  - phi-3
  - lora
  - domain-classification
datasets:
  - custom
metrics:
  - accuracy
  - f1
library_name: transformers
pipeline_tag: text-classification

Multi-Domain Classifier (Phi-3)

A fine-tuned domain classification model based on Microsoft's Phi-3-mini-4k-instruct, trained to classify queries into 17 domains and detect multi-domain queries.

Model Description

This model classifies text queries into domains and identifies when queries span multiple domains. It returns structured JSON output with primary domain, confidence scores, multi-domain flag, and secondary domains.

Supported Domains (17 total)

ambiguous, api_generation, business, coding, creative_content, data_analysis, education, general_knowledge, geography, history, law, literature, mathematics, medicine, science, sensitive, technology

Training Details

  • Base Model: microsoft/Phi-3-mini-4k-instruct
  • Training Method: LoRA (Low-Rank Adaptation)
  • Training Samples: 3,666
  • Multi-Domain Samples: 516 (14.1%)
  • Training Time: 1.61 hours
  • LoRA Rank: 32
  • LoRA Alpha: 64

Training Configuration

{
  "num_epochs": 5,
  "batch_size": 16,
  "learning_rate": 0.0002,
  "warmup_ratio": 0.1,
  "weight_decay": 0.01,
  "gradient_accumulation_steps": 2,
  "eval_steps": 50,
  "save_steps": 100,
  "logging_steps": 10
}

Performance

  • Primary Domain Accuracy: 97.25%
  • F1 Score (Macro): 0.9177458758572196
  • Multi-Domain Detection F1: 0.9523809523809523

Usage

Installation

pip install transformers torch peft

Basic Usage

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
import torch
import json

# Load model
base_model = AutoModelForCausalLM.from_pretrained(
    "microsoft/Phi-3-mini-4k-instruct",
    torch_dtype=torch.bfloat16,
    device_map="auto"
)

model = PeftModel.from_pretrained(base_model, "ovinduG/multi-domain-classifier-phi3")
tokenizer = AutoTokenizer.from_pretrained("ovinduG/multi-domain-classifier-phi3")

# Prepare input
query = "Build a machine learning model to analyze sales data"

prompt = f'''Classify this query: {query}

Output JSON format:
{
  "primary_domain": "domain_name",
  "primary_confidence": 0.95,
  "is_multi_domain": true/false,
  "secondary_domains": [{"domain": "name", "confidence": 0.85}]
}'''

# 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)

# Parse result
result = json.loads(response.split("Output JSON format:")[-1].strip())
print(result)

Output Format

{
  "primary_domain": "data_analysis",
  "primary_confidence": 0.92,
  "is_multi_domain": true,
  "secondary_domains": [
    {"domain": "machine_learning", "confidence": 0.85},
    {"domain": "business", "confidence": 0.72}
  ]
}

Use Cases

  • Query Routing: Route user queries to specialized models or APIs based on domain
  • Intent Classification: Understand the domain and complexity of user requests
  • Multi-Domain Detection: Identify queries that require expertise in multiple areas
  • Content Categorization: Classify documents and articles by domain

Limitations

  • Model may struggle with very rare domains (< 50 training examples)
  • Performance may degrade on domains not seen during training
  • Confidence scores are relative and may need calibration for production use
  • Secondary domain detection accuracy varies based on query clarity

Training Data

Trained on a custom dataset of 3,666 queries across 17 domains, with 14.1% multi-domain examples.

Citation

@misc{multi-domain-classifier-phi3,
  author = {ovinduG},
  title = {Multi-Domain Classifier based on Phi-3},
  year = {2024},
  publisher = {HuggingFace},
  url = {https://huggingface.co/ovinduG/multi-domain-classifier-phi3}
}

Model Card Authors

  • ovinduG

License

Apache 2.0 (following base model license)