[PYTHON] Je ... je n'ai pas d'émotions ... ← Essayez d'analyser s'il y a vraiment des émotions avec divers estimateurs d'émotions

introduction

La communication humaine comprend non seulement le langage, mais également de nombreuses informations non verbales telles que les expressions faciales et les gestes. Lors de l'analyse et de l'interprétation mécanique et programmatique du comportement humain, il est possible d'obtenir plus d'informations en ajoutant de telles informations non verbales et en donnant un sens. Ces technologies sont recherchées et développées dans divers domaines tels que le traitement d'image, le traitement du langage naturel et la reconnaissance vocale, et devraient être appliquées dans de nombreux domaines tels que le marketing et les systèmes d'interaction avec des robots. Il continuera de croître de manière significative à l'avenir.

[Dans l'article précédent (un programme qui corrige automatiquement «Takenoko no Sato» en «Kinoko no Yama» «correctement») (https://qiita.com/honehoney/items/a8c7ba2c53a70c88502e), * dans le texte J'ai essayé d'utiliser une API d'estimation des émotions basée sur du texte pour corriger les * erreurs **. En utilisant une telle technologie de traitement du langage naturel, il devient possible d'estimer les émotions détenues par le locuteur et de renvoyer des réactions différentes en fonction des émotions. Par exemple, lorsqu'un locuteur est triste, le chatbot peut estimer les sentiments et le réconforter afin qu'il puisse communiquer correctement.

D'un autre côté, il y a un certain nombre de personnes dans le monde qui prétendent n'avoir aucun sentiment. Par exemple, les personnes suivantes.

† Exemple typique 1 †

"Ne parlez pas ... je ... je n'ai aucun sentiment ..." "Qu'est-ce que rire ...?"

  • Zero (33)-("Une collection de citations qui tombent amoureuses des femmes ", 2011)

† Exemple typique 2 †

Spécifications Je

Lycéen, (14,6 ans)

Pas de passe-temps, surtout (même si je regarde les journaux et les actualités pour avoir le minimum d'informations)

Sentiments, aucun

A partir de la sixième du primaire, les environs sont stupides et les sentiments s'estompent Presque plus maintenant C'est comme une machine Ça me rend triste quand je me vois froid

  • ID: Qm9QaLSN0-("Je suis un lycéen, mais je n'ai pas de sentiments honnêtes et tout semble ridicule ", 2013)

Puisqu'il n'y a aucune émotion parmi ces personnes, «je ne pourrai peut-être pas communiquer correctement avec les autres», «je peux être différent des autres», «En fait, je suis une personne réincarnée. Je pense qu'il y a des gens qui souffrent de beaucoup d'anxiété comme "N'est-ce pas?"

Heureusement, cependant, de nombreuses entreprises de pointe telles que Google, Microsoft et NTT ont publié leurs derniers résultats de recherche sous la forme d'API d'estimation des émotions. Vous pouvez les utiliser pour analyser et comparer en profondeur les émotions de ces personnes pour voir si elles sont vraiment sans émotion. S'il est présumé avoir des émotions, "Vous avez aussi des émotions correctement" "Je ne suis pas une personne spéciale, ** juste une personne ordinaire ordinaire " ** "Je ne peux pas communiquer Il peut y avoir d'autres causes aussi. " Je pensais qu'il serait possible de donner un sentiment de sécurité en me le disant doucement, alors j'ai décidé d'essayer différentes API d'estimation des émotions cette fois.

Ci-dessous, je décrirai comment utiliser chacun et les impressions que j'ai réellement utilisées.

Service d'estimation des émotions à comparer

Comparez les résultats à l'aide des quatre types d'API d'estimation des émotions suivants. Tous sont gratuits, je vais donc vous expliquer comment les utiliser.

Comment utiliser chaque API d'estimation des émotions

Google Cloud Natural Language API

Cliquez pour développer

Préparation

Tout d'abord, inscrivez-vous sur Google Cloud Platform. Enregistrez également une carte de crédit, etc. (Il y a une période gratuite d'un an.)

Sélectionnez "Bibliothèque" dans le menu "API et services". Recherchez et activez l '"API Cloud Natural Language". Ensuite, sélectionnez "Informations d'identification" dans le menu "API et services", créez une clé API à partir de "Créer des informations d'identification" et notez-la.

la mise en oeuvre

À Google Colabratory "Créer un nouveau cahier".

"Ajouter du code" pour écrire et exécuter le code suivant. (Exécuter est le bouton triangle ▷ à gauche)


import getpass

APIKEY = getpass.getpass()

Il vous sera demandé un laissez-passer, alors entrez la clé API et appuyez sur ENTRÉE.

Ensuite, faites "Ajouter du code", écrivez le code suivant et exécutez-le pour afficher le résultat de l'estimation des émotions.


import requests 
 
key = APIKEY
 
#Texte que vous souhaitez analyser les émotions
text = "Ne me parle pas ... je ... je n'ai pas de sentiments ..."
 
#URL de l'API
url = 'https://language.googleapis.com/v1/documents:analyzeSentiment?key=' + key
 
#Paramètres des informations de base
header = {'Content-Type': 'application/json'}
body = {
    "document": {
        "type": "PLAIN_TEXT",
        "language": "JA",
        "content": text
    },
    "encodingType": "UTF8"
}
 
#Recevez le résultat au format json.
response = requests.post(url, headers=header, json=body).json()
print(response)
#Afficher les résultats de l'analyse sur l'écran de la console
print("Ampleur globale:",response["documentSentiment"]["magnitude"])
print("Score complet:",response["documentSentiment"]["score"])
for i in response["sentences"]:
    print(i["text"]["content"],"magnitude:",i["sentiment"]["magnitude"],", score:",i["sentiment"]["score"])

Microsoft Azure Text Analytics API

Cliquez pour développer

Si vous souhaitez l'utiliser facilement, vous pouvez essayer la démo ci-dessous. https://azure.microsoft.com/ja-jp/services/cognitive-services/text-analytics/

Si vous l'implémentez sous forme de code, vous pouvez obtenir une clé d'essai valide pendant 7 jours parmi les suivantes. https://azure.microsoft.com/ja-jp/try/cognitive-services/#lang

Utilisez le guide de démarrage rapide ci-dessous pour créer et exécuter du code dans Colaboratory. Cependant, la version d'analyse des émotions utilise la dernière version v3.0-preview.1. (V2.1 en démarrage rapide) https://docs.microsoft.com/ja-jp/azure/cognitive-services/text-analytics/quickstarts/python


import requests
# pprint is used to format the JSON response
from pprint import pprint

import os

subscription_key = "<paste-your-text-analytics-key-here>"
endpoint = "<paste-your-text-analytics-endpoint-here>"

sentiment_url = endpoint + "/text/analytics/v3.0-preview.1/sentiment"

documents = {"documents": [
    {"id": "1", "language": "ja",
        "text": "Ne me parle pas ... je ... je n'ai pas de sentiments ..."},
]}

headers = {"Ocp-Apim-Subscription-Key": subscription_key}
response = requests.post(sentiment_url, headers=headers, json=documents)
sentiments = response.json()
pprint(sentiments)

COTOHA API

Cliquez pour développer

Inscrivez-vous en tant que développeur depuis l'API COTOHA et obtenez un ID et un PASS. https://api.ce-cotoha.com/contents/index.html Chaque API peut être utilisée jusqu'à 1 000 fois par jour, ou jusqu'à 30 000 fois par mois.

Vous pouvez l'exécuter en écrivant ce qui suit dans Colaboratory et en réécrivant l'ID et le PASS.


import requests
import json
import sys
from pprint import pprint

BASE_URL = "https://api.ce-cotoha.com/api/dev/"
CLIENT_ID = "ID obtenu par l'API COTOHA"
CLIENT_SECRET = "PASS obtenu avec l'API COTOHA"


def auth(client_id, client_secret):
    token_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8"
    }

    data = {
        "grantType": "client_credentials",
        "clientId": client_id,
        "clientSecret": client_secret
    }
    r = requests.post(token_url,
                      headers=headers,
                      data=json.dumps(data))
    return r.json()["access_token"]

