🔒 Qwen2.5-1.5B Persian Text Anonymization
📋 معرفی
این مدل یک نسخه فاینتیون شده از 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 (پیشنهادی)
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
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
- 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
pip install requests
برای استفاده لوکال
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 اصلی را در مکان امن نگه دارید
توصیهها
- از HTTPS برای ارسال دادهها استفاده کنید
- mapping را در دیتابیس رمزنگاری شده ذخیره کنید
- دسترسی به mapping را محدود کنید
- از audit logging استفاده کنید
🛠️ استفاده در Production
Hugging Face Space
یک نمونه کامل در Space موجود است:
https://huggingface.co/spaces/KashefTech/Data-Anonymization
Docker
FROM python:3.10-slim
RUN pip install transformers torch accelerate
COPY . /app
WORKDIR /app
CMD ["python", "app.py"]
API Deployment
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 منتشر شده است.
- ✅ استفاده تجاری مجاز است
- ✅ تغییر و توزیع مجاز است
- ⚠️ بدون هیچ گارانتی ارائه میشود
🤝 مشارکت
برای بهبود مدل:
- مشکلات را در Issues گزارش دهید
- Pull Request بفرستید
- دادههای آموزشی کمک کنید
📧 تماس
- GitHub: [YOUR_GITHUB]
- Email: [YOUR_EMAIL]
- Hugging Face: @KashefTech
🙏 قدردانی
- Qwen Team برای مدل پایه
- Hugging Face برای زیرساخت
- جامعه فارسیزبان NLP
📚 ارجاعات
اگر از این مدل استفاده میکنید، لطفاً ارجاع دهید:
@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
Model tree for KashefTech/qwen-anonymizer-lora
Base model
Qwen/Qwen2.5-1.5B