Aspect-Based Sentiment Analysis with PyABSA & Hugging Face

Aspect-Based Sentiment Analysis with PyABSA & Hugging Face

·

7 min read

Aspect-based sentiment analysis is a type of natural language processing technique that involves identifying specific aspects or features of a product or service, and the analysis of the sentiment expressed towards each of these aspects. It provides a more fine-grained sentiment analysis compared to traditional sentiment analysis, which analyzes the overall sentiment of a text without considering specific aspects.

Aspect-based sentiment analysis is becoming increasingly important in the fields of marketing, customer service, and product development. It can be used to gain insights into customer feedback, identify areas for improvement, and monitor brand reputation. For example, a company may use aspect-based sentiment analysis to identify the most commonly discussed aspects of their product and analyze the sentiment expressed towards each aspect. This can help the company to identify areas where their product is performing well, as well as areas that require improvement.

In addition to business applications, aspect-based sentiment analysis can also be used in various research fields such as social sciences, political science, and psychology to analyze opinions and attitudes toward specific topics or issues.

Hugging Face Transformers for Sentiment Analysis

Huggingface Transformers is a popular open-source library for natural language processing (NLP) tasks such as text classification, question-answering, and language translation. It provides access to a large number of pre-trained models that can be fine-tuned for specific tasks, as well as tools for building custom models.

Using Huggingface Transformers for aspect-based sentiment analysis has several advantages. Firstly, the library provides access to a wide range of pre-trained language models that can be fine-tuned for aspect-based sentiment analysis tasks. These models have been trained on large amounts of text data, and can therefore perform well in a variety of different domains and languages.

Secondly, Huggingface Transformers provides a simple and flexible API for loading and using pre-trained models. This allows users to quickly and easily perform aspect-based sentiment analysis without needing to write complex code or train their models from scratch.

Finally, Huggingface Transformers provides a range of tools for analyzing and visualizing the results of aspect-based sentiment analysis. This includes tools for generating confusion matrices, calculating performance metrics such as accuracy and F1-score, and visualizing the results of sentiment analysis on specific aspects of a text.

Overall, Huggingface Transformers provides a powerful and flexible framework for aspect-based sentiment analysis and is widely used in both academic and industry settings.

Difference between Traditional and Aspect-based Sentiment Analysis

Traditional sentiment analysis involves analyzing the overall sentiment of a text without considering specific aspects. For example, if we were to analyze the following sentence using traditional sentiment analysis:

"I loved the movie, the acting was great and the plot was engaging."

The overall sentiment of this sentence would be positive, as it contains the word "loved" which indicates a positive sentiment. However, traditional sentiment analysis would not be able to tell us which specific aspects of the movie contributed to the positive sentiment.

Aspect-based sentiment analysis, on the other hand, involves analyzing the sentiment toward specific aspects or features of a text. For example, if we were to perform aspect-based sentiment analysis on the same sentence as above, we would identify the two aspects "acting" and "plot", and analyze the sentiment expressed towards each of these aspects.

Let's say we have the following product review:

"I bought a new smartphone and it's amazing. The camera quality is great, the battery life is good, and the screen resolution is impressive."

Using traditional sentiment analysis, we would classify this review as positive because it contains positive adjectives such as "amazing", "great", and "impressive". However, we wouldn't be able to tell which specific aspects of the smartphone contributed to the positive sentiment.

Using aspect-based sentiment analysis, we can analyze the sentiment expressed towards each specific aspect of the smartphone. For example:

  • Aspect: Camera Quality

    • Sentiment: Positive
  • Aspect: Battery Life

    • Sentiment: Neutral
  • Aspect: Screen Resolution

    • Sentiment: Positive

This approach allows us to gain more fine-grained insights into the sentiment towards specific aspects of the product and can help businesses identify areas for improvement or highlight features that are performing well.

Aspect-Based Sentiment Analysis using PyABSA

PyABSA is a Python library that provides functionality for aspect-based sentiment analysis. It allows users to extract aspect terms from text, and analyze the sentiment expressed towards each aspect term. In this example, we will demonstrate how to use PyABSA to perform aspect-based sentiment analysis on a sample text.

Installation

First, we need to install PyABSA using pip:

