Sentiment Evaluation of Buyer Care Audio: Complete Information


In at present’s enterprise world, buyer care service performs an essential function in guaranteeing loyalty and buyer satisfaction. Understanding and analyzing the feelings expressed throughout interactions can assist improve the standard of buyer care. Sentiment evaluation on buyer care audio knowledge acts as a robust software for reaching this aim. On this complete information, we’ll discover the complexities of conducting sentiment evaluation on buyer care audio recordings, offering an in depth roadmap for implementation.

Studying Goals

  • Study to construct a Flask net software that makes use of AWS.
  • Study the process of conducting sentiment evaluation.
  • Study the calculations concerned in sentiment evaluation.
  • Perceive the best way to extract the required knowledge and acquire insights from this evaluation.

This text was printed as part of the Data Science Blogathon.

Process of Performing Sentiment Evaluation

Stage 1: Making ready the Information

Understanding the Activity: To carry out sentiment evaluation on the client care audios accessible and supply insights from the outcomes.

Making a Flask Software: Constructing a Flask net software that makes use of Amazon Internet Providers (AWS) comprehend to do evaluation. This software is the inspiration for our undertaking.

Importing Audio Recordings: The decision recording ought to be saved in a database like an AWS S3 bucket to begin the evaluation.

Creating Person Interface: Making a user-friendly interface could be very essential. That is achieved utilizing CSS, HTML, and JavaScript. This interface helps customers to pick out names, dates, and occasions.

Getting the Inputs: Person inputs like Names, Starting Date and Time, and Finish Date and Time are captured to customise the evaluation course of.

Fetching Recordings: Steerage to fetch recordings from the S3 bucket throughout the chosen time interval is given.

Audio Transcription: The guts of sentiment evaluation lies within the transcribed textual content. This part explores how AWS Transcribe converts spoken phrases from the accessible recordings into textual content for

Stage 2: Analyzing the Information

Performing Sentiment Evaluation: Analyzing the transcribed textual content is essential for this information. Step one of this part is to divide giant volumes of textual content into manageable chunks. The subsequent step is to carry out sentiment evaluation on every chunk.

Calculating Sentiment Metrics: The subsequent is to derive significant insights. We’ll calculate the typical of all sentiment scores and calculate the Internet Promoter Rating (NPS). NPS is a important metric that quantifies buyer or worker loyalty. The method for NPS is as follows:

NPS = ((Complete Positives / Complete
Information) – (Complete Negatives / Complete Information)) * 100

Creating Pattern Charts: This helps to Perceive tendencies over time. We’ll information you to create visible pattern charts that illustrate the progress of sentiment scores. These charts will cowl optimistic, damaging,
blended, and impartial values and NPS.

End result Web page: On the ultimate step of our evaluation, we’ll create a outcome web page that showcases the results of our evaluation. This web page will current a report on sentiment metrics, pattern charts, and actionable insights
drawn from buyer care interactions.

Now let’s start our sentiment evaluation, following the above process.

Importing Mandatory Libraries

On this part, we import important Python libraries which are basic to constructing our Flask software, interacting with AWS providers, and performing varied different duties.

from flask import Flask, render_template, request
import boto3
import json
import time
import urllib.request
import requests
import os
import pymysql
import re
import sys
import uuid
from datetime import datetime
import json
import csv
from io import StringIO
import urllib

Importing Audio Recordings

Earlier than beginning our name recording evaluation, the recordings should be simply accessible. Storing the recordings in areas comparable to an AWS S3 bucket helps in straightforward retrieval. On this examine, now we have uploaded the
worker and buyer recordings as separate recordings in a single folder.

Creating Person Interface

Utilizing CSS, HTML, and JavaScript, a visually interesting consumer interface is created for this software. This helps the consumer to pick out inputs comparable to Names and dates from the supplied widgets.

Audio sentiment analysis

Getting the Inputs

We use our Flask software to get data from the consumer. To do that, we use the POST methodology to collect particulars like worker names and date ranges. We will then analyze the feelings of each the worker and the client. In our demonstration, we’re utilizing the worker’s name recordings for evaluation. We will additionally use the decision recordings of the purchasers who work together with the worker as an alternative of the worker’s calls.

We will use the next code for this.

@app.route('/fetch_data', strategies=['POST'])
def fetch_data():
    title = request.type.get('title')   
    begin_date = request.type.get('begin_date')
    begin_time = request.type.get('begin_time')
    begin_datetime_str = f"{begin_date}T{begin_time}.000Z"
    print('Start time:',begin_datetime_str)
    end_date = request.type.get('end_date')
    end_time = request.type.get('end_time')
    end_datetime_str = f"{end_date}T{end_time}.000Z"

Fetching Recordings

