Analyse des émotions par Python (word2vec)

L'autre jour, j'ai participé à une session d'étude Python sponsorisée par Team Zet Co., Ltd. Le thème cette fois est "Texte des émotions en utilisant word2vec" "Une analyse". Pour être honnête, c'était un thème fou pour moi qui ai touché Python pour la première fois il y a une semaine, mais je me demande s'il est possible de découvrir comment la grammaire que j'étudie est mise à profit. Je me suis précipité et suis monté à bord un jour avant l'événement.

En passant, je vais laisser l'introduction dans cette mesure et entrer dans le sujet principal.

Qu'est-ce que Word2Vec en premier lieu? ?? ??

Modèle de réseau neuronal (apprentissage automatique) qui analyse les mots. En termes simples, il semble que les mots puissent être vectorisés et pondérés. (Pour plus d'informations, consultez ici)

Cette fois White Goat Corporation J'ai utilisé le modèle word2vec de.

Cliquez ici pour savoir comment installer word2vec (https://qiita.com/opankopan/items/2a999e0209504dca0a3f)

Tout d'abord Assurez-vous que les mots sont vectorisés par word2vec. Tapons ce code avec word2vec implémenté.

sample.py


import gensim.models.word2vec.Word2Vec as wv 

print(len(model.wv["Amour"]))
model.wv["Amour"]

Puis

50 array([ 0.09289702, -0.16302316, -0.08176763, -0.29827002, 0.05170078, 0.07736144, -0.06452437, 0.19822665, -0.11941547, -0.11159643, 0.03224859, 0.03042056, -0.09065174, -0.1677992 , -0.19054233, 0.10354111, 0.02630192, -0.06666993, -0.06296805, 0.00500843, 0.26934028, 0.05273635, 0.0192258 , 0.2924312 , -0.23919497, 0.02317964, -0.21278766, -0.01392282, 0.24962738, 0.11264788, 0.05772769, 0.20941015, -0.01239212, -0.1256235 , -0.19794041, 0.1267719 , -0.12306885, 0.01006295, 0.08548331, -0.08936502, -0.05429656, -0.09757583, 0.10338967, 0.13714872, 0.23966707, 0.02216845, 0.02270923, 0.32569838, -0.0311841 , -0.00150117], dtype=float32)

Le résultat sera retourné. C'est le mot «amour» composé de 50 dimensions. Il montre que le composant est composé des éléments ci-dessus.

prochain

sample.py


#Extraire des mots similaires au mot-clé
sim_do = model.wv.most_similar(positive=["Petite amie"], topn=30)
#Comme il est répertorié, il est conçu pour une visualisation facile
print(*[" ".join([v, str("{:.5f}".format(s))]) for v, s in sim_do], sep="\n")

Quand tu frappes Elle-même 0.82959 Molly 0.82547 He 0.82406 Sylvia 0.80452 Charlie 0.80336 Amant 0.80197 Vous pouvez extraire des mots avec des significations similaires telles que. Le nombre sur le côté droit du mot est une quantification de combien vous êtes avec le mot «elle».

Aussi, lorsque vous voulez savoir combien de temps les deux mots sont

similarity = model.wv.similarity(w1="pomme", w2="fraise")
print(similarity)

similarity = model.wv.similarity(w1="pomme", w2="Aomori")
print(similarity)

similarity = model.wv.similarity(w1="pomme", w2="Anpanman")
print(similarity)

Puis 0.79041845 0.30861858 0.45321244 Sera retourné. Nous avons quantifié la similitude des mots w1 et w2. Aomori si vous dites pommes! Je pense que beaucoup de gens l'associent à Aomori, mais depuis que j'ai décidé qu'Anpanman est plus similaire à Aomori, je comprends que ce modèle n'est pas encore parfait.

Bien ici

"Roi" - "Homme" + "Femme" = "Reine" ???

Je vais considérer la fameuse proposition.

sample.py


sim_do = model.wv.most_similar(positive = ["Roi", "Femme"], negative=["Masculin"], topn=5)
print(*[" ".join([v, str("{:.5f}".format(s))]) for v, s in sim_do], sep="\n")

#Les mots positifs comparent le degré de similitude, les mots négatifs comparent le degré de dissimilarité

Le résultat est…

Princess 0.85313 Mariée 0.83918 Bête 0.83155 Sorcière 0.82982 Maiden 0.82356

J'ai eu une réponse similaire, même si elle ne correspondait pas exactement à la "reine".

Soit dit en passant, nous n'avons comparé que des mots jusqu'à présent, mais il est également possible de quantifier le type d'émotions qu'une phrase contient.

sample.py


import numpy as np
t = Tokenizer()
s = '
# Entrez vos phrases préférées.
'
output_data=[]
x = np.empty((0,4), float)
for token in t.tokenize(s):
  if token.part_of_speech.split(',')[0]=="nom" or token.part_of_speech.split(',')[0]=="adjectif":
    print(token.surface)
    similarity1 = model.wv.similarity(w1=token.surface, w2="heureux")
    #print("joie:{0}".format(similarity1))
    similarity2 = model.wv.similarity(w1=token.surface, w2="agréable")
    #print("chagrin:{0}".format(similarity2))
    similarity3 = model.wv.similarity(w1=token.surface, w2="triste")
    #print("anxiété:{0}".format(similarity3))
    similarity4 = model.wv.similarity(w1=token.surface, w2="excitation")
    #print("Intérêt:{0}".format(similarity4))
    x = np.append(x, np.array([[similarity1, similarity2, similarity3, similarity4]]), axis=0)

print("-"*30)
print(np.mean(x, axis=0))
print("Heureux:{0}".format(np.mean(x, axis=0)[0]))
print("facile:{0}".format(np.mean(x, axis=0)[1]))
print("Tristesse:{0}".format(np.mean(x, axis=0)[2]))
print("Xing:{0}".format(np.mean(x, axis=0)[3]))



Entrez votre phrase préférée dans la variable s Par exemple "J'ai fait une proposition dans un restaurant avec vue sur la nuit." Mettons une phrase romantique Le résultat est

Vue nocturne Restaurant proposer

[0.29473324 0.44027831 0.27123818 0.20060815]

Heureux: 0.29473323623339337 Facile: 0,4402783115704854 Triste: 0,27123818174004555 Xing: 0,20060815351704755

Sortira. Donc ce système "J'ai fait une proposition dans un restaurant avec vue sur la nuit." Est considérée comme une phrase «amusante». (Plus le nombre est élevé, plus la sensation est forte)

Puis un autre exemple "Un meurtre par arme à feu a eu lieu dans une prison à minuit." Mettons une phrase punpun aura très négative Puis

Minuit prison Pistolet de poing meurtre Incident

[-0.00661952 0.01671012 0.12141706 0.23172273] Heureux: -0.0006619524117559195 Amusement: 0.01671011543367058 Triste: 0,12141705807298422 Excitation: 0,2317227303981781

Par conséquent, En fait, la valeur peut prendre une valeur négative. Certes, je ne me sens pas heureux même un millimètre.

Impressions

C'est un moment merveilleux pour pouvoir analyser si facilement les émotions des phrases. Je suis profondément reconnaissant à Team Zet de m'avoir offert un lieu d'apprentissage aussi utile.

Recommended Posts

Analyse des émotions par Python (word2vec)
Analyse de données avec python 2
Analyse vocale par python
Analyse vocale par python
Analyse de données avec Python
[Python] Analyse morphologique avec MeCab
[Analyse de co-occurrence] Analyse de co-occurrence facile avec Python! [Python]
Analyse de squelette planaire avec Python
Analyse morphologique japonaise avec Python
Analyse des secousses musculaires avec Python
Analyse des émotions par SMS avec ML-Ask
Python2 + mot2vec
Analyse d'impédance (EIS) avec python [impedance.py]
Text mining avec Python ① Analyse morphologique
Analyse de données à partir de python (visualisation de données 1)
Analyse de régression logistique Self-made avec python
Analyse de données à partir de python (visualisation de données 2)
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
[Didacticiel d'analyse Python en base de données avec SQL Server 2017]
Analyse bidimensionnelle du flux de perméation saturée-insaturée avec Python
Grattage avec Python
Analyse de données python
Word2Vec avec BoUoW
Apprentissage automatique avec python (2) Analyse de régression simple
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
Analyse émotionnelle des tweets avec apprentissage en profondeur
avec syntaxe (Python)
Analyse des tweets avec Python, Mecab et CaboCha
Bingo avec python
Zundokokiyoshi avec python
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
Analyse de conduction thermique bidimensionnelle non stationnaire avec Python
Python: analyse morphologique simplifiée avec des expressions régulières
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
[Diverses analyses d'images avec plotly] Visualisation dynamique avec plotly [python, image]
Analyse d'images médicales avec Python 1 (Lire une image IRM avec SimpleITK)
Utiliser Python et word2vec (appris) avec Azure Databricks
Analyse statique du code Python avec GitLab CI
Analyse de régression LASSO facile avec Python (pas de théorie)
Analyse non linéaire géométrique du squelette élastique bidimensionnel avec Python
Communication série avec Python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Communication de socket avec Python
Python: analyse des séries chronologiques
Grattage en Python (préparation)
Essayez de gratter avec Python.