!pip install pyabsa

Example Text

Let's use the following text as an example:

"Staff was very rude but food was delicious."

Initializing Aspect Extractor

We can initialize an aspect extractor using the ATEPCCheckpointManager class from PyABSA:

from pyabsa import ATEPCCheckpointManager

aspect_extractor = ATEPCCheckpointManager.get_aspect_extractor(checkpoint='english',
                                   auto_device=True  # False means load model on CPU
)

This code initializes an aspect extractor using a pre-trained checkpoint for the English language. The auto_device parameter specifies whether to automatically use GPU if available or not.

Performing Aspect-Based Sentiment Analysis

We can now use the initialized aspect extractor to perform aspect-based sentiment analysis on our example text:

example_text = "Staff was very rude but food was delicious."
inference_source = [example_text]
atepc_result = aspect_extractor.extract_aspect(inference_source=inference_source, pred_sentiment=True)

print(atepc_result)

This code performs aspect term extraction and sentiment inference on the specified example text. The extract_aspect method of the aspect_extractor object is used to perform aspect extraction and sentiment inference. The inference_source parameter specifies the input text to be analyzed. The pred_sentiment the parameter specifies whether to predict the sentiment of the extracted aspect terms or not. The result of the aspect term extraction and sentiment inference is stored in the atepc_result variable, which is then printed to the console.

Output

The output of the above code should be something like this:

[{'IOB': ['B-ASP', 'O', 'O', 'O', 'O', 'B-ASP', 'O', 'O'],
  'aspect': ['Staff', 'food'],
  'position': [[1], [6]],
  'sentence': '\x1b[31m<Staff:Negative>\x1b[0m was very rude but \x1b[32m<food:Positive>\x1b[0m was delicious',
  'sentiment': ['Negative', 'Positive'],
  'tokens': ['Staff',
   'was',
   'very',
   'rude',
   'but',
   'food',
   'was',
   'delicious']}]

Here's a breakdown of what each part of the output means:

  • IOB: This is the IOB (Inside-Outside-Beginning) tagging for each token in the input text. IOB tagging is used to identify the position of aspect terms within a sentence. B-ASP indicates the beginning of an aspect term, while I-ASP indicates an intermediate token of an aspect term, and O indicates a token that is not part of an aspect term.

  • aspect: This is a list of aspect terms extracted from the input text. In this case, the aspect terms are "Staff" and "food".

  • position: This is a list of lists that specify the position of each aspect term within the input text. Each sublist contains the start and end index of the aspect term in the input text.

  • sentence: This is the input text with the aspect terms highlighted in color. Aspect terms with a positive sentiment are highlighted in green, while those with a negative sentiment are highlighted in red.

  • sentiment: This is a list of sentiment labels for each aspect term. In this case, the sentiment for "Staff" is negative, while the sentiment for "food" is positive.

  • tokens: This is a list of tokens (words) in the input text.

Overall, this output provides a detailed analysis of the sentiment expressed towards each aspect term in the input text.

In conclusion, aspect-based sentiment analysis is a powerful technique that allows us to gain more fine-grained insights into the sentiment expressed towards specific aspects of a product, service, or experience. By analyzing the sentiment towards each specific aspect, we can identify areas of improvement and prioritize our efforts to improve customer satisfaction.

In this blog post, we provided an introduction to aspect-based sentiment analysis, explained the differences between traditional sentiment analysis and aspect-based sentiment analysis, and demonstrated how to perform aspect-based sentiment analysis using Hugging Face Transformers and PyABSA.

Finally, we encourage you to check out our video tutorial on aspect-based sentiment analysis, which provides a step-by-step guide on how to perform aspect-based sentiment analysis using Hugging Face Transformers in Python.

Thank you for reading, and we hope you found this blog post helpful!

Follow FutureSmart AI to stay up-to-date with the latest and most fascinating AI-related blogs - FutureSmart AI

Looking to catch up on the latest AI tools and applications? Look no further than AI Demos This directory features a wide range of video demonstrations showcasing the latest and most innovative AI technologies. Whether you're an AI enthusiast, researcher, or simply curious about the possibilities of this exciting field, AI Demos is your go-to resource for education and inspiration. Explore the future of AI today with AI Demos