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

Comparaison des API d'analyse des sentiments

Publié le May 11, 2021

Temps de lecture : 8 minutes

La communication écrite entre deux personnes s'avère souvent difficile lorsqu'il s'agit d'interpréter les émotions. Les conversations en ligne sont facilement mal interprétées, ce qui entraîne des résultats indésirables ou inattendus.

L'analyse des sentiments nous donne la possibilité d'extraire le sens d'un texte, de manière programmatique, ce qui permet aux développeurs de créer des applications avec des boucles de rétroaction qui peuvent être en grande partie automatisées.

La possibilité d'analyser le texte et d'orienter les personnes vers le canal approprié permet de repérer les clients qui ne sont pas satisfaits et qui pourraient avoir besoin d'une assistance supplémentaire ou d'une autre intervention.

Toute entreprise qui utilise la communication textuelle, que ce soit sur les médias sociaux ou dans les canaux d'assistance, bénéficie grandement de cette analyse à des fins d'apprentissage, que ce soit après coup ou en temps réel. En tant que développeur, nous pouvons facilement fournir cette fonctionnalité à l'organisation.

Vue d'ensemble

Ce billet sert à comparer quatre services en nuage d'analyse des sentiments : Amazon Comprehend, Azure Text Analytics, Google Natural Languageet IBM Watson Tone Analyzer.

Comme entrée de texte, j'ai utilisé le webhook Nexmo Incoming Messages webhook afin d'obtenir un retour d'information instantané de la part du service à chaque message texte. Au cours du processus, j'ai pris soin de prendre quelques notes et de les organiser ici pour vous aider à évaluer un fournisseur.

Précision et notation

Chaque service utilise un système de notation légèrement différent. Cependant, chacun a tendance à utiliser 1 comme base de référence pour le niveau de confiance. Plus le chiffre est proche de 1, plus le service est confiant dans l'exactitude du sentiment. Watson Tone Analyzer ajoute des étiquettes au sentiment, telles que joy, sadness, et analytical pour tenter de classifier davantage le sentiment, alors que les autres services ont tendance à se baser uniquement sur le positif et le négatif.

Comme le montrent les tests ci-dessous, il est facile d'obtenir des informations précises sur les sentiments lorsque la formulation et l'intention sont directes. Cependant, le contexte humain dans le discours peut changer radicalement un sentiment avec l'utilisation d'un langage comme le sarcasme. Le sarcasme et d'autres éléments de langage rendent l'analyse des sentiments plus difficile à réaliser avec une précision de 100 % et, en général, pour l'ensemble des communications textuelles.

"Je suis heureux !"

Chaque service a reçu cette réponse positive/joyeuse sans trop de difficultés.

  • Amazon Comprehend - Positive - 0.9970158338546753

  • API d'analyse de texte Azure - 0.9928278923034668

  • API de langage naturel de Google - 0.800000011920929

  • Analyseur de tonalité Watson : 1 - Joy

"Je suis triste."

Un autre test facile qui a donné un sentiment négatif. Notez ici que Google utilise des nombres négatifs pour un sentiment négatif.

  • Amazon Comprehend - Negative - 0.9563825130462646

  • API d'analyse de texte Azure - 0.0036676526069641113

  • API de langage naturel de Google - -0.20000000298023224

  • Analyseur de tonalité Watson : 1 - Sadness

"Si heureux qu'il y ait eu une interrogation aujourd'hui."

Dans le troisième test, j'ai utilisé un texte volontairement trompeur. Cette phrase était très probablement un sarcasme et le sentiment était à l'opposé de la joie. Tous les services étaient moins convaincus de l'exactitude du sentiment positif, mais Google a suivi le mouvement.

  • Amazon Comprehend - Positive - 0.978675365447998

  • API d'analyse de texte Azure - 0.887139081954956

  • API de langage naturel de Google - 0.800000011920929

  • Analyseur de tonalité Watson : 0.899749 - Joy

Caractéristiques

L'analyse des sentiments est l'objet principal de cet article. Tous les fournisseurs de services répertoriés ici proposent au minimum cette analyse. Google, Azure et Amazon proposent également d'autres outils de traitement du langage naturel, tels que l'analyse des entités, l'analyse syntaxique, la classification du contenu et l'extraction de phrases clés. IBM Watson Tone Analyzer ne propose que l'analyse des sentiments.

Le prix de la fonctionnalité supplémentaire varie également selon le fournisseur, donc si vous prévoyez de l'utiliser, assurez-vous d'abord de vérifier les coûts.

Langues prises en charge

Les langues prises en charge varient considérablement d'un service à l'autre. Watson Tone Analyzer en prend le moins en charge, avec seulement l'anglais et le français. Tous les autres services proposent au moins ces deux langues, ainsi que de nombreuses autres langues. Les langues communes sont l'allemand, le français, l'italien, l'espagnol, l'anglais et le portugais.

Prise en charge des langues par Amazon Comprehend

Prise en charge des langues pour Azure Text Analytics

Prise en charge des langues par l'API de langage naturel de Google

Support linguistique de l'analyseur de tonalité Watson

Facilité d'utilisation

L'analyse des sentiments est une fonctionnalité bien établie pour chaque fournisseur de services en nuage. L'installation de chaque service est en grande partie la même, à quelques exceptions près. Il s'agit généralement d'activer le service et d'obtenir des informations d'identification, soit directement auprès du service, soit auprès d'un utilisateur authentifié.

