Emotionsanalyse von Python (word2vec)

Neulich nahm ich an einer Python-Lernsitzung teil, die von Team Zet Co., Ltd. gesponsert wurde. Das Thema dieses Mal ist "Text Emotionen mit word2vec" "Analyse". Um ehrlich zu sein, war es ein verrücktes Thema für mich, das Python vor einer Woche zum ersten Mal berührt hat, aber ich frage mich, ob es möglich ist, zu erfahren, wie die Grammatik, die ich lerne, gut genutzt wird. Ich eilte einen Tag vor der Veranstaltung herein und stieg ein.

Übrigens werde ich die Einführung in diesem Umfang verlassen und auf das Hauptthema eingehen.

Was ist Word2Vec überhaupt? ?? ??

Neuronales Netzwerkmodell (maschinelles Lernen), das Wörter analysiert. Einfach ausgedrückt, es scheint, dass Wörter vektorisiert und gewichtet werden können. (Weitere Informationen finden Sie unter hier)

Diesmal White Goat Corporation Ich habe das word2vec-Modell von verwendet.

Klicken Sie hier, um zu erfahren, wie Sie word2vec installieren (https://qiita.com/opankopan/items/2a999e0209504dca0a3f).

Als allererstes Stellen Sie sicher, dass die Wörter von word2vec vektorisiert sind. Geben Sie diesen Code mit implementiertem word2vec ein.

sample.py


import gensim.models.word2vec.Word2Vec as wv 

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

Dann

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)

Das Ergebnis wird zurückgegeben. Dies ist das Wort "Liebe", das aus 50 Dimensionen besteht. Es zeigt, dass die Komponente aus den oben genannten Elementen besteht.

Nächster

sample.py


#Extrahieren Sie Wörter ähnlich dem Schlüsselwort
sim_do = model.wv.most_similar(positive=["Freundin"], topn=30)
#Da es aufgelistet ist, ist es für eine einfache Anzeige geformt
print(*[" ".join([v, str("{:.5f}".format(s))]) for v, s in sim_do], sep="\n")

Wenn du schlägst Selbst 0.82959 Molly 0,82547 Er 0,82406 Sylvia 0,80452 Charlie 0,80336 Liebhaber 0,80197 Sie können Wörter mit ähnlichen Bedeutungen wie extrahieren. Die Zahl auf der rechten Seite des Wortes ist eine Quantifizierung, wie viel Sie mit dem Wort "sie" sind.

Auch wenn Sie wissen möchten, wie lang die beiden Wörter sind

similarity = model.wv.similarity(w1="Apfel", w2="Erdbeere")
print(similarity)

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

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

Dann 0.79041845 0.30861858 0.45321244 Wird zurückgegeben. Wir haben quantifiziert, wie ähnlich die Wörter w1 und w2 sind. Aomori wenn du Äpfel sagst! Ich denke, viele Leute verbinden es mit Aomori, aber da ich entschieden habe, dass Anpanman ähnlicher ist als Aomori, verstehe ich, dass dieses Modell noch nicht perfekt ist.

Gut hier

"König" - "Mann" + "Frau" = "Königin" ???

Ich werde den berühmten Vorschlag betrachten.

sample.py


sim_do = model.wv.most_similar(positive = ["König", "Weiblich"], negative=["männlich"], topn=5)
print(*[" ".join([v, str("{:.5f}".format(s))]) for v, s in sim_do], sep="\n")

#Positive Wörter vergleichen den Grad der Ähnlichkeit, negative Wörter vergleichen den Grad der Unähnlichkeit

Ergebnis ist…

Prinzessin 0,85313 Braut 0,83918 Biest 0,83155 Hexe 0.82982 Jungfrau 0,82356

Ich habe eine ähnliche Antwort erhalten, obwohl sie nicht genau zur "Königin" passte.

Übrigens haben wir bisher nur Wörter verglichen, aber es ist auch möglich zu quantifizieren, welche Art von Emotionen ein Satz enthält.

sample.py