To start our evaluation, we have to get the audio recordings from their saved location. Whether or not they’re in an AWS S3 bucket or another database, now we have to comply with sure steps to get these recordings, particularly for a selected time interval. We must always make certain we offer the precise folders containing the recordings of staff or prospects.

This instance reveals the best way to get recordings from an S3 bucket.

# Initialize the S3 consumer
s3 = boto3.consumer('s3')

# Specify the S3 bucket title and the prefix (listing) the place your recordings are saved
prefix = 'recordings/'

    response = s3.list_objects_v2(Bucket=bucket_name, Prefix=prefix)

    # Iterate via the objects and fetch them
    for obj in response.get('Contents', []):
        # Get the important thing (object path)
        key = obj['Key']

        # Obtain the article to a neighborhood file
        local_filename = key.cut up('/')[-1]  
        s3.download_file(bucket_name, key, local_filename)

        print(f"Downloaded {key} to {local_filename}")
besides Exception as e:
    print(f"An error occurred: {e}")

Audio Transcription

Turning spoken phrases from audio into textual content is difficult. We use a useful software known as Amazon Internet Providers (AWS) Transcribe to do that job robotically. However earlier than that, we clear the audio knowledge by eradicating elements the place nobody is speaking and altering conversations in different languages to English. Additionally, if there are a number of folks speaking in a recording, we have to separate their voices and solely deal with the one we wish to analyze.

Nonetheless, for the interpretation half to work, we want our audio recordings in a format that may be accessed via an internet hyperlink. The code and rationalization under will present
you ways this all works.

Implementation Code:

