
Teilen Sie:
Solomon Soh is a Alteryx and Alibaba Cloud Certified practitioner who focus on developing AI solutions for ad-tech, fintech, and operational business problems.
Sentiment-Analyse für das Kundenerlebnis mit Python und Streamlit
Lesedauer: 13 Minuten
Nutzen Sie die Vonage Messaging API, um Ihren Kundenservice zu verbessern, z. B. durch das Sammeln von Bewertungen auf Social Media-Plattformen wie Facebook.
Die Stimmungsanalyse gewinnt Erkenntnisse aus dem Kundenfeedback, indem sie Techniken der natürlichen Sprachverarbeitung einsetzt, um festzustellen, ob die Feedbackdaten positiv, negativ oder neutral sind. Unternehmen nutzen die Stimmungsanalyse, um die Produkt- und Markenstimmung zu überwachen und zu verstehen, was der Kunde braucht.
In diesem Lernprogramm werden die folgenden Punkte behandelt:
Initialisieren der Messages API Sandbox auf Vonage
Sammeln Sie Daten von Kunden über Facebook
Erstellen Sie einen Bot, der das Feedback von Kunden auf Facebook verarbeitet:
Speicherung dieser Daten in einer Datenbank oder Textdatei
Rücksendung relevanter Antworten an den Kunden
Erstellen Sie mit Streamlit ein Dashboard, um die Stimmungen des Kundenfeedbacks in Echtzeit zu verstehen.
Messen Sie die Stimmung der Kunden mit einer Skala von positiv, negativ und neutral
Analysieren Sie die Hauptprobleme der Kunden mit Hilfe von Visualisierungen
Voraussetzungen
Vonage API-Konto
Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.
Erstellen eines Facebook-Bots
Mit der Messages API Sandbox können Unternehmen Nachrichten über verschiedene soziale Kanäle wie WhatsApp, Facebook und Viber senden und empfangen. Außerdem können Unternehmen über diese API SMS und MMS senden. Um Nachrichten über einen der externen sozialen Kanäle senden zu können, benötigen Sie einen Business Account bei dem jeweiligen Anbieter und müssen diesen mit Ihrem Vonage APIs Account verbinden.
Für dieses Tutorial verwenden wir Facebook. Stellen Sie also sicher, dass Sie einen Facebook Account haben, mit dem Sie testen können.
Um mit der Erstellung unserer Anwendung zu beginnen, führen Sie im Verzeichnis Ihres Projekts den folgenden Befehl aus, um das Node-Projekt zu initialisieren, und installieren Sie anschließend die erforderlichen Bibliotheken von Drittanbietern:
Die obigen Befehle erzeugen package.json, package.lock Dateien sowie ein node_modules Verzeichnis. Innerhalb der package.json Datei sehen Sie die Bibliotheken, die wir gerade installiert haben, wie z.B. express und vonage/server-sdk. Nachfolgend sehen Sie ein Beispiel für die Anzeige:
{
"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": {}
}Wenn eine Nachricht von Facebook eingeht, sendet Vonage eine HTTP-Anfrage an eine vorkonfigurierte Webhook-URL. Ihre Node-Anwendung sollte für den Empfang mit dem Internet verbunden sein, daher empfehlen wir die Verwendung von Ngrok.
Führen Sie in Ihrem Terminal den folgenden Befehl aus, um Ngrok auf Port 3000 (Bitte beachten Sie, dass sich die Weiterleitungs-URL bei jedem Neustart von ngrok ändert, wenn Sie ngrok neu starten):
Wir müssen nun eine Anwendung im Dashboard. Fügen Sie einen Namen hinzu, der dem Zweck der Anwendung entspricht, und schalten Sie dann Messages ein, da diese Anwendung die Messages API nutzen muss. Klicken Sie dann auf die Schaltfläche "Öffentlichen und privaten Schlüssel generieren". Dies zwingt Ihren Browser zum Herunterladen einer private.key Datei herunterzuladen. Legen Sie diese Datei in das Stammverzeichnis Ihres Projekts. Klicken Sie schließlich auf die Schaltfläche Generate new application Dies leitet Sie auf die Seite "Anwendung anzeigen" weiter. Machen Sie eine Kopie der Application ID die auf der Seite angezeigt wird, da diese auch für den Code weiter unten benötigt wird.
Während Sie auf dieser Seite sind, müssen wir die Webhook-URLs definieren. Ein Webhook ist eine Erweiterung einer API, aber anstatt dass Ihr Code Daten von der API-Plattform anfordert, sendet Vonage die Daten an Sie. Die Daten treffen in einer Webanforderung an Ihre Anwendung ein, die das Ergebnis eines früheren API-Aufrufs sein kann (diese Art von Webhook wird auch als "Callback" bezeichnet), wie z. B. eine asynchrone Anforderung an die Messaging-API. Webhooks werden auch verwendet, um Ihre Anwendung über Ereignisse zu benachrichtigen, z. B. eine eingehende Nachricht, die in einer Datei gespeichert werden soll, oder eine ausgehende Nachricht an die Anwendung zu senden.
Die URLs müssen in der Dashboard wie unten gezeigt, aktualisiert werden (bitte ersetzen Sie <ngrok URL> durch Ihre ngrok-URL ersetzen):
Eingehende Webhooks:
http://<ngrok URL>/webhooks/inboundStatus Webhooks:
http://<ngrok URL>/webhooks/status
Navigieren Sie zurück zur Nachrichten-Sandbox um Ihr Facebook-Konto in der Facebook Messenger-Sandbox auf die Whitelist zu setzen. Klicken Sie auf Add to sandbox und folgen Sie den Anweisungen auf der Seite.
Speichern Sie Ihre Anmeldedaten in einer .env Datei, auf die Sie über index.js.
Als nächstes müssen Sie in der Datei index.js die zuvor installierten Module ein, z. B. express, Vonage server-sdk, wie im folgenden Beispiel gezeigt:
const app = require('express')()
const bodyParser = require('body-parser')
const nedb = require('nedb')
const Vonage = require('@vonage/server-sdk')Dann müssen wir eine Datenbank mit dem Dateinamen messages.dberstellen, fügen Sie die folgende Zeile in Ihre index.js Datei ein:
const messages = new nedb({ filename: 'messages.db', autoload: true })Wir müssen nun ein neues Vonage-Objekt mit unseren Anmeldeinformationen initialisieren, die aus dem API-Schlüssel, dem API-Geheimnis, der Anwendungs-ID sowie dem Pfad und Dateinamen des private.key bestehen. Außerdem müssen wir die Host-URL der API so einstellen, dass sie auf die Sandbox-URL zeigt. In Ihrer index.js Datei fügen Sie den folgenden Code ein:
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'
})Wir werden eine Funktion namens sendMessageerstellen, die als Antwort auf Kundenanfragen, Feedback oder Bewertungen Nachrichten an Facebook sendet. In der Funktion, die im Beispiel unten gezeigt wird, gibt es eine to und ein from, die Anweisungen an die API sind. Der to (oder Empfänger) muss das Facebook-Konto sein, das auf der Whitelist steht. Fügen Sie die folgende Funktion in Ihre index.js Datei ein:
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)
})
}Im obigen Beispiel sehen Sie vonage.channel.senddie eine Nachricht mit folgenden Parametern sendet to, from und Nachricht sendet und im Falle eines Fehlers diesen Fehler zurückgibt und die Fehlermeldung protokolliert.
Als nächstes müssen wir den Webhook in unserer Anwendung hinzufügen, um auf den Pfad /webhooks/inbound in der URL, der Nachrichten von der Messages API empfängt, sobald eine Facebook-Nachricht eingeht. Es analysiert und erhält die Messenger-ID des Absenders aus dem Textkörper und auch den Text, der gesendet wird, zusammen mit dem Zeitstempel und fügen Sie in der Antwort Nachrichten entweder eine Bedingung des Fehlers, wenn-else wird ein erfolgreiches Verständnis der Nutzer-Feedback sein.
Tritt ein Fehler auf, wird an den Absender die Meldung "Sorry! Könnten Sie das wiederholen?". Wenn der Bote die Nachricht der Kunden abruft und an die App sendet, wird sie in messages.db gespeichert, während die Antwort "Vielen Dank für Ihr Feedback und Ihre Bewertung!" an die Nutzer zurückgesendet wird. Fügen Sie also Folgendes zu Ihrer index.js Datei hinzu:
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')
})Schließlich müssen wir einen weiteren Listener für den /webhooks/status Endpunkt hinzufügen, der die Meldung "ok" zurückgibt. Wir müssen auch die Listen-Funktionalität hinzufügen, die die Anwendung laufen lässt und als Webserver auf Port 3000. Fügen Sie also am Ende Ihrer index.js Datei das Folgende hinzu:
app.post('/status', function(request, response) {
console.log(request.body)
response.send('ok')
})
app.listen(3000)Jetzt ist es an der Zeit, Ihre Anwendung zu testen! Zuerst müssen Sie Ihre Webanwendung starten. Führen Sie in Ihrem Terminal den folgenden Befehl aus:
Wenn Sie jetzt zu Facebook Messengergehen, suchen Sie den Vonage Sandbox-Benutzer und senden Sie ihm eine Nachricht. Sie erhalten dann eine Antwort im Messenger.
Analysieren Sie das Feedback der Benutzer
Die Daten aus der Facebook-Sandbox der Kunden von Vonage werden in der messages.db Datei gespeichert. In einer simulierten Demonstration bewertete ein Nutzer die Produkte und Dienstleistungen eines Maßanfertigungsunternehmens, und ein Beispiel für die Daten ist im folgenden Beispielskript aufgezeichnet.
{"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"}Wir können sehen, dass jede message_uuid für jede Nachricht, die an den Facebook-Bot gesendet wird, einzigartig ist. Die from und to geben die Identität des Kunden bzw. des Bots an. Die Nachricht enthält den Inhalt in Form von Text und ist einfach das Feedback des Kunden. Um dieses Feedback zu analysieren, wird es durch das Python Streamlit Framework mit Bibliotheken wie TextBlob, WordCloud, Matplotlib und Pandas visualisiert. Erstellen Sie eine neue Datei namens dashboard.py und fügen Sie den folgenden Code in diese neue Datei ein:
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 ist ein Open-Source-App-Framework für Machine Learning und Data Science-Teams. TextBlob ist eine Python-Bibliothek für die Verarbeitung von Textdaten. Sie bietet eine einfache API für den Einstieg in gängige Aufgaben der natürlichen Sprachverarbeitung (NLP). WordCloud ist eine Technik, die zeigt, welche Wörter in einem gegebenen Text am häufigsten vorkommen. Matplotlib ist eine umfassende Bibliothek zur Erstellung statischer, animierter und interaktiver Visualisierungen in Python. Pandas ist ein schnelles, leistungsfähiges, flexibles und einfach zu bedienendes Open-Source-Werkzeug zur Datenanalyse und -manipulation, das auf der Programmiersprache Python aufbaut.
Mit all diesen Tools öffnen wir zunächst die in messages.db gespeicherten Daten, lesen und verarbeiten jeden Datensatz des von allen Nutzern gesammelten Feedbacks. Wir suchen nach den Nachrichten/Inhalten und entfernen den Zeitstempel, da dieser für die Analyse der Stimmung im Feedback nicht benötigt wird. Die verarbeiteten Rückmeldungen werden in einer Liste gespeichert.
Das folgende Beispiel führt die oben genannten Anweisungen aus. Fügen Sie dies am Ende Ihrer dashboard.py Datei hinzu:
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)Als Nächstes erstellen wir eine Wortwolke, um die Häufigkeit der Wörter zu visualisieren, die von den Nutzern im Feedback angegeben wurden. Wir können sehen, dass bestimmte Schlüsselwörter wie "schrecklich", "lang", "schlecht" usw. sehr viel häufiger vorkommen. Wordcloud zählt einfach, wie oft jedes Wort in allen Sätzen des Kundenfeedbacks vorkommt. Ein besserer Weg wäre es, die allgemeine Stimmung der Kunden zu analysieren.
Wir können die grundlegende Sentiment-Polaritätsanalyse von TextBlob auf den Satz anwenden, der eine relativ zuverlässige Schätzung der emotionalen Erfahrungen des Kunden aus seinem textuellen Feedback liefert, und in einer neuen Liste von Sentiment-Werten speichern. Fügen Sie nun in Ihrem dashboard.py den folgenden Code ein:
sentiment_values = list()
for feedback in feedback_list:
sentiment_feedback = TextBlob(feedback).sentiment.polarity
sentiment_values.append(sentiment_feedback)Als Nächstes zeigen wir die Gesamtstimmung in einem Bereich von -1 bis 1 an. Bei Stimmungspolaritäten über 0 wird die Ausgabe grün sein, während bei negativen Werten, die Unzufriedenheit bedeuten, die Stimmung auf der Webseite rot dargestellt wird. Kopieren Sie das Folgende in Ihre dashboard.py Datei:
st.title("Overall Sentiment")
if average_sentiment > 0:
colors = 'green'
else:
colors = 'red'
Derzeit liegt die Gesamtstimmung bei -0,417, was darauf hindeutet, dass ein Großteil des Feedbacks die Produkte und Dienstleistungen des Unternehmens nicht unterstützt. Wir können die Rückmeldungen in einer Tabelle sehen, in der jede der Rückmeldungsstimmungen angezeigt wird. Es gibt nur wenige Rückmeldungen mit einem Wert von 0. Das bedeutet, dass die Analyse dieses Feedback als neutral eingestuft hat und die negativen Konnotationen der Nachricht nicht nachvollziehen kann. Wir können sehen, dass "Dieses Produkt kann nicht mithalten..." und "Ich werde dieses Produkt nur benutzen, wenn ich es umsonst bekomme" auf negative Empfindungen hindeuten würden, doch das Ergebnis ist neutral oder positiv. Daher kann für die Stimmungsanalyse in diesem Anwendungsfall ein komplexeres Modell entwickelt werden, das gelernt und trainiert werden muss. Darüber hinaus sollte die allgemeine Stimmungsanalyse nicht nur ein einfacher Durchschnitt sein, sondern möglicherweise auch komplexere Berechnungen oder ein gewichteter Durchschnitt.
Die Streamlit Web Dashboard App kann mit folgendem Befehl gestartet werden. Streamli muss installiert sein, damit das Web-Dashboard eingerichtet werden kann. Andere Bereitstellungsmethoden in Flask oder Django funktionieren genauso gut und können erforscht werden.
Abschließend hat dieses Tutorial gezeigt, wie man eine Vonage Messages API einrichtet und mit Facebook verbindet, um Feedback von Kunden zu sammeln, das dann mit Hilfe der Stimmungsanalyse analysiert wird, um die Stimmungen der Kunden in Echtzeit zu überwachen.
