[PYTHON] Analysieren Sie die Mundpropaganda-Daten von Karriere-Change-Meetings mithilfe von Deep Learning emotional

Da dies ein Adventskalender-Artikel ist, der den Namen des Unternehmens entlehnt, werden wir uns mit dem Material befassen, das sich auf das Unternehmen bezieht.

(Einführung) Über Job Change Conference

Livesense betreibt eine Jobwechselkonferenz, eine Website, auf der die Reputationsprüfungen von Unternehmen durch Jobwechsler und tägliche Bewertungen von Unternehmen veröffentlicht werden.

Bisher wurden beim Jobwechsel-Meeting die Textdaten der Mundpropaganda und die aus 5 Stufen bestehenden Score-Daten als separate Daten erfasst. Bei der kürzlich erfolgten Erneuerung können jedoch die Score- und Textdaten gleichzeitig veröffentlicht werden, wodurch die Mundpropaganda leichter lesbar wird Es ist jetzt möglich, bereitzustellen.

Bewertungen vor der Erneuerung veröffentlicht Bewertungen nach der Erneuerung veröffentlicht
<img src="https://qiita-image-store.s3.amazonaws.com/0/7307/680fd65f-5b4f-6919-0ab7-b53163d3d0eb.png "before.png " width="400">

Hier war ein Gefühl der Herausforderung zu spüren

Obwohl neu veröffentlichte Bewertungen aufgrund ihrer Punktzahl leichter zu lesen sind, enthält die große Anzahl der in der Vergangenheit gesammelten Beiträge natürlich keine fünfstufigen Bewertungsdaten, und es ist nicht möglich, ein Gesichtssymbol so anzuzeigen, wie es ist.

Wenn dieses Problem jedoch behoben ist und ** frühere Bewertungen auch leichter zu lesen sind, sollte es eine bessere Website sein! ** **.

Ich beschloss, das Problem zu lösen.

Auf der Suche nach einem Anfang. Untersuchen Sie die Methode

Bei der Untersuchung scheint dieses Problem als Emotionsanalyse bezeichnet zu werden (außer Reputationsanalyse, Stimmungsanalyse oder Stimmungsklassifizierung).

Darüber hinaus kann das Verfahren grob in das Folgende unterteilt werden.

Methode 1: Methode unter Verwendung eines Emotionswörterbuchs

Die Methode, die das Emotionswörterbuch verwendet, ist eine einfache Logik. Wenn beispielsweise "Überstunden" negativ sind und "keine Überstunden" abgebrochen werden, wird dies als positiv bewertet. Es wurde jedoch bald schwierig.

Es gab nicht viel Überstunden

Im obigen Fall scheint es beispielsweise nicht möglich zu sein, das Problem nur durch die Zusammenarbeit mit Chochoi zu lösen, und es war notwendig, verschiedene Muster zu berücksichtigen. Darüber hinaus scheint es, dass ein solcher Ausdruck häufig verwendet wird, wahrscheinlich aufgrund der Art der Mundpropaganda für den Jobwechsel. .. ..

Ich kam auf den Punkt und gab diese Methode früh auf

Methode 2: Methode des maschinellen Lernens

Unbekannte Bereiche wie maschinelles Lernen und tiefes Lernen. Persönlich war ich völlig unwissend und es schien schwierig zu sein, aber ich war auch daran interessiert, also beschloss ich, diese Methode zu erforschen.

Informieren Sie sich über Emotionsanalyse durch maschinelles Lernen

Von dem Punkt an, an dem ich nur lose Kenntnisse hatte, als ich mit weiteren Untersuchungen fortfuhr, indem ich mich auf das Wort "Stimmungsanalyse" stützte, fand ich die folgenden Dinge.

――Retroaktives neuronales Netzwerk (RNN) scheint gut für den Umgang mit Sätzen zu sein. ―― Unter ihnen neigt LSTM dazu, die Genauigkeit zu verbessern.

(Hauptthema von hier) Führen Sie eine Emotionsanalyse mit LSTM durch

Dieses Mal verwenden wir Beispiel mit Theano, um mit der Überprüfung fortzufahren.

(Zur Verwendung ist Hinweise zum Lesen des Codes ein separater Artikel. Wenn Sie interessiert sind, lesen Sie bitte diesen Artikel.)

