File size: 6,624 Bytes
43815ee
da9ddeb
 
43815ee
da9ddeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43815ee
da9ddeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f667f94
da9ddeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f667f94
 
da9ddeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
---
language:
- fa
license: mit
tags:
- sentiment-analysis
- text-classification
- parsbert
- pytorch
- transformers
- persian
datasets:
- MTE313/SnappFood_dataset_advanced
metrics:
- accuracy
- f1
- precision
- recall
pipeline_tag: text-classification
widget:
- text: "کیفیت غذا فوق‌العاده بود و ارسال بسیار سریع انجام شد."
- text: "غذا خیلی بد بود و سرد رسیده بود."
- text: "سفارش معمولی بود، چیز خاصی نداشت."
---

# NEXARA Sentiment Analysis Model (مدل تحلیل احساسات نکسارا)

مدل **NEXARA** یک مدل مبتنی بر ترنسفورمرها برای **تحلیل احساسات پنج کلاسه زبان فارسی** است. این مدل با استفاده از معماری **ParsBERT** (نسخه Base) بر روی دیتاست‌های تلفیقی رسمی و عامیانه فارسی Fine-Tune شده است.

## 🎯 ویژگی‌های مدل

- **زبان:** فارسی (Persian / Farsi)
- **پایه مدل:** ParsBERT (BERT-base-fa)
- **نوع مسئله:** دسته‌بندی متن (Text Classification / Sequence Classification)
- **تعداد کلاس‌ها:** ۵ کلاسه (از بسیار منفی تا بسیار مثبت)
- **حجم پارامترها:** کمتر از ۵۰۰ میلیون پارامتر

---

## 📊 دسته‌بندی کلاس‌ها (Labels Mapping)

خروجی مدل شامل ۵ کلاس عددی (بین ۰ تا ۴) است که با احساسات زیر متناظر هستند:

| برچسب عددی | امتیاز (Score) | احساس متناظر | توضیحات |
|:---:|:---:|:---:|:---|
| **0** | **-2** | 😡 بسیار منفی | نارضایتی شدید، انتقاد تند، تجربه خرید یا خدمات بسیار بد |
| **1** | **-1** | 😞 منفی | نارضایتی، تجربه منفی، بیان مشکلات معمولی |
| **2** | **0** | 😐 خنثی | بدون احساس خاص، بیان اطلاعات یا واقعیت‌های بدون جهت‌گیری |
| **3** | **+1** | 😊 مثبت | رضایت نسبی، تجربه خوب، تعریف معمولی |
| **4** | **+2** | 🤩 بسیار مثبت | رضایت شدید، تحسین زیاد، ابراز وفاداری به خدمات/محصول |

---

## 📦 داده‌های آموزشی (Training Data)

این مدل بر روی یک دیتاست ترکیبی بهینه با حجم **۱۸,۵۰۰ جمله** آموزش دیده است:
1. **ديتاست SentiPers (۱۵,۰۰۰ جمله):** شامل جملات رسمی‌تر و ساختاریافته به زبان فارسی با برچسب‌های ۵ کلاسه پیش‌فرض.
2. **دیتاست اسنپ‌فود (۳,۵۰۰ جمله گزینش‌شده):** نمونه‌های چالش‌برانگیز و عامیانه استخراج‌شده از نظرات کاربران اسنپ‌فود که به صورت دستی و دقیق در مقیاس ۵ کلاسه برچسب‌گذاری شده‌اند تا درک مدل از متون عامیانه افزایش یابد.

---

## 💻 راهنمای استفاده (Quick Start)

برای استفاده از این مدل در پایتون با کتابخانه `transformers` می‌توانید از کد زیر استفاده کنید:

```python
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

# مسیر بارگذاری مدل از هاب hugging face
MODEL_NAME = "MTE313/NEXARA_model" 

# بارگذاری توکنایزر و مدل
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME)

# تنظیم مدل در حالت ارزیابی
model.eval()

def predict_sentiment(text):
    # پیش‌پردازش و توکنایزر
    inputs = tokenizer(
        text,
        return_tensors="pt",
        truncation=True,
        padding=True,
        max_length=512
    )
    
    # استنتاج
    with torch.no_grad():
        outputs = model(**inputs)
        predictions = torch.nn.functional.softmax(outputs.logits, dim=-1)
        
    predicted_class = torch.argmax(predictions, dim=-1).item()
    confidence = predictions[0][predicted_class].item()
    
    # نگاشت برچسب‌ها
    labels = {
        0: "😡 بسیار منفی (Very Negative)",
        1: "😞 منفی (Negative)",
        2: "😐 خنثی (Neutral)",
        3: "😊 مثبت (Positive)",
        4: "🤩 بسیار مثبت (Very Positive)"
    }
    
    return {
        "text": text,
        "label": labels[predicted_class],
        "score": predicted_class - 2, # تبدیل به مقیاس -2 تا +2
        "confidence": f"{confidence:.2%}"
    }

# تست نمونه‌ها
test_sentences = [
    "واقعا از خریدم راضی هستم، هم قیمت مناسب بود هم کیفیت عالی.",
    "غذا اصلا خوب نبود، کاملا سرد رسیده بود و طعم بدی داشت.",
    "یک کالا معمولی بود، ویژگی خاصی نداشت ولی کار راه اندازه."
]

for sentence in test_sentences:
    result = predict_sentiment(sentence)
    print(f"متن: {result['text']}")
    print(f"احساس: {result['label']} | امتیاز: {result['score']} | اطمینان: {result['confidence']}")
    print("-" * 50)
```

---

## 🛠️ فرآیند و تنظیمات آموزش (Training Procedure)

مدل با پارامترهای زیر بر روی دیتاست آموزشی Fine-Tune شده است:

- **Optimizer:** AdamW
- **Learning Rate:** 2e-5
- **Batch Size:** 8
- **Epochs:** 3
- **Warmup Steps:** 500
- **Weight Decay:** 0.01

---

## ⚠️ محدودیت‌ها و سوگیری‌ها (Limitations & Bias)

- مدل به شدت تحت تاثیر کیفیت متون ورودی است. در برخی جملات بسیار کوتاه عامیانه یا جملات دارای کنایه (Sarcasm)، ممکن است دقت مدل کاهش یابد.
- توصیه‌ می‌شود قبل از ارسال متن به مدل، فرآیند پیش‌پردازش ساده مانند نرمال‌سازی نویسه‌ها (ی و ک فارسی) را انجام دهید تا بهترین نتایج حاصل شود.

---

## 📄 مجوز و شرایط استفاده (License)

استفاده از این مدل برای مقاصد آموزشی، پژوهشی و کارهای غیرتجاری با ذکر منبع آزاد است. برای استفاده تجاری، لطفاً فایل مجوز مربوطه را مطالعه نمایید.