def sentiment(sentence, access_token):
    base_url = BASE_URL
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8",
        "Authorization": "Bearer {}".format(access_token)
    }
    data = {
        "sentence": sentence,
    }
    r = requests.post(base_url + "nlp/v1/sentiment",
                      headers=headers,
                      data=json.dumps(data))
    return r.json()


if __name__ == "__main__":
    sentence = "Ne me parle pas ... je ... je n'ai pas de sentiments ..."
    access_token = auth(CLIENT_ID, CLIENT_SECRET)

    sentiment_result  = sentiment(sentence,access_token)

    pprint(sentiment_result)

Utilisateur local

Cliquez pour développer

Étant donné que la version gratuite n'est fournie que sur le Web, utilisez-la à partir du site de démonstration ci-dessous. https://emotion-ai.userlocal.jp/

Extrait de résultat et comparaison

  1. "Ne parlez pas ... je ... je n'ai aucun sentiment ..."
  2. "Qu'est-ce que rire ...?"
  3. «Spécifications I (omises)»

Comparons les résultats avec chaque estimateur d'émotion. Ci-dessous, le résultat est long, donc je le plie. Cliquez pour agrandir.

1. Chaque résultat d'estimation de "Ne parlez pas ... je ... je n'ai aucun sentiment ..."

