--- 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` và `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). ---