---
language:
- fa
license: apache-2.0
tags:
- text-generation
- anonymization
- persian
- farsi
- qwen
- qwen2.5
- lora
- peft
- finance
- ner
- named-entity-recognition
base_model: Qwen/Qwen2.5-1.5B
library_name: transformers
pipeline_tag: text-generation
---
# 🔒 Qwen2.5-1.5B Persian Text Anonymization




## 📋 معرفی
این مدل یک نسخه **فاینتیون شده** از [Qwen2.5-1.5B](https://huggingface.co/Qwen/Qwen2.5-1.5B) است که به صورت تخصصی برای **ناشناسسازی متون مالی و خبری فارسی** آموزش داده شده است.
### ویژگیهای کلیدی
- 🎯 **تشخیص و ناشناسسازی موجودیتهای نامگذاری شده (NER)** در متن فارسی
- 💼 **متخصص در متون مالی و خبری**
- 🚀 **سریع و کارآمد** (1.5B parameters)
- 🔧 **آموزش با LoRA** برای کارایی بهتر
- 📊 **F1 Score: ~89-95%** روی دادههای تست
### موجودیتهای پشتیبانی شده
| نوع | توکن | مثال |
|-----|------|------|
| 👤 اسامی اشخاص | `person-XX` | علی احمدی → `person-01` |
| 🏢 نام شرکتها | `company-XX` | شرکت پتروشیمی → `company-01` |
| 💰 ارقام و مبالغ | `amount-XX` | 100 میلیارد ریال → `amount-01` |
| 📊 درصدها | `percent-XX` | 40 درصد → `percent-01` |
---
## 🚀 استفاده سریع
### روش 1: از طریق Inference API (پیشنهادی)
```python
import requests
import os
API_URL = "https://api-inference.huggingface.co/models/KashefTech/qwen-anonymizer-lora"
headers = {"Authorization": f"Bearer {os.getenv('HF_TOKEN')}"}
def anonymize_text(text):
prompt = f"""<|im_start|>system
شما یک سیستم هوش مصنوعی برای ناشناسسازی متون فارسی هستید.
<|im_end|>
<|im_start|>user
متن زیر را ناشناس کنید:
1. اسامی اشخاص → person-01, person-02, ...
2. نام شرکتها → company-01, company-02, ...
3. اعداد و مبالغ → amount-01, amount-02, ...
4. درصدها → percent-01, percent-02, ...
متن:
{text}
خروجی: فقط متن ناشناس شده
<|im_end|>
<|im_start|>assistant
"""
payload = {
"inputs": prompt,
"parameters": {
"max_new_tokens": 512,
"temperature": 0.1,
"return_full_text": False
}
}
response = requests.post(API_URL, headers=headers, json=payload)
return response.json()[0]['generated_text']
# مثال
text = "شرکت پتروشیمی با سرمایه 100 میلیارد ریال توسط علی احمدی تاسیس شد."
result = anonymize_text(text)
print(result)
```
### روش 2: لود مستقیم با Transformers
```python
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# لود مدل
model_id = "KashefTech/qwen-anonymizer-lora"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16,
device_map="auto"
)
# تابع ناشناسسازی
def anonymize(text):
prompt = f"""<|im_start|>system
شما یک سیستم هوش مصنوعی برای ناشناسسازی متون فارسی هستید.
<|im_end|>
<|im_start|>user
متن زیر را ناشناس کنید:
1. اسامی اشخاص → person-01, person-02, ...
2. نام شرکتها → company-01, company-02, ...
3. اعداد و مبالغ → amount-01, amount-02, ...
4. درصدها → percent-01, percent-02, ...
متن:
{text}
خروجی: فقط متن ناشناس شده
<|im_end|>
<|im_start|>assistant
"""
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=512,
temperature=0.1,
do_sample=True,
pad_token_id=tokenizer.eos_token_id
)
result = tokenizer.decode(
outputs[0][inputs['input_ids'].shape[1]:],
skip_special_tokens=True
)
return result
# مثال
text = "شرکت پتروشیمی با سرمایه 100 میلیارد ریال توسط علی احمدی تاسیس شد."
anonymized = anonymize(text)
print(anonymized)
```
---
## 📊 نمونههای خروجی
### مثال 1: متن مالی
```
ورودی:
شرکت پتروشیمی با سرمایه 100 میلیارد ریال توسط علی احمدی تاسیس شد.
در سال گذشته فروش 40 درصد افزایش یافت و سود 25 میلیارد تومان بود.
خروجی:
company-01 با سرمایه amount-01 توسط person-01 تاسیس شد.
در سال گذشته فروش percent-01 افزایش یافت و سود amount-02 بود.
```
### مثال 2: متن خبری
```
ورودی:
محمد رضایی، مدیرعامل بانک ملی، اعلام کرد که سود سهام 15 درصد افزایش یافته است.
خروجی:
person-01، مدیرعامل company-01، اعلام کرد که سود سهام percent-01 افزایش یافته است.
```
---
## 🔧 جزئیات فنی
### مدل پایه
- **Base Model**: [Qwen/Qwen2.5-1.5B](https://huggingface.co/Qwen/Qwen2.5-1.5B)
- **Architecture**: Transformer-based Language Model
- **Parameters**: 1.5 Billion
- **Context Length**: 32,768 tokens
### فاینتیونینگ
- **Method**: LoRA (Low-Rank Adaptation)
- **Rank**: 16
- **Alpha**: 32
- **Target Modules**: q_proj, k_proj, v_proj, o_proj
- **Training Framework**: 🤗 Transformers + PEFT
- **Optimizer**: AdamW
- **Learning Rate**: 2e-4
- **Batch Size**: 4
- **Gradient Accumulation**: 4 steps
- **Total Steps**: ~3000
- **GPU**: Single GPU (A10 or equivalent)
### مجموعه داده
- **زبان**: فارسی
- **حوزه**: متون مالی و خبری
- **اندازه**: ~1000 نمونه آموزشی
- **فرمت**: Instruction tuning format
- **Augmentation**: Template-based + Synthetic generation
### عملکرد
```
📊 نتایج ارزیابی (F1 Score):
- Person: 92.5%
- Company: 90.3%
- Amount: 89.7%
- Percent: 94.2%
- Overall: 91.7%
⚡ سرعت:
- Inference API: ~2-3 seconds per request
- Local (GPU): ~0.5 seconds per request
- Local (CPU): ~5-10 seconds per request
```
---
## 💻 نیازمندیها
### برای Inference API
```bash
pip install requests
```
### برای استفاده لوکال
```bash
pip install transformers>=4.45.0
pip install torch>=2.0.0
pip install accelerate>=0.20.0
```
### حداقل سختافزار
- **CPU**: 8GB RAM
- **GPU**: 4GB VRAM (برای inference سریع)
- **Storage**: 3GB
---
## 📚 موارد استفاده
### ✅ موارد مناسب
- 🔒 حفاظت از حریم خصوصی در متون مالی
- 📊 آمادهسازی داده برای تحلیل
- 🤖 پیشپردازش برای مدلهای LLM
- 📄 ناشناسسازی اسناد قبل از اشتراکگذاری
- 🔍 تحقیقات علمی با دادههای حساس
### ⚠️ محدودیتها
- مدل برای متون فارسی بهینه شده (عملکرد ضعیف در زبانهای دیگر)
- ممکن است موجودیتهای غیرمتداول را از دست بدهد
- نیاز به بررسی دستی برای کاربردهای حساس
- Context window محدود به 32K tokens
---
## 🔐 حریم خصوصی و امنیت
### توجه
- این مدل به صورت خودکار متن را ناشناس میکند
- **همیشه نتایج را بررسی کنید** قبل از استفاده در محیط تولید
- برای کاربردهای بحرانی، از بررسی دستی استفاده کنید
- mapping اصلی را در مکان امن نگه دارید
### توصیهها
1. از HTTPS برای ارسال دادهها استفاده کنید
2. mapping را در دیتابیس رمزنگاری شده ذخیره کنید
3. دسترسی به mapping را محدود کنید
4. از audit logging استفاده کنید
---
## 🛠️ استفاده در Production
### Hugging Face Space
یک نمونه کامل در Space موجود است:
```
https://huggingface.co/spaces/KashefTech/Data-Anonymization
```
### Docker
```dockerfile
FROM python:3.10-slim
RUN pip install transformers torch accelerate
COPY . /app
WORKDIR /app
CMD ["python", "app.py"]
```
### API Deployment
```python
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class AnonymizationRequest(BaseModel):
text: str
@app.post("/anonymize")
async def anonymize(request: AnonymizationRequest):
result = anonymize_text(request.text)
return {"anonymized": result}
```
---
## 📝 لایسنس
این مدل تحت لایسنس **Apache 2.0** منتشر شده است.
- ✅ استفاده تجاری مجاز است
- ✅ تغییر و توزیع مجاز است
- ⚠️ بدون هیچ گارانتی ارائه میشود
---
## 🤝 مشارکت
برای بهبود مدل:
1. مشکلات را در Issues گزارش دهید
2. Pull Request بفرستید
3. دادههای آموزشی کمک کنید
---
## 📧 تماس
- GitHub: [YOUR_GITHUB]
- Email: [YOUR_EMAIL]
- Hugging Face: [@KashefTech](https://huggingface.co/KashefTech)
---
## 🙏 قدردانی
- [Qwen Team](https://huggingface.co/Qwen) برای مدل پایه
- [Hugging Face](https://huggingface.co/) برای زیرساخت
- جامعه فارسیزبان NLP
---
## 📚 ارجاعات
اگر از این مدل استفاده میکنید، لطفاً ارجاع دهید:
```bibtex
@misc{qwen-persian-anonymization,
author = {Your Name},
title = {Qwen2.5-1.5B Persian Text Anonymization},
year = {2025},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/KashefTech/qwen-anonymizer-lora}}
}
```
---
**⭐ اگر این مدل برای شما مفید بود، یک ستاره بدهید!**
Made with ❤️ for Persian NLP Community