https://d226lax1qjow5r.cloudfront.net/blog/blogposts/sentiment-api-analysis-comparison-dr/TW_EN_Sentiment-Analysis_1200x675.jpg

Sentiment Analysis API Vergleich

Zuletzt aktualisiert am May 11, 2021

Lesedauer: 7 Minuten

Die schriftliche Kommunikation zwischen zwei Personen ist oft eine Herausforderung, wenn es darum geht, Gefühle zu interpretieren. Online-Gespräche können leicht missverstanden werden, was zu unerwünschten oder unerwarteten Ergebnissen führt.

Die Stimmungsanalyse gibt uns die Möglichkeit, programmgesteuert Bedeutungen aus Texten zu extrahieren, so dass Entwickler Anwendungen mit weitgehend automatisierbaren Feedbackschleifen erstellen können.

Die Möglichkeit, Texte zu analysieren und Personen an den entsprechenden Kanal weiterzuleiten, bietet die Möglichkeit, Kunden ausfindig zu machen, die unzufrieden sind und möglicherweise zusätzliche Unterstützung oder andere Maßnahmen benötigen.

Jedes Unternehmen, das Textkommunikation nutzt, sei es in sozialen Medien oder in Support-Kanälen, profitiert in hohem Maße von dieser Analyse zu Lernzwecken sowohl im Nachhinein als auch in Echtzeit. Als Entwickler können wir diese Funktionalität für das Unternehmen problemlos bereitstellen.

Übersicht

Dieser Beitrag dient dem Vergleich von vier Cloud-Diensten zur Stimmungsanalyse: Amazon Comprehend, Azure Text Analytics, Google Natural Languageund IBM Watson Ton-Analysator.

Als Texteingabe habe ich den Nexmo Webhook Eingehende Nachrichten um bei jeder Textnachricht eine sofortige Rückmeldung des Dienstes zu erhalten. Während des Prozesses habe ich mir einige Notizen gemacht und sie hier zusammengestellt, um Ihnen bei der Bewertung eines Anbieters zu helfen.

Genauigkeit und Punktevergabe

Jeder Dienst verwendet ein etwas anderes Punktesystem. In der Regel verwenden jedoch alle 1 als Basiswert für ein Vertrauensniveau. Je näher die Zahl bei 1 liegt, desto zuversichtlicher ist der Dienst, dass das Sentiment korrekt ist. Der Watson Tone Analyzer fügt dem Sentiment Labels hinzu wie joy, sadness, und analytical um zu versuchen, die Stimmung weiter zu klassifizieren, während die anderen sich nur auf positiv und negativ stützen.

Wie in den nachstehenden Tests festgestellt wurde, ist die Genauigkeit von Stimmungen einfach, wenn Formulierung und Absicht eindeutig sind. Der menschliche Kontext in der Sprache kann jedoch eine Stimmung durch die Verwendung von Sprache wie Sarkasmus drastisch verändern. Sarkasmus und andere sprachliche Hilfsmittel erschweren die Stimmungsanalyse, die zu 100 % genau sein muss, und generell die Textkommunikation als Ganzes.

"Ich bin glücklich!"

Jeder Dienst erhielt diese positive/freudige Antwort ohne allzu große Schwierigkeiten.

  • Amazon Comprehend - Positive - 0.9970158338546753

  • Azure Text Analytics API - 0.9928278923034668

  • Google Natural Language API - 0.800000011920929

  • Watson Tone Analyzer: 1 - Joy

"Ich bin traurig."

Ein weiterer einfacher Test, der ein negatives Stimmungsbild ergab. Beachten Sie hier, dass Google negative Zahlen für negative Stimmungen verwendet.

  • Amazon Comprehend - Negative - 0.9563825130462646

  • Azure Text Analytics API - 0.0036676526069641113

  • Google Natural Language API - -0.20000000298023224

  • Watson Tone Analyzer: 1 - Sadness

"Ich bin so froh, dass es heute ein Pop-Quiz gab."

Im dritten Test habe ich einen absichtlich irreführenden Text verwendet. Dieser Satz wäre höchstwahrscheinlich Sarkasmus, und die Stimmung wäre das Gegenteil von glücklich. Jeder Dienst war weniger zuversichtlich, dass die positive Stimmung zutreffend war, aber Google hat sich darauf eingelassen.

  • Amazon Comprehend - Positive - 0.978675365447998

  • Azure Text Analytics API - 0.887139081954956

  • Google Natural Language API - 0.800000011920929

  • Watson Tone Analyzer: 0.899749 - Joy

Eigenschaften

Der Schwerpunkt dieses Beitrags liegt auf der Stimmungsanalyse. Jeder hier aufgeführte Dienstanbieter bietet mindestens diese Funktion. Google, Azure und Amazon bieten auch zusätzliche Tools für die Verarbeitung natürlicher Sprache an, wie z. B. Entity-Analyse, Syntaxanalyse, Inhaltsklassifizierung und Keyphrase-Extraktion. IBM Watson Tone Analyzer bietet nur eine reine Stimmungsanalyse.

