Künstliche Intelligenz als Service nutzen

Mit Hilfe von NLP Diensten wie der Natural Language API der Google Cloud Platform ist es möglich die Stimmung eines Textes zu analysieren. Google nennt dieses Feature “Sentiment Analysis”. Ganz ohne Machine Learning Kenntnisse lässt sich damit eine Künstliche Intelligenz in die eigene Applikation integrieren. Lasst uns herausfinden wie das genau funktioniert und wie man diese Funktionalität als Service für den eigenen Chatbot oder das eigene CRM nutzen kann.

Bevor wir in die technischen Details einsteigen, schauen wir uns kurz das Demo-Tool an, welches Google bereitstellt um dieses Produkt auszuprobieren. Man kann einfach einen beliebigen Text in das Feld eingeben und dann auf den Button “Analyze” klicken. In meinem Beispiel habe ich die Nachricht “I am so happy that the sun is shining here in Munich and we can swim in the Isar.” eingegeben.

Wie man sehen kann, hat das Tool alle möglichen Dinge in der Nachricht erkannt, z.B. Entitäten wie die Stadt München. Wir interessieren uns aber an dieser Stelle für die Stimmungsanalyse, deshalb wählen wir den Tab „Sentiment“ aus.

google-sentiment-analysis-try-out

Das Resultat der Stimmungsanalyse zeigt einen Score von 0.8 und eine Magnitude von 0.8 für meinen Text. Wie man in dem Farbschema erkennen kann, steht ein Score zwischen 0.25 und 1.0 für eine positive Stimmung, ein Score zwischen –0.25 und 0.25 für eine neutrale Stimmung und ein Score zwischen -0.25 und -1.0 für eine negative Stimmung. Die Magnitude sagt aus, wie stark die erkannte Stimmung, bzw. das erkannte Gefühl ist. Die Werte können von 0.0 bis unendlich reichen.

Das ist schon ziemlich beeindrucken, oder? Wie kann man nun dieses Feature für die eigenen Zwecke nutzen? In meinem Beispiel analysiere ich eingehende Chat Nachrichten von WhatsApp Nutzern. Das kann bspw. nützlich sein, wenn ihr euren Kundenservice über die WhatsApp Business API anbietet und herausfinden möchtet, wie die Stimmung bei euren Kunden so ist. Hier könnt ihr sehen wie wir das bei MessengerPeople machen:

mcp-mood-detection

Wenn du nun angefixt bist, zeige ich dir jetzt gerne, wie man diesen Service implementiert.

Voraussetzungen für die Nutzung der NLP API

Natürlich benötigt man ein Google Cloud Konto um die NLP API nutzen zu können. Wenn du bereits einen GCP Account hast, kannst du direkt zum Schnellstart der Dokumentation springen. Die Grundlagen der Natural Language API werden hier erklärt.

Als Nächstes muss man ein GCP Console-Projekt einrichten und dort die Natural Language API aktivieren. Dann muss man ein Dienstkonto anlegen und einen Schlüssel dafür generieren lassen. Diesen Schlüssel kann man als JSON-Datei herunterladen und auf dem eigenen System (Server) hinterlegen. Im letzten Schritt speichert man den Pfad zu der JSON-Datei als Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS, z.B. so:

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

Nun ist man prinzipiell in der Lage Calls zur NLP API auszuführen. Authentifizierung sowie Autorisierung finden unter Verwendung der Umgebungsvariable und des Schlüssels statt. Du kannst als Erstes die Befehlszeile nutzen um einen einfachen Call auszuprobieren. Ich verwende in meinem Beispiel die PHP Clientbibliothek.

Ein echter Anwendungsfall für die Natural Language API

Ok, jetzt gehts zum Code! Bitte bedenkt, dass ich hier nur ein paar kleine Beispiele gebe. Es handelt sich nicht um Code der direkt so produktiv eingesetzt werden sollte!