Tous les services fournissent un kit de développement logiciel (SDK) avec des fonctionnalités intégrées qui facilitent l'installation et l'utilisation.

Amazon Comprehend

La requête Amazon Comprehend utilise un tableau pour transmettre plusieurs phrases à la fois et répond avec un objet référencé par un index qui utilise Positive, Negative, Neutral, , et Mixed et des scores. L'utilisation de plusieurs scores de ce type peut s'avérer utile lorsque la phrase est plus complexe et qu'elle n'entre pas dans une seule catégorie de score.

Demande

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})
    }
  });
}

Réponse

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

Si vous souhaitez le tester, nous avons un repo pour Amazon Comprehend utilisant la messagerie Nexmo.

Documentation de l'API Amazon Comprehend

API d'analyse de texte Azure

Demande

Azure Text Analytics utilise également un tableau pour plusieurs lignes de texte, mais nécessite l'utilisation de l'option text et id soient transmis sous forme d'objet. La réponse est un peu insuffisante par rapport aux autres services, puisqu'elle ne fournit qu'une note de 0 à 1, 0 correspondant à negative et 1 comme 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;
  });

}

Réponse

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

Si vous souhaitez le tester, nous avons un repo pour Amazon Comprehend utilisant la messagerie Nexmo.

Documentation de l'API Azure Text Analytics

API de langage naturel de Google

L'API Google Natural Language propose une méthode qui accepte un document à la fois, ce qui peut entraîner un trafic supplémentaire en cas d'utilisation plus importante. La réponse fournit un score en utilisant -1.0 comme negative et 1,0 comme positiveainsi qu'un score de magnitude, qui est la valeur absolue du score. Elle a également répondu avec deux clés undefined clés de la réponse qui, malgré des recherches supplémentaires, restent inexpliquées.

Demande

// 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);
      });
}

Réponse

[
  {
    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
]

Si vous souhaitez tester cette solution, nous avons un repo pour Google Natural Language API de Google en utilisant la messagerie Nexmo.

Documentation de l'API Google Natural Language

Analyseur de tonalité Watson

Watson Tone Analyzer accepte également un texte en entrée, mais permet également de passer des phrases et de les analyser individuellement avec l'indicateur sentences à la valeur "true". La réponse renvoie un score compris entre 0 et 1, mais comprend également un message d'erreur. tone_id qui peut comprendre les éléments suivants : anger, fear, joy, sadness, analytical, confident, tentative. Les tons peuvent aider à mieux définir le sens des phrases et à fournir un contexte plus humain.

Demande

// 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);
      });
}

Réponse

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

Si vous souhaitez tester cette méthode, nous avons un repo pour IBM Watson Tone Analyzer utilisant la messagerie Nexmo.

Documentation sur l'analyse des tons de Watson

Coût

La tarification de ces services s'est avérée un peu déroutante à première vue, mais après quelques réflexions et calculs, j'ai pu déterminer comment les choses se passaient.

Amazon et Google facturent tous deux une mesure de units. L'unité d'Amazon est de 100 caractères avec un minimum de 300, et Google utilise des blocs de 1000 caractères, facturant de 1 à 1000 caractères au même montant. Azure facture également par tranche de 1000 caractères, mais les appelle text records. IBM mesure les coûts en fonction des appels à l'API.

Dans ces conditions, le moyen le plus simple de normaliser les différents coûts est d'utiliser un message de 1000 caractères comme exemple avec un volume de 500 000 par mois sur un système standard (une puissance de calcul supérieure est disponible à des coûts plus élevés). La tarification au volume peut s'avérer utile dans votre cas particulier si votre volume est nettement plus élevé.

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

* Coûts basés sur 500 000 000 caractères envoyés par mois - en date du 10/11/19 - sous réserve de modifications.

Récapitulation

Passer en revue tous ces services s'est avéré être un exercice amusant et une bonne expérience d'apprentissage sur la puissance de l'analyse des sentiments. Chaque fournisseur offre un bon niveau de fonctionnalité et de précision. Lorsque vous choisissez l'un des quatre fournisseurs, veillez à l'évaluer en fonction de vos besoins linguistiques et à déterminer la répartition des coûts en fonction de votre utilisation, car chaque service diminue avec le volume.

Amazon Comprehend, avec ses fonctionnalités supplémentaires, son faible coût et sa prise en charge des langues de base, est mon premier choix. Il est facile à configurer et à utiliser, et l'objet de réponse contient des détails que je trouve très utiles.

Si vous souhaitez tester l'un ou l'ensemble de ces services, le service Nexmo Extend a créé un code d'exemple pour vous aider à démarrer.

Partager:

https://a.storyblok.com/f/270183/384x384/444c073b5e/kellyjandrews.png
Kelly J AndrewsAncien membre de l'équipe

Kelly J. Andrews est un défenseur des développeurs pour Nexmo. Il bricole des ordinateurs depuis plus de 30 ans et a utilisé BASIC pour la première fois à l'âge de 5 ans.

Ce n'est que lorsqu'il a créé sa première page web en 1997 et qu'il a essayé JavaScript pour la première fois qu'il a trouvé sa véritable vocation. Kelly se bat désormais pour JavaScript, un code testable et une livraison rapide.

Vous pouvez le trouver en train de chanter au karaoké, de faire de la magie ou d'encourager les Cubs et les Fighting Irish.