Auch die Preise für die zusätzlichen Funktionen variieren je nach Anbieter, so dass Sie sich bei einer geplanten Nutzung zunächst über die Kosten informieren sollten.

Unterstützte Sprachen

Die unterstützten Sprachen sind von Dienst zu Dienst sehr unterschiedlich. Watson Tone Analyzer unterstützt am wenigsten, nämlich nur Englisch und Französisch. Alle anderen Dienste bieten mindestens diese und viele weitere Sprachen an. Die gemeinsamen Sprachen sind Deutsch, Französisch, Italienisch, Spanisch, Englisch und Portugiesisch.

Amazon Comprehend Sprachunterstützung

Azure Text Analytics Sprachunterstützung

Google Natural Language API Sprachunterstützung

Watson Tone Analyzer Sprachunterstützung

Benutzerfreundlichkeit

Die Stimmungsanalyse ist bei jedem Cloud-Anbieter eine gut eingeführte Funktion. Die Einrichtung für jeden Dienst war bis auf kleinere Ausnahmen weitgehend gleich. Zu den typischen Anforderungen gehören das Einschalten des Dienstes und das Abrufen von Anmeldedaten entweder direkt vom Dienst oder von einem authentifizierten Benutzer.

Alle Dienste bieten ein SDK mit eingebauten Funktionen, die die Einrichtung und Nutzung vereinfachen.

Amazon Verstehen

Die Amazon Comprehend-Anfrage verwendet ein Array, um mehrere Phrasen auf einmal zu übergeben und antwortet mit einem indexreferenzierten Objekt, das Positive, Negative, Neutral, und Mixed Werte verwendet. Die Verwendung mehrerer Scores auf diese Weise könnte sich als nützlich erweisen, wenn die Phrase komplexer ist und nicht nur in eine Score-Kategorie fällt.

Anfrage

function analyzeTone(params) {
  var obj = {
    LanguageCode: "en",
    TextList: [
      params.text,
    ]
  };
    var comprehend = new AWS.Comprehend({region: process.env.AWS_REGION});
    comprehend.batchDetectSentiment(obj, function (err, data) {
    if (err) {
      console.log(err, err.stack);
    }
    else{
      console.dir(data, {depth: null})
    }
  });
}

Antwort

{
  ResultList: [
    {
      Index: 0,
      Sentiment: 'POSITIVE',
      SentimentScore: {
        Positive: 0.9970158338546753,
        Negative: 0.0002091785572702065,
        Neutral: 0.002759476425126195,
        Mixed: 0.000015530584278167225
      }
    }
  ],
  ErrorList: []
}

Wenn Sie dies ausprobieren möchten, haben wir ein Repo für Amazon Verstehen unter Verwendung von Nexmo Messaging.

Amazon Comprehend API-Dokumentation

Azure Textanalyse-API

Anfrage

Azure Text Analytics verwendet ebenfalls ein Array für mehrere Textzeilen, benötigt aber die text und id als Objekt übergeben werden. Die Antwort ist im Vergleich zu den anderen Diensten etwas unzureichend, da sie nur einen Wert von 0 bis 1 liefert, wobei 0 als negative und 1 als positive.

function analyzeTone(params) {
  const creds = new CognitiveServicesCredentials.ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': process.env.TEXT_ANALYTICS_SUBSCRIPTION_KEY } });
  const client = new TextAnalyticsAPIClient.TextAnalyticsClient(creds, process.env.TEXT_ANALYTICS_ENDPOINT);

  const inputDocuments = {documents:[
      {id:"1", text:params.text}
  ]}

  const operation = client.sentiment({multiLanguageBatchInput: inputDocuments})
  operation
  .then(result => {
      console.dir(result, {depth: null})
  })
  .catch(err => {
      throw err;
  });

}

Antwort

{ documents: [ { id: '1', score: 0.9928278923034668 } ], errors: [] }

Wenn Sie dies ausprobieren möchten, haben wir ein Repo für Amazon Verstehen unter Verwendung von Nexmo Messaging.

Azure Text Analytics API-Dokumentation

Google Natural Language API

Die Google Natural Language API bietet eine Methode, die jeweils nur ein Dokument akzeptiert, was bei umfangreicherer Nutzung zu zusätzlichem Datenverkehr führen kann. Die Antwort liefert eine Bewertung, wobei -1,0 als negative und 1,0 als positivesowie eine Größenordnung, d. h. den absoluten Wert der Bewertung. Es antwortete auch mit zwei undefined Schlüssel in der Antwort, die trotz zusätzlicher Nachforschungen unerklärt bleiben.

Anfrage

// Google Cloud Sentiment Analysis
const client = new language.LanguageServiceClient();

function analyzeTone(params) {
  let document = {
    content: params.text,
    type: 'PLAIN_TEXT',
  };

  client.analyzeSentiment({document: document})
      .then(results => {
        console.dir(results, {depth: null})
      })
      .catch(err => {
        console.log('error', err);
      });
}

Antwort

[
  {
    sentences: [
      {
        text: { content: 'I am happy!', beginOffset: -1 },
        sentiment: { magnitude: 0.800000011920929, score: 0.800000011920929 }
      }
    ],
    documentSentiment: { magnitude: 0.800000011920929, score: 0.800000011920929 },
    language: 'en'
  },
  undefined,
  undefined
]

