Fine-tuned from vinai/phobert-base on visolex/VLSP2018-ABSA-Hotel for joint aspect detection + sentiment classification (shared heads).

Model Details

  • Base Model: vinai/phobert-base
  • Dataset: visolex/VLSP2018-ABSA-Hotel
  • Fine-tuning framework: HuggingFace Transformers
  • Model type: Transformer-based for Aspect-Based Sentiment Analysis.

Aspect Labels:

  • FACILITIES#CLEANLINESS
  • FACILITIES#COMFORT
  • FACILITIES#DESIGN&FEATURES
  • FACILITIES#GENERAL
  • FACILITIES#MISCELLANEOUS
  • FACILITIES#PRICES
  • FACILITIES#QUALITY
  • FOOD&DRINKS#MISCELLANEOUS
  • FOOD&DRINKS#PRICES
  • FOOD&DRINKS#QUALITY
  • FOOD&DRINKS#STYLE&OPTIONS
  • HOTEL#CLEANLINESS
  • HOTEL#COMFORT
  • HOTEL#DESIGN&FEATURES
  • HOTEL#GENERAL
  • HOTEL#MISCELLANEOUS
  • HOTEL#PRICES
  • HOTEL#QUALITY
  • LOCATION#GENERAL
  • ROOMS#CLEANLINESS
  • ROOMS#COMFORT
  • ROOMS#DESIGN&FEATURES
  • ROOMS#GENERAL
  • ROOMS#MISCELLANEOUS
  • ROOMS#PRICES
  • ROOMS#QUALITY
  • ROOM_AMENITIES#CLEANLINESS
  • ROOM_AMENITIES#COMFORT
  • ROOM_AMENITIES#DESIGN&FEATURES
  • ROOM_AMENITIES#GENERAL
  • ROOM_AMENITIES#MISCELLANEOUS
  • ROOM_AMENITIES#PRICES
  • ROOM_AMENITIES#QUALITY
  • SERVICE#GENERAL

Sentiment Labels:

  • POSITIVE
  • NEGATIVE
  • NEUTRAL

Hyperparameters

  • Batch size: 32
  • Learning rate: 3e-5
  • Epochs: 100
  • Max sequence length: 256
  • Early stopping patience: 5

Usage

import torch
from transformers import AutoTokenizer, AutoModel

# Danh sách aspect và sentiment labels
aspect_labels = [
    "FACILITIES#CLEANLINESS", "FACILITIES#COMFORT", "FACILITIES#DESIGN&FEATURES",
    "FACILITIES#GENERAL", "FACILITIES#MISCELLANEOUS", "FACILITIES#PRICES",
    "FACILITIES#QUALITY", "FOOD&DRINKS#MISCELLANEOUS", "FOOD&DRINKS#PRICES",
    "FOOD&DRINKS#QUALITY", "FOOD&DRINKS#STYLE&OPTIONS", "HOTEL#CLEANLINESS",
    "HOTEL#COMFORT", "HOTEL#DESIGN&FEATURES", "HOTEL#GENERAL",
    "HOTEL#MISCELLANEOUS", "HOTEL#PRICES", "HOTEL#QUALITY", "LOCATION#GENERAL",
    "ROOMS#CLEANLINESS", "ROOMS#COMFORT", "ROOMS#DESIGN&FEATURES",
    "ROOMS#GENERAL", "ROOMS#MISCELLANEOUS", "ROOMS#PRICES", "ROOMS#QUALITY",
    "ROOM_AMENITIES#CLEANLINESS", "ROOM_AMENITIES#COMFORT",
    "ROOM_AMENITIES#DESIGN&FEATURES", "ROOM_AMENITIES#GENERAL",
    "ROOM_AMENITIES#MISCELLANEOUS", "ROOM_AMENITIES#PRICES",
    "ROOM_AMENITIES#QUALITY", "SERVICE#GENERAL"
]
sentiment_labels = ["POSITIVE", "NEGATIVE", "NEUTRAL"]

# Load tokenizer và model (phải về đúng class TransformerForABSA)
repo = "visolex/phobert-absa-hotel"
tokenizer = AutoTokenizer.from_pretrained(repo, trust_remote_code=True)
model = AutoModel.from_pretrained(repo, trust_remote_code=True)
model.eval()

def predict_absa_multi(
    text: str,
    aspect_labels: list[str],
    sentiment_labels: list[str],
    threshold: float = 0.5
) -> list[tuple[str,str]]:
    inputs = tokenizer(
        text,
        return_tensors="pt",
        padding=True,
        truncation=True,
        max_length=256
    )
    inputs.pop("token_type_ids", None)

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

    # out.logits có shape [1, A, S+1]
    logits = out.logits.squeeze(0)
    probs = torch.softmax(logits, dim=-1)

    num_s = len(sentiment_labels)
    none_id = probs.size(-1) - 1
    results = []

    for i, asp in enumerate(aspect_labels):
        prob_i = probs[i]
        pred_id = int(prob_i.argmax().item())

        if pred_id != none_id and pred_id < num_s:
            score = prob_i[pred_id].item()
            if score >= threshold:
                results.append((asp, sentiment_labels[pred_id].lower()))

    return results

# Example usage
text = "Khách sạn này sạch sẽ nhưng phòng lại hơi nhỏ và dịch vụ chưa tốt lắm."
preds = predict_absa_multi(text, aspect_labels, sentiment_labels, threshold=0.2)
print(preds)
# Expected output similar to: [('HOTEL#CLEANLINESS', 'positive'), ('ROOMS#COMFORT', 'negative'), ('SERVICE#GENERAL', 'negative')]
Downloads last month
92
Safetensors
Model size
135M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for visolex/phobert-absa-hotel

Base model

vinai/phobert-base
Finetuned
(118)
this model

Dataset used to train visolex/phobert-absa-hotel

Collection including visolex/phobert-absa-hotel