
Partager:
Solomon Soh is a Alteryx and Alibaba Cloud Certified practitioner who focus on developing AI solutions for ad-tech, fintech, and operational business problems.
Analyse de sentiments pour l'expérience client avec Python et Streamlit
Temps de lecture : 14 minutes
Commencez à tirer parti de l'API de messagerie de Vonage pour améliorer le service à la clientèle, par exemple en recueillant les commentaires des plateformes de médias sociaux telles que Facebook.
L'analyse des sentiments permet de tirer des enseignements des commentaires des clients en utilisant des techniques de traitement du langage naturel pour déterminer si les données sont positives, négatives ou neutres. Les entreprises s'appuient sur l'analyse des sentiments pour surveiller l'opinion sur les produits et les marques et pour comprendre les besoins des clients.
Ce tutoriel couvre les points suivants :
Initialiser l'API Sandbox de Messages sur Vonage
Recueillir des données auprès des clients par l'intermédiaire de Facebook
Créez un robot pour traiter les commentaires des clients sur Facebook :
Stocker ces données dans une base de données ou un fichier texte
Renvoyer des réponses pertinentes au client
Créer un tableau de bord à travers Streamlit pour comprendre les sentiments des clients en temps réel.
Mesurer les sentiments des clients à l'aide d'une échelle positive, négative ou neutre
Analyser les points sensibles des clients grâce à la visualisation
Conditions préalables
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
Créer un robot Facebook
L'API Messages Sandbox permet aux entreprises d'envoyer et de recevoir des messages par le biais de divers canaux sociaux, tels que WhatsApp, Facebook et Viber. Il permet également aux entreprises d'envoyer des SMS et des MMS par l'intermédiaire de cette API. Pour envoyer des messages par l'intermédiaire de l'un des canaux sociaux externes, vous aurez besoin d'un compte professionnel auprès de chaque fournisseur et de le connecter à votre compte API de Vonage.
Pour ce tutoriel, nous utiliserons Facebook, assurez-vous donc d'avoir un compte Facebook prêt à être testé.
Pour commencer à créer notre application, dans le répertoire de votre projet exécutez la commande suivante pour initialiser le projet node, puis installez les bibliothèques tierces nécessaires :
Les commandes ci-dessus créeront package.json, package.lock ainsi qu'un répertoire node_modules répertoire. Dans le fichier package.json vous verrez les bibliothèques que nous venons d'installer, telles que express et vonage/server-sdk. Un exemple de ce que vous verrez est illustré ci-dessous :
{
"name": "facebook-bot",
"version": "1.0.0",
"description": "Sign up for a Vonage API account at ${CUSTOMER_DASHBOARD_URL}.",
"main": "index.js",
"scripts": {
"serve": "node index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@vonage/server-sdk": "^2.10.7-beta",
"body-parser": "^1.19.0",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"nedb": "^1.8.0"
},
"devDependencies": {}
}Lorsqu'un message arrive de Facebook, Vonage envoie une requête HTTP à une URL webhook préconfigurée. Votre application Node doit être accessible à l'internet pour la recevoir, c'est pourquoi nous vous recommandons d'utiliser Ngrok.
Dans votre Terminal, exécutez la commande suivante pour lancer Ngrok sur le port 3000 (Veuillez noter que l'URL de redirection change à chaque fois que ngrok est redémarré, alors gardez cela à l'esprit si vous deviez redémarrer ngrok) :
Nous devons maintenant créer une application dans le fichier tableau de bord. Veillez à ajouter un nom correspondant à l'objectif de l'application, puis activez la case à cocher Messages car cette application devra utiliser l'API Messages. Cliquez ensuite sur le bouton "Generate public and private key". Cela obligera votre navigateur à télécharger un fichier private.key fichier. Placez ce fichier dans le répertoire racine de votre projet. Enfin, cliquez sur le bouton Generate new application ce qui vous redirigera vers la page de présentation de l'application. Faites une copie du fichier Application ID affiché sur la page, car il sera également nécessaire dans le code ci-dessous.
Pendant que vous êtes sur cette page, nous devons définir les URL des webhooks. Un webhook est une extension d'une API, mais au lieu que votre code demande des données à la plateforme API, Vonage vous envoie les données. Les données arrivent dans une requête Web à votre application, qui peut être le résultat d'un appel API antérieur (ce type de webhook est également appelé " callback "), comme une requête asynchrone à l'API Messaging. Les webhooks sont également utilisés pour notifier à votre application des événements tels qu'un message entrant à stocker dans un fichier ou l'envoi d'un message sortant à l'application.
Les URL doivent être mises à jour dans le tableau de bord comme indiqué ci-dessous (Veillez à remplacer <ngrok URL> par l'url de votre ngrok) :
Webhooks entrants :
http://<ngrok URL>/webhooks/inboundWebhooks sur l'état de la situation :
http://<ngrok URL>/webhooks/status
Retournez dans l Environnement de test des messages pour inscrire votre Account Facebook sur la liste blanche de l'Environnement de test de Facebook Messenger. Cliquez sur Add to sandbox et suivez les instructions fournies sur la page.
Stockez vos informations d'identification dans un fichier .env auquel on peut accéder par l'intermédiaire de index.js.
Ensuite, dans le fichier index.js inclure les modules qui ont été installés précédemment tels que express, Vonage server-sdk comme indiqué dans l'exemple ci-dessous :
const app = require('express')()
const bodyParser = require('body-parser')
const nedb = require('nedb')
const Vonage = require('@vonage/server-sdk')Ensuite, nous devons créer une base de données avec le nom de fichier messages.dbPour ce faire, ajoutez la ligne suivante dans votre index.js la ligne suivante :
const messages = new nedb({ filename: 'messages.db', autoload: true })Nous devons maintenant initialiser un nouvel objet Vonage avec nos informations d'identification, à savoir la clé de l'API, le secret de l'API, l'ID de l'application, ainsi que le chemin d'accès et le nom de fichier de la clé privée. Nous devons également définir l'URL hôte de l'API pour qu'elle pointe vers l'URL du bac à sable. Dans votre fichier index.js ajoutez le code suivant :
const vonage = new Vonage({
apiKey: process.env.VONAGE_API_KEY,
apiSecret: process.env.VONAGE_API_SECRET,
applicationId: process.env.VONAGE_APPLICATION_ID,
privateKey: './private.key'
}, {
apiHost: 'https://messages-sandbox.nexmo.com'
})Nous allons créer une fonction appelée sendMessagequi enverra des messages à Facebook en réponse aux questions, aux commentaires ou aux avis des clients. Dans la fonction, qui est présentée dans l'exemple ci-dessous, il y a un to et une fromqui seront des instructions pour l'API. Le to (ou destinataire) doit être le compte Facebook inscrit sur la liste blanche. Ajoutez la fonction ci-dessous dans votre fichier index.js fichier :
function sendMessage(sender, recipient, text) {
const to = { type: 'messenger', id: recipient }
const from = { type: 'messenger', id: sender }
const message = { content: { type: 'text', text: text } }
vonage.channel.send(to, from, message, function(error, result) {
if(error) { return console.error(error) }
console.log(result)
})
}Dans l'exemple ci-dessus, vous verrez vonage.channel.sendqui envoie un message avec les paramètres to, from et le message et, en cas d'erreur, renvoie cette erreur et enregistre le message d'erreur.
Ensuite, nous devrons ajouter le webhook dans notre application pour écouter le chemin d'accès /webhooks/inbound dans l'URL, qui recevra des messages de l'API Messages chaque fois qu'un message Facebook est reçu. Il analyse et obtient l'identifiant de l'expéditeur dans le corps du message ainsi que le texte envoyé, avec l'horodatage et l'insertion dans les messages de réponse d'une condition d'erreur if-else, ce qui permettra de comprendre les réactions des utilisateurs.
En cas d'erreur, le message renvoyé à l'expéditeur sera "Désolé ! Pouvez-vous répéter ?". En revanche, si le messager récupère et envoie le message des clients à l'appli, celui-ci sera stocké dans le dossier messages.db tandis qu'une réponse du type "Merci pour vos commentaires et votre évaluation !" sera renvoyée aux utilisateurs. Ajoutez donc ce qui suit à votre fichier index.js fichier :
app.post('/inbound', function(request, response) {
if (request.body.message.content.text.toLowerCase().trim() === 'recap') {
messages.find({'from.id': request.body.from.id }, function (error, records) {
if (error) { return console.error(error) }
const message = records.map(function(record) {
return record.message.content.text + ' (sent at ' + record.timestamp + ')'
}).join('\n\n')
sendMessage(request.body.to.id, request.body.from.id, message)
})
} else {
messages.insert(request.body, function (error, record) {
if (error) {
sendMessage(request.body.to.id, request.body.from.id, 'Sorry! Could you repeat?')
return console.error(error)
}
sendMessage(request.body.to.id, request.body.from.id, 'Thanks for your feedback and review!')
})
}
response.send('ok')
})Enfin, nous devons ajouter un autre écouteur pour le point de terminaison /webhooks/status qui renverra le message "ok". Nous devons également ajouter la fonctionnalité d'écoute, qui maintient l'application en cours d'exécution et l'écoute en tant que serveur web sur le port 3000. Ainsi, au bas de votre fichier index.js ajoutez ce qui suit :
app.post('/status', function(request, response) {
console.log(request.body)
response.send('ok')
})
app.listen(3000)Il est maintenant temps de tester votre application ! Tout d'abord, vous devez lancer votre application web, dans votre Terminal, exécutez la commande suivante :
Maintenant, si vous allez sur Facebook Messengertrouvez l'utilisateur de Vonage Sandbox et envoyez-lui un message. Vous recevrez une réponse dans Messenger.
Analyser les réactions des utilisateurs
Les données de Facebook des clients via le bac à sable de Vonage sont stockées dans le fichier messages.db fichier. Lors d'une démonstration simulée, un utilisateur a critiqué les produits et services d'une entreprise sur mesure et un échantillon des données est enregistré dans l'exemple de script ci-dessous.
{"message_uuid":"e6e659be-3cdb-464f-96ef-8597cb307586","from":{"type":"messenger","id":"3819505444810553"},"to":{"type":"messenger","id":"107083064136738"},"message":{"content":{"type":"text","text":"how terrible can this product be, does not solve my pain point"}},"timestamp":"2021-03-15T08:43:30.993Z","_id":"6TdDhlo8CVxEr7tq"}
{"message_uuid":"7775fa83-f073-481c-8866-c60bca28ec97","from":{"type":"messenger","id":"3819505444810553"},"to":{"type":"messenger","id":"107083064136738"},"message":{"content":{"type":"text","text":"how can there be no response for so long on such bad service"}},"timestamp":"2021-03-15T08:44:37.924Z","_id":"GSVzREWsYllKHOlJ"}Nous pouvons voir que chaque message_uuid est unique pour chaque message envoyé au robot Facebook. Les from et to indiquent respectivement l'identité du client et celle du robot. Le message contient le contenu qui est de type texte et qui est simplement le feedback fourni par le client. Pour analyser ces commentaires, ils seront visualisés à l'aide du cadre python Streamlit et de bibliothèques telles que TextBlob, WordCloud, Matplotlib et Pandas. Créez un nouveau fichier appelé dashboard.py et ajoutez le code suivant dans ce nouveau fichier :
import streamlit as st
from textblob import TextBlob
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import matplotlib.pyplot as plt
import pandas as pd
st.set_option('deprecation.showPyplotGlobalUse', False)Streamlit est une application open-source pour les équipes de Machine Learning et de Data Science. TextBlob est une bibliothèque Python pour le traitement des données textuelles. Elle fournit une API simple permettant de se plonger dans des tâches courantes de traitement du langage naturel (NLP). WordCloud est une technique permettant de montrer quels sont les mots les plus fréquents dans un texte donné. Matplotlib est une bibliothèque complète permettant de créer des visualisations statiques, animées et interactives en Python. Pandas est un outil d'analyse et de manipulation de données rapide, puissant, flexible et facile à utiliser, construit à partir du langage de programmation Python.
Avec tous ces outils, nous commençons par ouvrir les données stockées dans messages.db, puis nous lisons et traitons chaque enregistrement de retour d'information collecté auprès de tous les utilisateurs. Nous recherchons les messages/contenus et supprimons l'horodatage car il n'est pas nécessaire pour l'analyse du sentiment dans le retour d'information. Les commentaires traités seront stockés dans une liste.
L'exemple ci-dessous met en œuvre les instructions énumérées ci-dessus. Ajoutez ceci au bas de votre fichier dashboard.py de votre fichier :
file1 = open('messages.db', 'r')
Lines = file1.readlines()
feedback_list = list()
for line in Lines:
feedback = line.split(":")[11]
feedback = feedback.replace('}},"timestamp"',"")
feedback_list.append(feedback)Ensuite, nous générons un nuage de mots pour visualiser la fréquence des mots fournis par les utilisateurs dans leurs commentaires. Nous pouvons constater que certains mots-clés sont beaucoup plus fréquents, comme "terrible", "long", "mauvais", etc. Wordcloud compte simplement le nombre de fois où chaque mot est apparu dans toutes les phrases des commentaires fournis par les clients. Il serait plus judicieux d'analyser le sentiment général du client.
Nous pouvons utiliser l'analyse de polarité des sentiments de TextBlob sur la phrase qui donne une estimation relativement fiable des expériences émotionnelles du client à partir de ses commentaires textuels et la stocker dans une nouvelle liste de valeurs de sentiment. Maintenant, dans votre dashboard.py ajoutez le code suivant :
sentiment_values = list()
for feedback in feedback_list:
sentiment_feedback = TextBlob(feedback).sentiment.polarity
sentiment_values.append(sentiment_feedback)Ensuite, nous afficherons le sentiment général dans une fourchette de -1 à 1. Pour les polarités de sentiment supérieures à 0, la sortie sera verte, tandis que pour les valeurs négatives qui signifient le malheur, le sentiment sera affiché en rouge sur la page web. Copiez ce qui suit dans votre fichier dashboard.py dans votre fichier :
st.title("Overall Sentiment")
if average_sentiment > 0:
colors = 'green'
else:
colors = 'red'
Actuellement, le sentiment global est de -0,417, ce qui suggère qu'un grand nombre de commentaires ne soutiennent pas les produits et services de l'entreprise. Nous pouvons voir les commentaires dans un tableau où chaque sentiment est indiqué. Il y a peu de sentiments de valeur 0. Cela signifie que l'analyse a trouvé ce retour d'information neutre et qu'elle ne peut pas comprendre les connotations négatives du message. Nous pouvons voir que "Ce produit ne correspond pas..." et "Je n'utiliserai ce produit que s'il m'est offert gratuitement" suggèrent des sentiments négatifs, mais le résultat est neutre ou positif. Par conséquent, un modèle plus complexe à apprendre et à former peut être développé pour l'analyse des sentiments dans ce cas d'utilisation. En outre, l'analyse globale des sentiments peut ne pas se limiter à une simple moyenne, mais plutôt à des calculs potentiels plus complexes ou à une moyenne pondérée.
Le tableau de bord web de Streamlit peut être démarré en initialisant la commande suivante. Streamli doit être installé pour que le tableau de bord web soit mis en place. D'autres méthodes de déploiement en flask ou Django fonctionnent tout aussi bien et peuvent être explorées.
En conclusion, ce tutoriel a montré comment configurer et connecter une API Messages Vonage à Facebook et collecter les commentaires des clients qui sont ensuite analysés à l'aide de l'analyse des sentiments pour effectuer un suivi en temps réel des sentiments des clients.
