BERT: The Aspect-Based Sentiment Analyser

0
3

While BERT is great for sentiment analysis in natural language processing, it has a few limitations too.

Sentiment analysis of a complex sentence often requires a contextual understanding of the entire sentence rather than understanding the words in isolation or from left-to-right. Such contextual understanding requires simultaneous bi-directional reading of the sentence. Bidirectional Encoder Representations from Transformers, i.e., BERT, is considered the gold standard for Aspect-Based Sentiment Analysis (ABSA) because of its unique ability to understand context and directionality of a sentence and has become non-negotiable for it.

ABSA is an advanced NLP technique that can analyse texts beyond general sentiment (e.g., “This phone is okay”) to specific feature-level insights (e.g., “The battery is great (+), but the camera is blurry (-)”).

The ABSA concept can be divided into four key terms.

Aspect Terms (AT): The specific words used to describe a feature (e.g., ‘attended’, ‘cost’).

Aspect Categories (AC): The categories of the aspect term (e.g., ‘Service’, ‘Hardware’).

Opinion Terms (OT): The adjectives used to qualify the aspect term (e.g., ‘slow’, ‘brilliant’).

Sentiment polarity: The final classification—Positive, Negative, or Neutral.

Implementation pipeline

Step 1: Aspect Extraction (AE)

Identify the aspect term. For this, rule-based or supervised methods can be used. In the rule-based approach, POS (parts of speech) tagging is used to find noun or noun phrases as aspects. Secondly, in a supervised method, a BERT-based named entry recognition (NER) model trained to label aspect terms is used.

Step 2: Sentiment Classification (SC)

To identify the sentiment with respect to the aspect term, feed the model with both the sentence and the aspect as a pair: [CLS] Sentence [SEP] Aspect [SEP].

Step 3: Triplet Extraction (ASTE)

Extract sentiment as a triplet: (Aspect, Sentiment, Opinion); for example: (‘mobile’, ‘positive’, ‘good’).

To train a model, the following industry-standard datasets can be used.

Dataset name Domain Description
SemEval-2014 (Task 4) Laptops and restaurants The ‘gold standard’ for ABSA research. Highly annotated.
AWARE (2025) Smartphone apps Modern dataset covering Productivity, Social, and Games.
M-ABSA (2025) Multilingual Covers 21 languages and 7 domains (travel, movies, etc).
Amazon/Yelp ABSA E-commerce Subsets of Amazon reviews specifically labelled for feature-level sentiment.

Python implementation

Here is a simple Python implementation of the above ABSA approach for the review text: “I bought a spectacular camera but it has a terrible battery.”

import os
os.environ[“HF_HUB_DISABLE_SYMLINKS_WARNING”] = “1”
# import your ABSA or Transformers libraries
from transformers import AutoModel
import spacy
from transformers import pipeline
# Load SpaCy for Aspect/Opinion Extraction (Step 1 & 3)
nlp = spacy.load(“en_core_web_sm”)
#Step 2
# Load a pre-trained BERT pipeline for Sentiment 
# Load a model specifically fine-tuned for ABSA or product reviews
# device=0 means the first GPU, device=-1 means CPU
import torch
# This checks if a GPU is available and set the device accordingly
device = torch.device(“cuda” if torch.cuda.is_available() else “cpu”)
print(f”Using device: {device}”)
d = 0 if torch.cuda.is_available() else -1
sentiment_analyzer = pipeline(
    “sentiment-analysis”, 
    model=”LiYuan/amazon-review-sentiment-analysis”,
    device=d
)
#sentiment_analyzer = pipeline(“sentiment-analysis”, model=”LiYuan/amazon-review-sentiment-analysis”)
def run_absa_pipeline(text):
    doc = nlp(text)
    triplets = []
    # STEP 1:     
    # Aspect Extraction (Finding Nouns) ---
    # We look for nouns as potential aspects
    aspects = [token for token in doc if token.pos_ in [“NOUN”, “PROPN”]]
    for aspect in aspects:
        # STEP 3 (Part A): 
       # Finding Opinion Terms ---
        # We look for adjectives (opinions) connected to the aspect in the grammar tree
        opinions = [child.text for child in aspect.children if child.pos_ == “ADJ”]
        if not opinions:
            		continue # Skip if no descriptive word is found
        for opinion in opinions:
                  # --- STEP 2: Sentiment Classification ---
           	# We construct an “Auxiliary Sentence” for BERT: [Aspect] is [Opinion]
            	# This helps BERT focus its context.
            	aux_sentence = f”{aspect.text} is {opinion}”
            	result = sentiment_analyzer(aux_sentence)[0]
            	sentiment = result[‘label’]
            	# --- STEP 3 (Part B): Final Triplet Extraction ---
            	triplets.append({
                	“aspect”: aspect.text,
                	“opinion”: opinion,
                	“sentiment”: sentiment
            	})
    return triplets
# Test the pipeline
review = “I bought a spectacular camera but it has a terrible battery.”
results = run_absa_pipeline(review)
print(f”Review: {review}\n”)
print(f”{‘Aspect’:<15} | {‘Opinion’:<15} | {‘Sentiment’}”)
print(“-” * 45)
for t in results:
    print(f”{t[‘aspect’]:<15} | {t[‘opinion’]:<15} | {t[‘sentiment’]}”)

The output is:

Using device: cuda
Device set to use cuda:0
Review: I bought a spectacular camera but it has a terrible battery.
Aspect | Opinion | Sentiment
----------------------------------------------------
camera | spectacular | 5 stars
battery | terrible | 1 star
Note: This ABSA model is review text-dependent; make a simple sentence to have prompt sentiment analysis.

Limitations

Although BERT has revolutionised NLP and is widely used in modern ABSA, it isn’t a faultless model.

Size limitation: Standard BERT cannot process sequences longer than 512 tokens; it simply truncates anything beyond this limit.

Memory limitation: As BERT uses quadratic self-attention, for every doubling of the length of the input the computational cost increases fourfold.

Limitation of statistical vs logical pattern matching: BERT is a statistical pattern matcher, and it can misinterpret negation or sarcasm if the training data is not diverse enough. For example, a BERT model cannot interpret ‘The screen is anything but small’.

Computational cost: A fine-tuned BERT system usually needs a GPU (like an NVIDIA). Training on a standard laptop CPU is slow.

A pre-training model: As BERT is a pre-trained masked language model (guessing hidden words), ABSA often faces challenges in its classification tasks (since sequential classification is used in ABSA).

Domain incompatibility: The standard BERT models are generally trained on Wikipedia and books; that’s why it often faces challenges for texts with slang, emojis or technical jargon.

Sentiment analysis using the BERT mechanism is a simple and elegant approach. It offers an easy way to understand the contextual meaning of a sentence rather than understanding the words in isolation or from left-to-right. While BERT has enhanced NLP and is the engine behind modern ABSA, it has several imitations also. As BERT provides a statistical framework for NLP, it is necessary to be concerned about the construction of the sentence as well as the logic of the constructions.

Previous articleOpen Source AI Tools Like OpenClaw Expand Access And Cyber Risks
The author is a member of IEEE, IET, with more than 20 years of experience in open source versions of UNIX operating systems and Sun Solaris. He is presently working on data analysis and machine learning using a neural network and different statistical tools. He has also jointly authored a textbook called ‘MATLAB for Engineering and Science’. He can be reached at dipankarray@ieee.org.

LEAVE A REPLY

Please enter your comment!
Please enter your name here