Es ist der 7. Tag des "Adventskalenders 2019 zur Verarbeitung natürlicher Sprache". Ich hatte ein Problem in dem Artikel "Den negativen / positiven Grad von Nachrichtenartikeln durch Emotionsanalyse bewerten", ** "Viele polare Wörterbücher, die verwendet werden können". Ich habe versucht, "Kein Problem" zu lösen **. Dieses Mal werden wir versuchen, automatisch ein Polaritätswörterbuch mit Fasttext zu generieren.
Ich habe beim Lernen von Fasttext Folgendes erwähnt.
Die Emotionsanalyse ist eine Methode zur Analyse der Emotionen verschiedener Textinformationen mithilfe von Text Mining- und maschinellen Lerntechniken. Eine einachsige Analyse von positiv oder negativ ist der orthodoxste Eindruck, aber es gibt einige, die sich mit einer detaillierteren Analyse von Emotionen befassen.
Die gebräuchlichste Methode zur Emotionsanalyse ist ** die Konzentration auf die in einem Satz enthaltenen Wörter **, die auf der Idee basiert, dass positive (negative) Sätze bestimmte Wörter enthalten sollten. Eine Liste solcher spezifischen Wörter wird als ** Polarwörterbuch ** bezeichnet, und dieses Polarwörterbuch wird in dieser emotionalen Analyse verwendet.
Ein polares Wörterbuch ist ein ** Wörterbuch mit semantischen Flags wie "positiv" und "negativ" für jedes Wort oder jeden Begriff **. Einige sind einfach Flags wie "positiv" und "negativ", während andere positive und negative Grade als diskrete Bewertungszahlen erhalten.
Ich habe nach verschiedenen polaren Wörterbüchern gesucht, weil ich Emotionen analysieren wollte, aber es gab nur die folgenden zwei polaren Wörterbücher, die ich tatsächlich verwenden konnte. Word Emotion Polarity Correspondence Table zeigt die diskreten Werte von negativ und positiv (-1 bis 1) für eine große Anzahl von Wörtern. Es ist sehr praktisch, weil es gegeben wird (im Bereich von), aber es ist nicht für den kommerziellen Gebrauch verfügbar.
Selbst wenn Sie sagen, dass Sie jedem Wort einen Wert für den Grad des Negativen / Positiven zuweisen **, sollte das Wort in Abhängigkeit vom zu analysierenden Objekt, dem Kontext und dem Gesichtspunkt der Durchführung einer negativen / positiven Inversion als positiv oder negativ reflektiert werden? Ist anders. ** Daher sollte das Polaritätswörterbuch vollständig auf die jeweilige Aufgabe abgestimmt sein, dies erfordert jedoch viel Zeit.
Als Lösung für das oben genannte Problem möchte ich ein Programm erstellen, das einfach und automatisch ein Polarwörterbuch generieren kann und einfach zu optimieren ist. ** ** **
Ich habe ein Programm zur automatischen Generierung des Polarwörterbuchs mit dem folgenden Mechanismus erstellt.
Dieses Mal wird Fasttext verwendet, um die Ähnlichkeit zwischen Wörtern zu messen. Ich habe es auch mit Word2vec verglichen, aber Fasttext scheint widerstandsfähiger gegen Gegenwörter zu sein, deshalb habe ich Fasttext gewählt. Ich habe das Fasttext-Modell von Grund auf neu erstellt, aber ich habe 300 Stunden gebraucht, um es zu lernen ... Einige Leute haben das trainierte Modell veröffentlicht (ich habe das trainierte Modell von fastText veröffentlicht usw. ) Grundsätzlich denke ich, dass es kein Problem gibt, es zu benutzen.
Es gibt auch Leute, die gerade über Fasttext im Adventskalender geschrieben haben, also schauen Sie bitte mal rein. Verwenden wir den verteilten Ausdruck von Wörtern schnell mit fastText!
Erstellen Sie zunächst ein Programm, das den Grad der Negativität / Positivität eines bestimmten Wortes bestimmt.
import gensim
#Laden Sie ein Fasttext-Modell
model = gensim.models.KeyedVectors.load_word2vec_format('./wikimodel_20191102.bin', binary=True)
#Geben Sie willkürlich "sehr positive Wörter" und "sehr negative Wörter" an.
posi_list = ['Ausgezeichnet', 'gut','Jubeln','loben', 'Herzliche Glückwünsche','Clever','gut', 'Geeignet','Tensei',
'feiern', 'Leistung','vergeben','glücklich','Freude','Witz und Intelligenz','Toku', 'Talent','Toll','aromatisch','Ehre',
'Angemessen','Anbetung','Hilfe','Ich ziehe mich zurück','Shimizu','Majestätisch','Sortiment','Glücklicherweise','Glückverheißendes Zeichen','übertreffen']
nega_list = ['Schlecht', 'sterben', 'krank', 'furchtbar', 'Schwören', 'Einweichen', 'Niedrig',
'Arm', 'leiden', 'schmerzlich', 'Anfügen', 'Streng', 'schwer', 'töten', 'hart', 'Rau',
'grausam', 'Schuld', 'Feind', 'Ungehorsam', 'Verspottung', 'Leiden', 'Würzig', 'Einsam', 'Bestrafung', 'Untreu',
'Kalt', 'wertlos', 'Es tut uns leid']
def posi_nega_score(x):
#Beurteilung von positivem Grad
posi = []
for i in posi_list:
try:
n = model.similarity(i, x)
posi.append(n)
except:
continue
try:
posi_mean = sum(posi)/len(posi)
except:
posi_mean = 0
#Beurteilung von negativem Grad
nega = []
for i in nega_list:
try:
n = model.similarity(i, x)
nega.append(n)
except:
continue
try:
nega_mean = sum(nega)/len(nega)
except:
nega_mean = 0
if posi_mean > nega_mean:
return posi_mean
if nega_mean > posi_mean:
return -nega_mean
else:
return 0
Wenn Sie das obige Programm verwenden, um das Negative / Positive eines Wortes zu beurteilen, sieht es so aus.
print(posi_nega_score('Exzellenz'))
0.2679512406197878
print(posi_nega_score('Unangenehm'))
-0.2425743742631032
Dieses Mal verwenden wir "Livedoor News Corpus" für den Datensatz. Einzelheiten zum Datensatz und zur Methode der morphologischen Analyse finden Sie unter Veröffentlicht im zuvor veröffentlichten Artikel. Ich werde. Das Ergebnis der morphologischen Analyse wird so ausgegeben.
Basierend auf diesen Daten wird ein Polaritätswörterbuch generiert.
import pandas as pd
ddf = pd.read_csv('news_word.csv')
#Weisen Sie jedem Wort eine Punktzahl zu
ddf['Ergebnis'] = ddf['Wort'].apply(lambda x : posi_nega_score(x))
import numpy as np
#Gegebene Punktzahl-Stellen Sie 1 bis 1 ein
score = np.array(ddf['Ergebnis'])
score_std = (score - score.min())/(score.max() - score.min())
score_scaled = score_std * (1 - (-1)) + (-1)
ddf['Ergebnis'] = score_scaled
Klicken Sie hier, um die ** Negative Word Top 20 ** des vom obigen Programm erstellten Polaritätswörterbuchs anzuzeigen.
Klicken Sie hier, um die ** Positive Word Top 20 ** des vom obigen Programm erstellten Polaritätswörterbuchs anzuzeigen.
Sie können sehen, dass solche Wörter richtig eingehen. Es gibt einige Wörter, die nicht als negative oder positive Wörter angegeben sind, daher denke ich, dass die Genauigkeit relativ gut ist.
Next Danke, dass du bis zum Ende zugesehen hast. Es war mein erstes Mal, dass ich am "Adventskalender" teilgenommen habe, aber ich möchte weiterhin aktiv daran teilnehmen. Morgen ist oumugai mori! !!
Recommended Posts