Als Erstes installieren wir die PHP Clientbibliothek in unserem PHP-Projekt:

composer require google/cloud

Dann laden wir die Bibliothek:

 use Google\Cloud\Language\LanguageClient;

Nun kann ich die Methoden des Clients in meiner eigenen Funktion nutzen:

public function sendToGoogleCloud($text)
{
    // Your Google Cloud Platform project ID
    $projectId = 'xxxxxxxxx';
    $keyfilepath = "/var/www/xxxxxxxx.json";

    // Instantiates a client
    $language = new LanguageClient([
        'projectId' => $projectId,
        'keyFilePath' => $keyfilepath
    ]);

    // Detects the sentiment of the text
    $annotation = $language->analyzeSentiment($text);
    $sentiment = $annotation->sentiment();
    $language = $annotation->language();

    $returnarray = [];
    array_push($returnarray, $sentiment);
    array_push($returnarray, $language);

    return $returnarray;

} 

In meinen Tests hatte ich Probleme mit der Nutzung der Umgebungsvariable, weshalb ich die alternative Methode genutzt und den Pfad zum Schlüssel als Parameter übergeben habe. Die Response der Stimmungsanalyse sieht folgendermaßen aus:

{
"documentSentiment": {
    "magnitude": 0.8,
    "score": 0.8
  },
  "language": "en",
  "sentences": [
    {
        "sentiment": {
        "magnitude": 0.8,
        "score": 0.8
      },
      "text": {
        "beginOffset": 0,
        "content": "I am so happy that the sun is shining here in Munich and we can swim in the Isar."
      }
    }
  ]
} 

Wie du sehen kannst, gibt mir die NLP API einen Score, eine Magnitude, sowie die erkannte Sprache des Textes zurück. Daher könnte man an dieser Stelle auch die Sprachinformation nutzen.

Sehr schön, aber was können wir nun mit diesen Informationen anfangen? Wie können bspw. je nach erkannter Stimmung Labels in unserem System setzen, die Informationen in Nutzerattribute speichern, oder entsprechend angemessen auf die Nachricht antworten.

if ($sentiment_score > 0.25) {
    $sentiment = 'positive';
    $addlabel = [3345];
    $removelabel = [3344, 3346];
} elseif (($sentiment_score >= -0.25) && ($sentiment_score <= 0.25)) {
    $sentiment = 'neutral';
    $addlabel = [3346];
    $removelabel = [3344, 3345];
} elseif ($sentiment_score < -0.25) {
    $sentiment = 'negative';
    $addlabel = [3344];
    $removelabel = [3345, 3346];
} else {
    $sentiment = 'neutral';
    $addlabel = [3346];
    $removelabel = [3344, 3345];
}


$customfields = [
    'customfields' => [
        'sentiment_score' => $sentiment_score,
        'sentiment_magnitude' => $sentiment_magnitude,
        'sentiment' => $sentiment,
        'language' => $sentiment_language
    ],
    'addlabel' => $addlabel,
    'removelabel' => $removelabel
]; 

Das Resultat kann dann so aussehen:

Ich habe das Label “Gute Stimmung” im Nutzerprofil gesetzt, sowie die Attribute „Sentiment“ mit dem Wert „positiv“ und „Language“ mit dem Wert „en“ gefüllt.

Natürlich können wir auch je nach Stimmungslage eine Antwort auf die Chat Nachricht ausgeben lassen:

if ($sentiment_score > 0.25) {
    $responseText = "Good to hear that you are happy 😀";
    $this->sendChatResponse($msg['usernumber'], $responseText);
} 

Ich hoffe ich konnte euch einen guten Einblick geben, was für tolle Dinge mit der NLP API möglich sind. Natürlich gibt es auch noch andere Anbieter wie Microsoft Azure, IBM Watson oder AWS auf dem Markt, die ähnliche Produkte anbieten. Aktuell kann ich allerdings nicht sagen, welcher Dienst die besten Resultate liefert.