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.
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.
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