[PYTHON] Generieren Sie automatisch ein Polarwörterbuch für die Emotionsanalyse

Einführung

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.

Referenz

Ich habe beim Lernen von Fasttext Folgendes erwähnt.

Was ist Emotionsanalyse?

Zusammenfassung der Emotionsanalyse

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.

Methode der Emotionsanalyse

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.

Polaritätswörterbuch

Über das Polaritätswörterbuch

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.

Herausforderungen in der emotionalen Analyse

Es gibt nur wenige polare Wörterbücher, die bequem verwendet werden können

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.

Sehr mühsam zu stimmen

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.

Lösen der oben genannten Probleme

Automatische Generierung des Polaritätswörterbuchs mit Fasttext

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

Automatische Generierung des Polaritätswörterbuchs

Übersicht über das automatisch generierte Programm

Ich habe ein Programm zur automatischen Generierung des Polarwörterbuchs mit dem folgenden Mechanismus erstellt.

  1. Geben Sie in der Dokumentgruppe, die Sie als negativ oder positiv beurteilen möchten, mehrere ** "sehr positive Wörter" ** und ** "sehr negative Wörter" ** an.
  2. Unter Verwendung des Fasttext-Modells, das die japanische Wikipedia-Seite vollständig gelernt hat, wird der Ähnlichkeitsdurchschnitt mit den obigen ** "sehr positiven Wörtern" ** und ** "sehr negativ" für die morphologischen Elemente in jedem Satz ermittelt Messen Sie den durchschnittlichen Ähnlichkeitsgrad mit "Wörtern" **.
  3. Nehmen Sie die Polarität mit der höheren durchschnittlichen Ähnlichkeit an. Wenn es "positiv" ist, wird der Ähnlichkeitswert so verwendet, wie er ist, und wenn er "negativ" ist, wird ein Minus hinzugefügt, um ihn zur negativen / positiven Bewertung des morphologischen Elements zu machen.
  4. Konvertieren Sie die Bewertungsskala aller Wörter von -1 in 1, um das Polaritätswörterbuch zu vervollständigen.

Implementierung eines automatischen Programms zur Generierung von Polaritätswörterbüchern

Über schnellen Text

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!

Automatische Beurteilung von negativem / positivem Grad

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

Programm zur automatischen Generierung des Polarwörterbuchs

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.

スクリーンショット 2019-12-07 8.51.39.png

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.

スクリーンショット 2019-12-07 8.58.11.png

Klicken Sie hier, um die ** Positive Word Top 20 ** des vom obigen Programm erstellten Polaritätswörterbuchs anzuzeigen.

スクリーンショット 2019-12-07 9.00.54.png

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

Generieren Sie automatisch ein Polarwörterbuch für die Emotionsanalyse
EDT für ECHONET-Nachricht automatisch generieren
Metaklasse (delete) zum Generieren eines Wörterbuchs
Verwenden wir eine Skriptsprache für ein komfortables C ++ - Leben. 2 Generieren Sie automatisch eine C ++ - Quelle
Erstellen Sie ein Hatena-Wörterbuch für SKK (zusätzlich)
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Bereiten Sie eine Programmiersprachenumgebung für die Datenanalyse vor
Generieren Sie ein MeCab-Wörterbuch aus Nico Nico Encyclopedia-Daten
Astro: Häufig verwendete Python-Module / -Funktionen zur Analyse
Ich habe ein Tool erstellt, um automatisch ein Zustandsübergangsdiagramm zu generieren, das sowohl für die Webentwicklung als auch für die Anwendungsentwicklung verwendet werden kann