Merkmale der Trainingsdaten und Problemstellung

Eigenschaften von Trainingsdaten

Die Mundpropaganda-Daten des Karrierewechsel-Meetings, die dieses Mal als Lerndaten verwendet werden sollen, weisen die folgenden Merkmale für eine Mundpropaganda auf.

--Score Daten

Problemstellung

Stellen Sie das Problem basierend auf den bisherigen Ergebnissen erneut wie folgt ein.

Erstellen Sie ein Modell, das beurteilen kann, ob der geschriebene Mundpropaganda-Text positiv oder negativ ist

Ursprünglich würde ich gerne eine 5-Grad-Bewertung gemäß den Daten anstreben, aber es scheint, dass der Schwierigkeitsgrad immer noch hoch ist, also werde ich es diesmal nicht tun.

Auch dieses Mal werde ich versuchen, basierend auf einem groben Gefühl, also Annahmen und Annahmen, dass Sätze mit niedrigen Punktzahlen "negativ" und Sätze mit hohen Punktzahlen "positiv" sind. Und weiter.

Datenaufbereitung

Zur Datenaufbereitung werden wir mit solchen Vorbereitungen fortfahren

Versuchen Sie vorerst, es als Probe zu verschieben.

Bewegen Sie sich, wenn die Daten bereit sind. Standardmäßig dauert es sehr lange, daher schien es besser, die Anzahl der ausgeblendeten Ebenen entsprechend anzupassen.

Versuchen Sie es mit einem einfachen Skript

Nachdem Sie eine Weile gewartet haben und das Modell gebaut ist, werfen Sie vorerst ein einfaches Wort und versuchen Sie, es zum Laufen zu bringen.

Wenn Sie sich "pred_probs ()" in Zeile 400 von Learning Script ansehen, können Sie sich darauf beziehen, wenn Sie mit einem trainierten Modell überprüfen möchten. Da so etwas wie "Yo" geschrieben ist, überprüfen Sie es mit einem kleinen Skript, das darauf verweist.

negaposi.py


model = numpy.load("lstm_model.npz")
tparams = lstm.init_tparams(model)

(use_noise, x, mask, y, f_pred_prob, f_pred, cost) = lstm.build_model(tparams, 
    #Wenn Sie diese Option nicht aktivieren, erhalten Sie einen KeyError.
    'encoder': 'lstm',
    'dim_proj': 128,
    'use_dropout': True,
})

#Minimale Vereinfachung
def pred_probs(f_pred_prob, sentence):
    probs = numpy.zeros((1, 2)).astype(config.floatX)
    x, mask, _y = imdb.prepare_data([sentence],
                              1, #Dummy. Geeignet, weil es nicht verwendet wird.
                              maxlen=None)
    return f_pred_prob(x, mask)[0]

#Eingabe, die jede Zeichenfolge digitalisiert
sentences = [
    {
        "data": [27, 72, 104, 150, 19, 8, 106, 23],
        "text": "Es ist eine sehr gute Firma"
    },
    {
        "data": [27, 72, 104, 402, 121, 73, 8, 106, 23],
        "text": "Es ist eine sehr schlechte Gesellschaft."
    }
]

for sentence in sentences:
    result = pred_probs(f_pred_prob, sentence["data"])
    print "==="
    print result
    print sentence["text"], ("is positive" if (result[0] < result[1]) else "is negative")

Lauf

% python sample.py
===
input:Es ist eine sehr gute Firma=> [27, 72, 104, 150, 19, 8, 106, 23]
output: [ 0.06803907  0.93196093]
Sehr gute Gesellschaft ist positiv
===
input:Es ist eine sehr schlechte Gesellschaft.=> [27, 72, 104, 402, 121, 73, 8, 106, 23]
output: [ 0.73581125  0.26418875]
Das schlimmste Unternehmen ist negativ

Irgendwie kam es so heraus. Es ist wunderbar. Die Ausgabe ist das Ergebnis des Durchlaufens von LSTM, und es scheint, dass die Wahrscheinlichkeit jeder Klasse zurückgegeben wird.

Ich hatte das Gefühl, ich könnte gehen, also werde ich mit der weiteren Überprüfung fortfahren.