Wenn Sie dies ausprobieren möchten, haben wir ein Repo für Google Natural Language API unter Verwendung von Nexmo Messaging.

Google Natural Language API-Dokumentation

Watson-Ton-Analysator

Watson Tone Analyzer akzeptiert ebenfalls eine Texteingabe, erlaubt aber auch die Übergabe von Sätzen, die einzeln analysiert werden können, wenn das Flag sentences auf true gesetzt. Die Antwort liefert eine Punktzahl zwischen 0 und 1, enthält aber auch eine tone_id die Folgendes enthalten kann: anger, fear, joy, sadness, analytical, confident, tentative. Die Töne können dazu beitragen, die Bedeutung der Sätze etwas besser herauszuarbeiten, und bieten mehr menschlichen Kontext.

Anfrage

// IBM Watson Tone Analysis
var toneAnalyzer = new ToneAnalyzerV3({
  iam_apikey: process.env.TONE_ANALYZER_IAM_APIKEY,
  url: process.env.TONE_ANALYZER_URL,
  version: '2017-09-21'
});

function analyzeTone(params) {
  let toneParams = {
    tone_input: { 'text': params.text},
    content_type: 'application/json',
  };

  toneAnalyzer.tone(toneParams)
      .then(toneAnalyzer => {
        console.dir(toneAnalyzer, {depth: null})
      })
      .catch(err => {
        console.log('error', err);
      });
}

Antwort

{
  document_tone: { tones: [ { score: 1, tone_id: 'joy', tone_name: 'Joy' } ] }
}

Wenn Sie dies ausprobieren möchten, haben wir ein Repo für IBM Watson Ton-Analysator unter Verwendung von Nexmo Messaging.

Dokumentation der Watson-Tonanalyse

Kosten

Die Preisgestaltung für diese Dienste war auf den ersten Blick etwas verwirrend, aber nach einigem Nachdenken und Rechnen konnte ich feststellen, wie sich die Dinge zusammensetzen.

Amazon und Google verlangen beide ein gewisses Maß an units. Amazons Einheit ist 100 Zeichen mit einem Minimum von 300, und Google verwendet 1000-Zeichen-Blöcke und berechnet 1-1000 Zeichen den gleichen Betrag. Azure berechnet ebenfalls pro 1000 Zeichen, nennt diese aber text records. IBM rechnet nach API-Aufrufen ab.

Daher ist es am einfachsten, die unterschiedlichen Kosten zu normalisieren, wenn Sie eine Nachricht mit 1000 Zeichen als Beispiel mit einem Volumen von 500.000 pro Monat auf einem Standardsystem verwenden (höhere Rechenleistung ist zu höheren Kosten erhältlich). Die Preisgestaltung für das Volumen kann in Ihrem speziellen Fall helfen, wenn Sie eine wesentlich höhere Menge haben.

Provider Free Tier Cost Normalized Cost*
Amazon Comprehend N/A Up to 10M Units - $0.0001 $500
Azure Text Analytics API 5,000 Text Records/Month 0-500K - $2 per 1,000 text records $1000
Google Natural Language API 5,000 Units/Month 5K+ -1M $1.00/1000 units $500
Watson Tone Analyzer 2,500 API Calls/Month 1-250K @ $0.0088
250K-500K @ $0.0013
$2437

* Die Kosten basieren auf 500.000.000 versendeten Zeichen pro Monat - Stand: 10/11/19 - Änderungen vorbehalten

Rekapitulation

Die Durchsicht all dieser Dienste war eine unterhaltsame Übung und eine gute Lernerfahrung in Bezug auf die Leistungsfähigkeit der Stimmungsanalyse. Jeder Anbieter bietet ein gutes Maß an Funktionalität und Genauigkeit. Wenn Sie sich für einen der 4 Anbieter entscheiden, achten Sie darauf, dass Sie Ihre Sprachbedürfnisse berücksichtigen und die Kostenaufteilung auf der Grundlage Ihrer Nutzung bestimmen, da jeder Dienst mit dem Volumen abnimmt.

Amazon Comprehend ist mit seinen zusätzlichen Funktionen, den niedrigen Kosten und der grundlegenden Sprachunterstützung die erste Wahl für mich. Es ist einfach einzurichten, einfach zu verwenden und das Antwortobjekt hat Details, die ich sehr nützlich finde.

Wenn Sie einen oder alle diese Dienste ausprobieren möchten, können Sie die Nexmo Extend Team einige Beispielcodes erstellt, um Ihnen den Einstieg zu erleichtern.

Share:

https://a.storyblok.com/f/270183/384x384/444c073b5e/kellyjandrews.png
Kelly J Andrews

Kelly J Andrews is a developer advocate for Nexmo and has been tinkering with computers for over 30 years, using BASIC for the first time at the age of 5.

It wasn't until building his first webpage in 1997, and trying out JavaScript for the first time that he found a true calling. Kelly now fights for JavaScript, testable code, and fast delivery.

You can find him singing karaoke, performing magic, or cheering for the Cubs and Fighting Irish.