import numpy as np
t = Tokenizer()
s = '
# Geben Sie Ihre Lieblingssätze ein.
'
output_data=[]
x = np.empty((0,4), float)
for token in t.tokenize(s):
  if token.part_of_speech.split(',')[0]=="Substantiv" or token.part_of_speech.split(',')[0]=="Adjektiv":
    print(token.surface)
    similarity1 = model.wv.similarity(w1=token.surface, w2="glücklich")
    #print("Freude:{0}".format(similarity1))
    similarity2 = model.wv.similarity(w1=token.surface, w2="angenehm")
    #print("Trauer:{0}".format(similarity2))
    similarity3 = model.wv.similarity(w1=token.surface, w2="traurig")
    #print("Angst:{0}".format(similarity3))
    similarity4 = model.wv.similarity(w1=token.surface, w2="Aufregung")
    #print("Interesse:{0}".format(similarity4))
    x = np.append(x, np.array([[similarity1, similarity2, similarity3, similarity4]]), axis=0)

print("-"*30)
print(np.mean(x, axis=0))
print("Glücklich:{0}".format(np.mean(x, axis=0)[0]))
print("einfach:{0}".format(np.mean(x, axis=0)[1]))
print("Traurigkeit:{0}".format(np.mean(x, axis=0)[2]))
print("Xing:{0}".format(np.mean(x, axis=0)[3]))



Geben Sie Ihren Lieblingssatz in die Variable s ein Als Beispiel "Ich habe einen Vorschlag in einem Restaurant mit Blick auf die Nacht gemacht." Lassen Sie uns einen romantischen Satz einfügen Ergebnis ist

Nachtsicht Restaurant vorschlagen

[0.29473324 0.44027831 0.27123818 0.20060815]

Glücklich: 0.29473323623339337 Einfach: 0,4402783115704854 Traurig: 0,27123818174004555 Xing: 0.20060815351704755

Wird rauskommen. Also dieses System "Ich habe einen Vorschlag in einem Restaurant mit Blick auf die Nacht gemacht." Wird als "lustiger" Satz beurteilt. (Je größer die Zahl, desto stärker das Gefühl)

Dann noch ein Beispiel "Ein Mord mit einer Faustwaffe ereignete sich um Mitternacht in einem Gefängnis." Lassen Sie uns einen sehr negativen Aura-Punpun-Satz einfügen Dann

Mitternacht Gefängnis Faustgewehr Mord Vorfall

[-0.00661952 0.01671012 0.12141706 0.23172273] Glücklich: -0.0006619524117559195 Spaß: 0.01671011543367058 Traurig: 0,12141705807298422 Aufregung: 0,2317227303981781

Als Ergebnis, Tatsächlich kann der Wert einen negativen Wert annehmen. Natürlich fühle ich mich nicht einmal einen Millimeter glücklich.

Impressionen

Es ist eine wunderbare Zeit, um die Emotionen von Sätzen so einfach analysieren zu können. Ich bin Team Zet zutiefst dankbar, dass es mir einen so nützlichen Lernort gegeben hat.

Recommended Posts

Emotionsanalyse von Python (word2vec)
Datenanalyse mit Python 2
Sprachanalyse mit Python
Sprachanalyse mit Python
Datenanalyse mit Python
[Python] Morphologische Analyse mit MeCab
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
Planare Skelettanalyse mit Python
Japanische morphologische Analyse mit Python
Muskel-Ruck-Analyse mit Python
Text Emotionsanalyse mit ML-Ask
Python2 + word2vec
Impedanzanalyse (EIS) mit Python [impedance.py]
Text Mining mit Python ① Morphologische Analyse
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Logistische Regressionsanalyse Selbst erstellt mit Python
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
[In-Database Python Analysis Tutorial mit SQL Server 2017]
Zweidimensionale Analyse des gesättigten und ungesättigten Permeationsflusses mit Python
Scraping mit Python
Datenanalyse Python
Word2Vec mit BoUoW
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
Emotionale Analyse von Tweets mit Deep Learning
mit Syntax (Python)
Tweet-Analyse mit Python, Mecab und CaboCha
Bingo mit Python
Zundokokiyoshi mit Python
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
Zweidimensionale instationäre Wärmeleitungsanalyse mit Python
Python: Vereinfachte morphologische Analyse mit regulären Ausdrücken
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
[Verschiedene Bildanalysen mit Plotly] Dynamische Visualisierung mit Plotly [Python, Bild]
Medizinische Bildanalyse mit Python 1 (MRT-Bild mit SimpleITK lesen)
Verwenden Sie Python und word2vec (gelernt) mit Azure Databricks
Statische Analyse von Python-Code mit GitLab CI
Einfache LASSO-Regressionsanalyse mit Python (keine Theorie)
Zweidimensionale geometrische nichtlineare Analyse des elastischen Skeletts mit Python
Serielle Kommunikation mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Python: Zeitreihenanalyse
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.