transcribe = boto3.consumer('transcribe', region_name=AWS_REGION_NAME)
def transcribe_audio(audio_uri):
    job_name_suffix = str(uuid.uuid4())
    # Generate a novel job title utilizing timestamp
    timestamp = str(int(time.time()))
    transcription_job_name = f'Transcription_{timestamp}_{job_name_suffix}'

    settings = {
        'ShowSpeakerLabels': True,
        'MaxSpeakerLabels': 2

    response = transcribe.start_transcription_job(
        Media={'MediaFileUri': audio_uri},

    transcription_job_name = response['TranscriptionJob']['TranscriptionJobName']

    # Await the transcription job to finish
    whereas True:
        response = transcribe.get_transcription_job(
        standing = response['TranscriptionJob']['TranscriptionJobStatus']
        if standing in ['COMPLETED', 'FAILED']:
        print("Transcription in progress...")

    transcript_text = None

    if standing == 'COMPLETED':
        transcript_uri = response['TranscriptionJob']['Transcript']['TranscriptFileUri']
        with urllib.request.urlopen(transcript_uri) as url:
            transcript_json = json.masses(url.learn().decode())
            transcript_text = transcript_json['results']['transcripts'][0]['transcript']
        print("Transcription accomplished efficiently!")
        print('Transribed Textual content is:', transcript_text)
        print("Transcription job failed.")
    # Verify if there are any transcripts (if empty, skip sentiment evaluation)
    if not transcript_text:
        print("Transcript is empty. Skipping sentiment evaluation.")
        return None

    return transcript_text


Job Initialization: Specify a novel title and language code (on this case, ‘en-US’ for English) to provoke an AWS Transcribe job.

Transcription Settings: We outline settings for the transcription job, together with choices to point out speaker labels and specify the utmost variety of speaker labels (helpful for multi-speaker audio).

Begin Transcription: The job will get began utilizing the start_transcription_job methodology. It asynchronously transcribes the supplied audio.

Monitor Job Progress: We periodically test the standing of the transcription job. It may very well be in progress, accomplished, or failed. We pause and look ahead to completion earlier than continuing.

Entry Transcription Textual content: As soon as the job is accomplished efficiently, we entry the transcribed textual content from the supplied transcript URI. This textual content is then accessible for sentiment evaluation.

Performing Sentiment Evaluation

Sentiment evaluation is a giant deal in our evaluation work. It’s all about understanding the sentiments and context within the written textual content that comes from turning audio into phrases. To deal with numerous textual content, we break it into smaller elements. Then, we use a software known as AWS Comprehend, which is nice at determining if the textual content sounds optimistic, damaging, impartial, or if it’s a mixture of these emotions.

Implementation Code:

def split_text(textual content, max_length):
    # Cut up the textual content into chunks of most size
    chunks = []
    begin = 0
    whereas begin < len(textual content):
        finish = begin + max_length
        chunks.append(textual content[start:end])
        begin = finish
    return chunks

def perform_sentiment_analysis(transcript):
    transcript = str(transcript)
    # Outline the utmost size for every chunk
    max_chunk_length = 5000

    # Cut up the lengthy textual content into smaller chunks
    text_chunks = split_text(transcript, max_chunk_length)

    # Carry out sentiment evaluation utilizing AWS Comprehend
    comprehend = boto3.consumer('comprehend', region_name=AWS_REGION_NAME)

    sentiment_results = []
    confidence_scores = []
    # Carry out sentiment evaluation on every chunk
    for chunk in text_chunks:
        response = comprehend.detect_sentiment(Textual content=chunk, LanguageCode="en")

    sentiment_counts = {
        'POSITIVE': 0,
        'NEGATIVE': 0,
        'NEUTRAL': 0,
        'MIXED': 0

    # Iterate over sentiment outcomes for every chunk
    for sentiment in sentiment_results:
        sentiment_counts[sentiment] += 1

    # Decide the bulk sentiment
    aws_sentiment = max(sentiment_counts, key=sentiment_counts.get)

    # Calculate common confidence scores
    average_neutral_confidence = spherical(
        sum(rating['Neutral'] for rating in confidence_scores) / len(confidence_scores), 4)
    average_mixed_confidence = spherical(
        sum(rating['Mixed'] for rating in confidence_scores) / len(confidence_scores), 4)
    average_positive_confidence = spherical(
        sum(rating['Positive'] for rating in confidence_scores) / len(confidence_scores), 4)
    average_negative_confidence = spherical(
        sum(rating['Negative'] for rating in confidence_scores) / len(confidence_scores), 4)

    return {
        'aws_sentiment': aws_sentiment,
        'average_positive_confidence': average_positive_confidence,
        'average_negative_confidence': average_negative_confidence,
        'average_neutral_confidence': average_neutral_confidence,
        'average_mixed_confidence': average_mixed_confidence


Breaking Down the Textual content: To deal with plenty of textual content extra simply, we cut up the transcript into smaller elements that we are able to handle higher. We’ll then look into these smaller elements one after the other.

Understanding Feelings: We use AWS Comprehend to determine the feelings (like optimistic, damaging, impartial, blended) in every of those smaller elements. It additionally tells us how positive it’s about these feelings.

Protecting Rely of Feelings: We observe down what number of occasions every emotion comes up in all these smaller elements. This helps us know what most individuals are feeling total.

Discovering Confidence: We calculate a mean rating for the way positive AWS Comprehend is concerning the feelings it finds. This helps us see how assured the system is in its outcomes.

Calculating Sentiment Metrics

After performing sentiment evaluation on particular person chunks of textual content, we proceed to calculate significant sentiment metrics. These metrics present insights into the general sentiment and buyer or worker notion.

Implementation Code:

outcome = perform_sentiment_analysis(transcript)
def sentiment_metrics(outcome):
    #  Initialize variables to retailer cumulative scores
    total_positive_score = 0
    total_negative_score = 0
    total_neutral_score = 0
    total_mixed_score = 0

    # Counters for every sentiment class
    count_positive = 0
    count_negative = 0
    count_neutral = 0
    count_mixed = 0

    # Course of the fetched knowledge and calculate metrics
    for document in outcome:
        sentiment_value = aws_sentiment
        positive_score = average_positive_confidence
        negative_score = average_negative_confidence
        neutral_score = average_neutral_confidence
        mixed_score = average_mixed_confidence

        # Rely occurrences of every sentiment class
        if sentiment_value == 'POSITIVE':
            count_positive += 1
        elif sentiment_value == 'NEGATIVE':
            count_negative += 1
        elif sentiment_value == 'NEUTRAL':
            count_neutral += 1
        elif sentiment_value == 'MIXED':
            count_mixed += 1

        # Calculate cumulative scores
        total_sentiment_value = max(sentiment_value)
        total_positive_score += positive_score
        total_negative_score += negative_score
        total_neutral_score += neutral_score
        total_mixed_score += mixed_score

    # Calculate averages
    total_records = len(outcome)
    overall_sentiment = total_sentiment_value 
    average_positive = total_positive_score / total_records if total_records > 0 else 0
    average_negative = total_negative_score / total_records if total_records > 0 else 0
    average_neutral = total_neutral_score / total_records if total_records > 0 else 0
    average_mixed = total_mixed_score / total_records if total_records > 0 else 0

# Calculate NPS provided that there are information
    if total_records > 0:
        NPS = ((count_positive/total_records) - (count_negative/total_records)) * 100
        NPS_formatted = "{:.2f}%".format(NPS)
        NPS_formatted = "N/A"

    # Create a dictionary to retailer the calculated metrics
    metrics = {
        "total_records": total_records,
        "overall_sentiment": overall_sentiment,
        "average_positive": average_positive,
        "average_negative": average_negative,
        "average_neutral": average_neutral,
        "average_mixed": average_mixed,
        "count_positive": count_positive,
        "count_negative": count_negative,
        "count_neutral": count_neutral,
        "count_mixed": count_mixed,
        "NPS": NPS_formatted

    return metrics


Cumulative Scores: We begin by organising some variables to maintain observe of the entire scores for optimistic, damaging, impartial, and blended emotions. These scores will add up as we undergo all of the analyzed elements.

Counting Sentiments: We preserve counting what number of occasions every sort of emotion reveals up, similar to we did after we had been determining the sentiments earlier.

Discovering Averages: We determine the typical scores for feelings and the general temper based mostly on what most individuals appear to be feeling. We additionally calculate one thing known as the Internet Promoter Rating (NPS) utilizing a particular method we talked about earlier.

Creating Pattern Charts

To see how feelings change over time, we create pattern charts. These are like footage that visually signify whether or not feelings are growing or reducing. They assist firms determine any patterns and use this data to make sensible choices based mostly on knowledge.


Information Aggregation: We calculate the typical sentiment scores and NPS values for every week. These values are saved in dictionary format and might be used to create pattern charts.

Calculating Week Quantity: For every audio recording, we decide the week by which it occurred. That is essential for organizing knowledge into weekly tendencies.

Calculating Averages: We calculate the typical sentiment scores and NPS values for every week. These values might be used to create pattern charts.

Results of the Sentiment Evaluation

After the evaluation, we are able to create the outcome web page, as proven under. This web page provides the general report, like the entire variety of recordings, complete name period, and many others. Additionally, it shows charts representing the typical scores and tendencies. We will additionally seize damaging scores and their particulars individually.

 Audio recording sentiment analysis results
Trend charts of customer sentiments based on sentiment analysis


In at present’s fast-paced enterprise world, understanding what prospects really feel is essential. It’s like having a secret software to make prospects happier. Sentiment evaluation of audio name recordings helps to realize insights into buyer interactions. This text defined the steps of conducting sentiment evaluation, from turning audio into textual content to creating pattern charts.

First, we used instruments like AWS Transcribe to assist us convert spoken phrases from these audio transcriptions into readable textual content. The sentiment evaluation then assessed the feelings and context and categorized them as optimistic, damaging, impartial, or blended sentiments.

The sentiment metrics concerned aggregating scores and calculating the Internet Promoter Rating (NPS), which may then be plotted on charts and graphs to determine points, monitor progress, and enhance loyalty.

Key Takeaways

  • Sentiment evaluation is a robust software for companies to grasp suggestions, make enhancements, and ship buyer experiences.
  • Sentiment adjustments over time might be visualized by pattern charts, serving to organizations make data-driven choices.

Ceaselessly Requested Questions

Q1. What’s sentiment evaluation, and why is it essential for buyer care?

Ans. Sentiment evaluation determines the emotional tone and context of textual content knowledge utilizing the NLP approach. In buyer care, this kind of evaluation helps organizations perceive how prospects really feel about their services or products. It’s essential as a result of it supplies actionable insights into buyer satisfaction and permits companies to enhance their providers based mostly on buyer suggestions. It helps to see how staff are interacting with prospects.

Q2. How does audio transcription work in audio recordings?

Ans. Audio transcription is the method of changing spoken phrases in audio into written textual content. In sentiment evaluation, it’s the very first thing we do. We use instruments like AWS Transcribe to alter what folks say in a name into phrases a pc can perceive. After that, we are able to have a look at the phrases to see how folks really feel.

Q3. What are the important thing sentiment classes usually analyzed?

Ans. Sentiments are normally categorized into 4 important classes: Optimistic, Unfavourable, Impartial, and Blended. “Optimistic” signifies a optimistic sentiment or satisfaction. “Unfavourable” displays dissatisfaction or a damaging sentiment. “Impartial” says lack of optimistic and damaging sentiment, and “Blended” means mixing up optimistic and damaging feelings within the textual content.

This fall. How is the Internet Promoter Rating (NPS) calculated from sentiment scores?

Ans. NPS is a quantity that tells us how a lot folks like an organization or service. We discover it by taking the proportion of people that prefer it (optimistic) and subtracting the proportion of people that don’t prefer it (damaging). The method seems to be like this: NPS = ((Optimistic Folks / Complete Folks) – (Unfavourable Folks / Complete Folks)) * 100. The next NPS means extra pleased prospects.

Q5. What advantages do pattern charts provide in sentiment evaluation on buyer care name recordings?

Ans. Pattern charts are like footage that present how folks’s emotions change over time. They assist firms see if prospects are getting happier or sadder. Corporations can use pattern charts to search out patterns and see whether or not their enhancements work. Pattern charts assist firms make sensible decisions and might test their adjustments to make prospects pleased.

The media proven on this article shouldn’t be owned by Analytics Vidhya and is used on the Writer’s discretion.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button