Cliquez pour développer

Google Cloud Natural Language API

Ampleur globale: 0.7
Score complet: 0.7

À propos de Google Sentiment score: -1,0 (négatif) à 1,0 (positif) magnitude: 0,0 ~ + inf L'émotion est exprimée par. Il semble que «triste» et «en colère» ne soient pas distingués et seule la force est exprimée comme négative ou positive. Exemple d'interprétation "" score ": 0,8," magnitude ": 3,0" est clairement positif Donc cette fois c'est faible et positif. ** Résultat: légèrement positif **

Microsoft Azure Text Analytics API

'sentenceScores': {'negative': 0.55,
                   'neutral': 0.37,
                   'positive': 0.08},
'sentiment': 'negative'

Le sentiment de Microsoft est considéré comme ayant un total de 1 négatif, neutre et positif. Cette fois, il semble que la négativité ait été jugée le plus fortement. S'il s'agit d'un site de démonstration, il sera affiché comme indiqué dans l'image ci-dessous. スクリーンショット 2020-03-03 23.51.06.png ** Résultat: légèrement négatif **

COTOHA API

 'result': {'emotional_phrase': [],
            'score': 0.36632366672980926,
            'sentiment': 'Neutral'}

L'API COTOHA semble indiquer soit positive, négative, neutre et sa fiabilité. La caractéristique est la section appelée émotionnelle_phrase, qui n'est pas apparue cette fois, mais puisque les termes liés aux émotions et les étiquettes de ces émotions sont extraits, il semble qu'ils puissent être utilisés en fonction de l'usage prévu. S'il s'agit d'un échantillon, ce qui suit est décrit.

    "emotional_phrase":[
      {
        "form":"",
        "emotion":","
      }

スクリーンショット 2020-03-04 0.10.35.png Réjouis-toi et tranquillité d'esprit Cette fois, le score est neutre et peu fiable, il semble donc ** sans émotion, mais il peut être différent **. Dans un sens, c'est proche de la bonne réponse. ** Résultat: sans émotion (peut-être) ** Résultat sur le Web local de l'utilisateur. Il semble être classé en 5 types d'émotions. Cela semble facile à utiliser. Cette fois, il semble avoir le sentiment de ** colère et amour **. Si vous le lisez littéralement, vous connaîtrez votre colère, mais vous êtes ** comme **.

** Résultat: en colère et comme **

2. Chaque résultat d'estimation de "Qu'est-ce que rire ...?"

Cliquez pour développer

Google Cloud Natural Language API

Ampleur globale: 0.1
Score complet: -0.1

** Résultat: faible absence d'émotion. Qu'est-ce qu'une faible absence d'émotion ... **

Microsoft Azure Text Analytics API

'sentenceScores': {'negative': 0.91,
                   'neutral': 0.04,
                   'positive': 0.05},
'sentiment': 'negative'}

** Résultat: négatif **

COTOHA API

 'result': {'emotional_phrase': [{'emotion': 'PN', 'form': 'rire'}],
            'score': 0.2729609019529442,
            'sentiment': 'Neutral'},

Ce résultat est également ** sans émotion mais pas confiant **.

** Résultat: sans émotion (peut-être) **

Utilisateur local

