File size: 4,197 Bytes
37bb2ac
9efa4d6
 
0e8b0c4
 
9efa4d6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37bb2ac
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
155
156
157
158
159
160
161
162
---
base_model: vinai/phobert-base
language: vi
pipeline_tag: text-classification
tags:
  - aspect-based-sentiment-analysis
  - sentiment-analysis
  - vietnamese-nlp
  - phobert
license: mit
---

# PhoBERT Aspect-Based Sentiment Analysis

Mô hình phân tích cảm xúc theo khía cạnh (Aspect-Based Sentiment Analysis - ABSA) cho tiếng Việt, được xây dựng dựa trên PhoBERT. Mô hình dự đoán cực tính cảm xúc (**tiêu cực / trung lập / tích cực**) cho **4 khía cạnh** đồng thời trong một lần forward pass:

- **food** (món ăn)
- **price** (giá cả)
- **space** (không gian)
- **service** (phục vụ)

Mô hình được thiết kế đặc biệt cho phân tích đánh giá nhà hàng và ẩm thực tiếng Việt.

## Model Overview

- **Base model:** [vinai/phobert-base](https://huggingface.co/vinai/phobert-base)
- **Architecture:** PhoBERT encoder với 4 classification heads độc lập
- **Task:** Aspect-Based Sentiment Analysis (ABSA)
- **Number of aspects:** 4
- **Number of sentiment classes:** 3 (negative, neutral, positive)

## Output Format

Mô hình trả về tensor với shape: `(batch_size, 4, 3)`

Trong đó:
- `4` tương ứng với số lượng khía cạnh
- `3` tương ứng với số lớp cảm xúc cho mỗi khía cạnh

**Thứ tự các khía cạnh trong output tensor:**
```python
["food", "price", "space", "service"]
```

**Sentiment Labels:**

| ID | Label    | Mô tả       |
|----|----------|-------------|
| 0  | negative | Tiêu cực    |
| 1  | neutral  | Trung lập   |
| 2  | positive | Tích cực    |

## Installation

```bash
pip install torch transformers
```

## Usage

> ⚠️ **Important:** Mô hình này sử dụng custom architecture, do đó bạn phải enable `trust_remote_code=True` khi load.

### Load Model and Tokenizer

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

tokenizer = AutoTokenizer.from_pretrained(
    "phngahn/phobert-aspect-based-sentiment"
)

model = AutoModel.from_pretrained(
    "phngahn/phobert-aspect-based-sentiment",
    trust_remote_code=True
)
```

### Inference

```python
text = "Món ăn ngon nhưng phục vụ chậm và giá hơi cao"

inputs = tokenizer(text, return_tensors="pt")

with torch.no_grad():
    logits = model(**inputs)

print(logits.shape)  # torch.Size([1, 4, 3])
```

### Decode Predictions

```python
aspect_names = ["food", "price", "space", "service"]
sentiment_labels = ["negative", "neutral", "positive"]

def predict(text):
    inputs = tokenizer(text, return_tensors="pt")
    
    with torch.no_grad():
        logits = model(**inputs)[0]
    
    preds = logits.argmax(dim=1)
    
    return {
        aspect: sentiment_labels[p.item()]
        for aspect, p in zip(aspect_names, preds)
    }

# Example
result = predict("Món ăn ngon nhưng giá cao, phục vụ chậm")
print(result)
```

**Output:**
```python
{
    "food": "positive",
    "price": "negative",
    "space": "neutral",
    "service": "negative"
}
```

## Model Details

- Mô hình dựa trên kiến trúc PhoBERT/RoBERTa và bỏ qua `token_type_ids`
- Tương thích với `AutoModel``Trainer` của Hugging Face
- Mô hình không được wrap sẵn thành Hugging Face pipeline

## Intended Use

✅ Phân tích đánh giá nhà hàng tiếng Việt  
✅ Phân tích cảm xúc theo khía cạnh  
✅ Nghiên cứu học thuật và dự án sinh viên  

## Limitations

⚠️ Chỉ được huấn luyện trên dữ liệu nhà hàng/ẩm thực  
⚠️ Hiệu suất có thể giảm trên các domain khác  
⚠️ Mô hình luôn dự đoán cả 4 khía cạnh (giả định tất cả khía cạnh đều xuất hiện)  

## Citation

Nếu bạn sử dụng mô hình này trong công trình học thuật, vui lòng trích dẫn PhoBERT:

```bibtex
@article{phobert,
title     = {{PhoBERT: Pre-trained language models for Vietnamese}},
author    = {Dat Quoc Nguyen and Anh Tuan Nguyen},
journal   = {Findings of EMNLP},
year      = {2020}
}

```

## License

Mô hình này tuân theo license của base model [vinai/phobert-base](https://huggingface.co/vinai/phobert-base).

---