CoolFace
Modelpublic

Hesam760/persian-water-regulations-qwen2.5-1.5b

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes69downloads
Model Card

Persian Water Regulations Qwen2.5-1.5B

A Persian domain-adapted language model for answering questions about the "Operational By-law and General Conditions of Water and Wastewater Tariffs".

Base model

Qwen/Qwen2.5-1.5B-Instruct

Training data

  • —Records: 274
  • —Training records: 246
  • —Validation records: 28
  • —Format: conversational prompt-completion JSONL
  • —Split: group-aware by source section to reduce source leakage

Training method

  • —Method: QLoRA / supervised fine-tuning
  • —Quantization: 4-bit NF4 with double quantization
  • —LoRA rank: 16
  • —LoRA alpha: 32
  • —LoRA dropout: 0.05
  • —Target modules: all-linear
  • —Learning rate: 1e-04
  • —Requested epochs: 10
  • —Maximum sequence length: 512
  • —GPU: Tesla T4

Validation generation metrics

Base model

  • —Exact match: 0.0000
  • —Token F1: 0.2044
  • —ROUGE-L F1: 0.1670

Fine-tuned model

  • —Exact match: 0.0000
  • —Token F1: 0.3623
  • —ROUGE-L F1: 0.3196

The automatic metrics measure textual similarity and do not establish legal correctness. Manual review is required for authoritative use.

Usage

python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "Hesam760/persian-water-regulations-qwen2.5-1.5b"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    device_map="auto",
    dtype=torch.float16,
)

messages = [
    {
        "role": "system",
        "content": (
            "شما دستیار تخصصی آیین‌نامه عملیاتی و شرایط عمومی تعرفه‌های "
            "آب و فاضلاب هستید. فقط بر اساس مفاد آیین‌نامه پاسخ دهید."
        ),
    },
    {
        "role": "user",
        "content": "هدف آیین‌نامه چیست؟",
    },
]

inputs = tokenizer.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    return_dict=True,
    return_tensors="pt",
).to(model.device)

output_ids = model.generate(
    **inputs,
    max_new_tokens=160,
    do_sample=False,
)

new_tokens = output_ids[0, inputs["input_ids"].shape[-1]:]
print(tokenizer.decode(new_tokens, skip_special_tokens=True))

Intended use

  • —Demonstration of Persian domain adaptation
  • —Regulatory question answering
  • —Educational and research use

Limitations

  • —The model is trained on a small, single-document dataset.
  • —It can reproduce outdated, incomplete, or incorrectly extracted provisions.
  • —It may hallucinate provisions or section numbers.
  • —It is not a legal authority and must not be used as a substitute for the official regulation or professional advice.
  • —Verify the redistribution rights of the source-derived training dataset before publishing the dataset itself.