スクリーンショット 2020-03-04 0.29.15.png Aussi, ** j'aime ** ou ... ** La joie ** augmente et devient le chaos.

** Résultat: J'aime, en colère et joyeux **

3. Chaque résultat d'estimation de "Spec I (Omitted)"

Cliquez pour développer

Google Cloud Natural Language API

Ampleur globale: 1.8
Score complet: 0.1

Forte absence d'émotion. Quel est ...

** Résultat: Fort sans émotion **

Microsoft Azure Text Analytics API

'documentScores': {'negative': 0.56,
                   'neutral': 0.28,
                   'positive': 0.16},
'sentiment': 'negative'}

** Résultat: légèrement négatif **

COTOHA API

 'result': {'emotional_phrase': [{'emotion': 'N', 'form': 'devenir triste'},
                                 {'emotion': 'PN', 'form': 'du froid'},
                                 {'emotion': 'triste', 'form': 'Stupide'},
                                 {'emotion': 'PN', 'form': 'le minimum'}],
            'score': 0.6473423833981717,
            'sentiment': 'Negative'}

** Résultat: négatif **

Utilisateur local

スクリーンショット 2020-03-04 0.43.36.png Je sens que c'est un résultat comme ça.

** Résultat: un peu peur **

Sommaire des résultats

Les résultats des jugements positifs et négatifs sont résumés dans le tableau ci-dessous.

  • Le nombre entre parenthèses est le nombre de points positifs et négatifs.
Google Microsoft COTOHA Utilisateur local
1.Je n'ai pas de sentiments Un peu positif(+1) Légèrement négatif(-1) Vide d'émotion(Faible fiabilité) (0) En colère et comme(0)
2.Qu'est-ce que rire Affaibli sans émotion(0) Négatif(-1) Vide d'émotion(Faible fiabilité)(0) Comme, colère et joie(+1)
3.Spécifiez-moi Forte absence d'émotion(0) Légèrement négatif(-1) Négatif(-1) Un peu peur(-1)
Commentaire général C'est un mystère qu'un positif soit sorti. Je ne connais pas la distinction entre fort et faible Globalement négatif. Je me sens comme la bonne réponse. Jugé comme peu fiable->Cela semble être une réponse correcte dans un sens, mais elle peut ne pas être jugée fortement à moins qu'il n'y ait une phrase qui exprime directement des émotions Il y a des moments où plusieurs émotions se mélangent et je ne comprends pas bien

C'est pourquoi je n'ai essayé que 3 cas, mais les résultats sont assez différents. L'individualité de chaque entreprise ressort. Cette fois, les résultats des quatre entreprises sont totalisés pour juger des émotions, et M. Rei a un total de 0 et est sans émotion, et la spécification j'ai un négatif de -3. Comme prévu, Rei (33 ans) a un âge différent du mystère des lycéens.

J'ai essayé d'utiliser chacun d'eux, mais j'ai personnellement jugé que ceux de Microsoft étaient totalement négatifs, et j'ai pensé qu'ils étaient les plus probables. D'un point de vue pratique, je pense que ce serait plus facile à utiliser si les scores positifs et négatifs étaient attribués. Il semble que l'API COTOHA la juge sans émotion, et il semble qu'il n'est pas possible de juger car il n'y a pas de norme simplement parce qu'il n'y a pas de phrase exprimant une émotion. Doit-on l'appeler sans jugement plutôt que sans émotion? Il est pratique d'extraire des phrases qui expriment des émotions, mais il existe de nombreux modèles qui ne disent pas nécessairement des phrases émotionnelles, il semble donc nécessaire de vérifier si c'est pratique ou non. Je pense que les points positifs et les points forts de Google ne sont en fait pas très pratiques. Je ne savais pas quoi faire avec un faible négatif ou une forte impuissance. Il semble que nous devions réfléchir à la mise en œuvre pendant un moment. Les utilisateurs locaux ne sont pas sûrs car les émotions conflictuelles sont trop mélangées. Je ne sais pas où l'utiliser ...

Ce qui précède sont les impressions de l'utilisation de chaque API d'analyse des émotions. S'il y a quelqu'un près de chez vous qui dit: "Je ... je n'ai pas d'émotions ...", veuillez vérifier que vous n'avez vraiment aucune émotion et transmettre doucement les résultats.