Emotion

At a glance

Emotion models are pre-trained classification models for the task of classifying the emotion in the input document and the specified target words. For example, in the text

I hate bananas. Bananas are bad.

the model may predict anger and sadness as the most prevalent emotions overall, and also predict the targeted emotion for specific mentions, for example: frustrated would have anger as the most prevalent emotion.

The Emotion model is trained using the Document classifier task. It requires a Syntax model to predict each sentence's emotion and aggregate the results to the final one. It is executed directly on the input text.

Class definition
watson_nlp.workflows.emotion.aggregated_classification_ensemble.AggregatedClassificationEnsemble

For language support, see Supported languages.

Pretrained models

Model names are listed below.

Model ID Container Image
emotion_aggregated-workflow_lang_en_stock cp.icr.io/cp/ai/watson-nlp_emotion_aggregated-workflow_lang_en_stock:1.4.1
emotion_aggregated-workflow_lang_fr_stock cp.icr.io/cp/ai/watson-nlp_emotion_aggregated-workflow_lang_fr_stock:1.4.1

The Emotion models have been trained on data from a variety of sources including social media conversations, social media commentary, TED talks, and movie dialogs. Data collection was varied, covering multiple industries from multiple geographical regions.

For details of the Emotion type system, see Understanding model type systems.

Running models

The Emotion model request accepts the following fields:

Field Type Required
Optional
Repeated
Description
raw_document watson_core_data_model.nlp.RawDocument or str required The input document on which to perform Emotion analysis
document_emotion bool optional Whether to perform emotion classification at the document level or not. Default is True
target_phrases str repeated An optional list of target strings or collection of text-based targets that will typically be provided by the user of this workflow directly.

Example requests

REST API

curl -s \
  "http://localhost:8080/v1/watson.runtime.nlp.v1/NlpService/EmotionPredict" \
  -H "accept: application/json" \
  -H "content-type: application/json" \
  -H "Grpc-Metadata-mm-model-id: emotion_aggregated-workflow_lang_en_stock" \
  -d '{ "raw_document": { "text": "I hate bananas. Bananas are bad." }, "target_phrases": ["bananas"] }'

Response

{"emotionPredictions":[
    {"emotion":{"anger":0.41363257,"disgust":0.045076143,"fear":0.2293122,"joy":0.007663558,"sadness":0.4184458},
    "target":"bananas",
      "emotionMentions":[
        {"span":{"begin":0,"end":14,"text":"I hate bananas."},"emotion":{"anger":0.71405256,"disgust":0.048081085,"fear":0.06746074,"joy":0.012480628,"sadness":0.12677658}},
        {"span":{"begin":15,"end":29,"text":"Bananas are bad."},"emotion":{"anger":0.11321261,"disgust":0.0420712,"fear":0.39116368,"joy":0.0028464883,"sadness":0.710115}}]},
          {"emotion":{"anger":0.41363257,"disgust":0.045076143,"fear":0.2293122,"joy":0.007663558,"sadness":0.4184458},
          "target":"",
          "emotionMentions":[
            {"span":{"begin":0,"end":14,"text":"I hate bananas."},"emotion":{"anger":0.71405256,"disgust":0.048081085,"fear":0.06746074,"joy":0.012480628,"sadness":0.12677658}},
            {"span":{"begin":15,"end":29,"text":"Bananas are bad."},"emotion":{"anger":0.11321261,"disgust":0.0420712,"fear":0.39116368,"joy":0.0028464883,"sadness":0.710115}}]}],
    "producerId":{"name":"Ensemble Aggregated Emotion Workflow","version":"0.0.1"}}

Python

import grpc

from watson_nlp_runtime_client import (
    common_service_pb2,
    common_service_pb2_grpc,
    syntax_types_pb2,
)

channel = grpc.insecure_channel("localhost:8085")

stub = common_service_pb2_grpc.NlpServiceStub(channel)

request = common_service_pb2.EmotionRequest(
    raw_document=syntax_types_pb2.RawDocument(text="I hate bananas. Bananas are bad."),
    document_emotion=False,
    target_phrases=["bananas"]
)

  response = stub.EmotionPredict(
    request, metadata=[("mm-model-id", "emotion_aggregated-workflow_lang_en_stock")]
)

print(response)

Response

emotion_predictions {
  emotion {
    anger: 0.413632572
    disgust: 0.045076143
    fear: 0.229312196
    joy: 0.00766355777
    sadness: 0.418445796
  }
  target: "bananas"
  emotion_mentions {
    span {
      end: 14
      text: "I hate bananas."
    }
    emotion {
      anger: 0.714052558
      disgust: 0.0480810851
      fear: 0.0674607381
      joy: 0.0124806277
      sadness: 0.126776576
    }
  }
  emotion_mentions {
    span {
      begin: 15
      end: 29
      text: "Bananas are bad."
    }
    emotion {
      anger: 0.113212608
      disgust: 0.0420712
      fear: 0.391163677
      joy: 0.00284648826
      sadness: 0.710115
    }
  }
}
producer_id {
  name: "Ensemble Aggregated Emotion Workflow"
  version: "0.0.1"
}