Testergebnisse

Schauen wir uns das Ausführungsergebnis genauer an, während wir mit verschiedenen Parametern spielen. Vorläufig schienen die Ergebnisse von dim_proj = 8 (versteckte Schicht) und validFreq = 30 (Überprüfungshäufigkeit) diesmal als solche gut zu sein.

Übergang der Fehlerrate

Das diesmal ausgeführte Skript zeichnet den Fehlerübergang zwischen den Verifizierungsdaten und den Testdaten auf. Es scheint, dass dies der Übergang ist.

Da eine Epoche um das 2600-Update abgeschlossen ist, wodurch die Überprüfungsdaten abgeschlossen sind, scheint der Fehler danach zu schrumpfen.

Außerdem wird im Trainingsskript das frühe Anhalten ausgeführt, sodass Sie sehen können, dass es mäßig angehalten wird, bevor eine Überanpassung auftritt.

Ergebnisanalyse der Testdaten

Bei der Überprüfung beträgt die Fehlerrate der Testdaten am Ende etwa 0,2 bis 0,3, sodass wir eine korrekte Antwortrate von etwa 70 bis 80% erwarten können.

Werfen wir einen Blick auf die als Test verwendeten Daten, um festzustellen, ob dies wirklich der Fall ist.

Siehe die Verteilung der Punktzahlen und die Klassifizierung der Emotionen

Wenn Sie die zuvor verwendete negaposi.py erweitern, die Testproben nach negativ / positiv klassifizieren und die Verteilung der einzelnen Proben erhalten, sieht es so aus

Ergebnis negative(%) positive(%)
★ 1 Bewertung 84.34 15.66
★ 2 Bewertungen 66.53 33.47
★ 3 Bewertungen 45.07 54.93
★ 4 Bewertungen 25.77 74.23
★ 5 Bewertungen 27.59 72.41

Sie können so etwas sehen

Erhielt das Überprüfungsergebnis

――Ergebnis: Es fühlt sich nach Erfolg an

――Wenn Sie darüber nachdenken, die Genauigkeit etwas weiter zu verbessern, scheint dies möglich zu sein. ――Wird die Genauigkeit verbessert, wenn Sie Informationen wie Alter und Branche eingrenzen?

Impressionen

»Während ich nachforschte, war es" Ich verstehe überhaupt nicht ... ", aber wenn ich es versuchte, während ich es bewegte, fand ich es oft heraus. ――Es ist wichtig, es vorerst zu versuchen ――Wenn ich Deep Learning zu dem Zeitpunkt las, als alle Dinge, die ich nicht verstand, erschöpft waren, fühlte ich, dass mein Gehirn voll war und es eine große Hilfe war. Es war. »Ich hatte ein paar Tage lang Probleme, aber in vielerlei Hinsicht konnte ich die Lächerlichkeit der Welt des maschinellen Lernens spüren. ――Potential, dass es nicht seltsam sein wird, selbst wenn es in einigen Jahren ein Pflichtfach für Ingenieure wird

Recommended Posts

Analysieren Sie die Mundpropaganda-Daten von Karriere-Change-Meetings mithilfe von Deep Learning emotional
Emotionale Analyse von Tweets mit Deep Learning
Empfehlung zur Datenanalyse mit MessagePack
Emotionale Analyse umfangreicher Tweet-Daten durch NLTK
Aktienkursprognose mit Deep Learning [Datenerfassung]
[Python] [Word] [python-docx] Einfache Analyse von Diff-Daten mit Python
Sammlung und Automatisierung erotischer Bilder durch Deep Learning
Datenanalyse mit xarray
Deep Learning 1 Übung des Deep Learning
Untersuchung der Austauschprognosemethode mit Deep Learning und Wavelet-Konvertierung - Teil 2-
Klassifizieren Sie CIFAR-10-Bilddatensätze mithilfe verschiedener Modelle des Deep Learning
Deep Running 2 Tuning von Deep Learning
Lernnotizen zur Python-Datenanalyse
Datenanalyse mit Python-Pandas
Tiefes Lernen der Verstärkung 2 Implementierung des Lernens der Verstärkung
[Erkennung von Anomalien] Versuchen Sie es mit der neuesten Methode des Fernunterrichts