[PYTHON] [Word2vec] Lassen Sie uns das Ergebnis der Verarbeitung von Unternehmensbewertungen in natürlicher Sprache visualisieren

Einführung

Dieser Artikel ist eine Fortsetzung von [Job Change Conference] Versuchen Sie, Unternehmen zu klassifizieren, indem Sie Mundpropaganda in natürlicher Sprache mit word2vec verarbeiten.

Das letzte Mal schrieb ich, dass ich ähnliche Unternehmen und Wörter nachschlagen konnte, weil ich die Mundpropaganda des Jobwechsel-Meetings mit word2vec in natürlicher Sprache verarbeitet hatte, aber dieses Mal werde ich das Ergebnis visualisieren.

Hinweis

Wie ich im vorherigen Artikel schrieb, hatte diese Methode den Nachteil, dass "ich verstehe, dass Mundpropaganda über Überstunden spricht, aber ich weiß nicht, ob es mehr oder weniger gibt."

Diese Visualisierung hat den Fehler nicht behoben, daher hoffe ich, dass Sie sie als Visualisierungsbeispiel sehen können.

Auch das letzte Mal habe ich es in den Adventskalender des Unternehmens geschrieben, aber dieses Mal habe ich es als Einzelperson geschrieben, sodass der Inhalt dieses Artikels nichts mit den Ansichten der Organisation zu tun hat, zu der ich gehöre.

Mokuji

Was zu verwenden

Laden Sie das zuvor trainierte Modell

[Hier im vorherigen Artikel](http://qiita.com/naotaka1128/items/2c4551abfd40e43b0146#2-gensim-%E3%81%A7-doc2vec-%E3%81%AE%E3%83%A2%E3% Lesen Sie das Modell, das mit 83% 87% E3% 83% AB% E6% A7% 8B% E7% AF% 89 gespeichert wurde.

model = models.Doc2Vec.load('./data/doc2vec.model')

Mit Worten spielen ① Versuchen Sie, eine Verteilungskarte zu zeichnen

Ich habe die Methode zum Schreiben der Verteilungskarte wie folgt definiert.

Normalerweise wird die Vektordarstellung eines Wortes von einem Modell in 100 oder 300 Dimensionen trainiert. Die Visualisierung wird durchgeführt, nachdem sie dimensional komprimiert und in zwei Dimensionen verschoben wurde.

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

def draw_word_scatter(word, topn=30):
    """Eine Methode zum Zeichnen einer Verteilungskarte von Wörtern, die dem eingegebenen Wort ähnlich sind"""

    #Verwenden Sie die folgenden Funktionen von Gensim word2vec, um ähnliche Wörter zu finden
    # model.most_similar(word, topn=topn)
    words = [x[0] for x in sorted(model.most_similar(word, topn=topn))]
    words.append(word)

    #Finden Sie die Vektordarstellung jedes Wortes. Gensim am meisten_Basierend auf ähnlichen
    #Eine Methode, die einen Vektor von Wörtern zurückgibt(model.calc_vec)Ist definiert
    #Die Implementierung wird am Ende dieses Artikels beschrieben, da sie langwierig sein wird.
    vecs = [model.calc_vec(word) for word in words]

    #Verbreitungskarte
    draw_scatter_plot(vecs, words)

def draw_scatter_plot(vecs, tags, clusters)
    """Streudiagramm basierend auf dem Eingabevektor(Mit Etikett)Methode zum Zeichnen"""

    # Scikit-Die PCA-Dimensionsreduktion von Learn und ihre Visualisierung
    pca = PCA(n_components=2)
    coords = pca.fit_transform(vecs)

    #Visualisierung mit matplotlib
    fig, ax = plt.subplots()
    x = [v[0] for v in coords]
    y = [v[1] for v in coords]

    #Betrachten Sie den Cluster, wenn für jeden Punkt ein Cluster festgelegt ist
    #Fehlerbehandlung ist angemessen
    if clusters:
        ax.scatter(x, y, c=clusters)
    else:
        ax.scatter(x, y)

    for i, txt in enumerate(tags):
        ax.annotate(txt, (coords[i][0], coords[i][1]))
    plt.show()

Ich werde eine Verteilungskarte zeichnen, wenn ich bereit bin.

# "im Laufe der Zeit"Visualisieren Sie Wörter ähnlich wie
draw_word_scatter('im Laufe der Zeit', topn=40)
残業.png

Das Ergebnis konnte ich ohne Tränen nicht sehen.

Besonders miserabel ist der Bereich, in dem die morgendliche Rückkehr, der morgendliche, der letzte Zug und die Überstunden in der Mitte und etwas darüber liegen. Noch beängstigender ist, dass "Schlaf" am weitesten von der Gegend entfernt ist. Ich kann nicht anders, als die Melancholie des Gehaltsempfängers und die Gefahr des Todes durch Überarbeitung zu spüren ...

Ich bin ein bisschen einsam, also werde ich sogar positive Worte versuchen.

# "Lohnend"Visualisieren Sie Wörter ähnlich wie
draw_word_scatter('Lohnend')
やりがい.png

Es unterscheidet sich sehr von der vorherigen Verbreitungskarte ...! Es ist gut, stolz zu sein, zu belohnen und Träume zu geben. Übrigens suchen wir anerkannte Stipendiaten, die gemeinsam lohnende Arbeit leisten.

Mit Worten spielen ② Versuchen Sie, ein Dendrogramm zu zeichnen

Wenn Sie eine Website betreiben, möchten Sie möglicherweise Wörter gruppieren.

Persönlich denke ich, dass einer der Gründe, warum WELQ und MERY in der Suchmaschinenoptimierung überwältigend stark waren, der Einfluss einer ordnungsgemäßen Überlagerung von Tags und Gruppierungen war. Es kann auch für solche Dinge verwendet werden, und es wäre schön, die Zuflussschlüsselwörter automatisch in der Auflistung von Anzeigen zu klassifizieren und eine Zielseite zu erstellen.

Zeichnen wir hier ein Dendrogramm für die richtige Überlagerung und Gruppierung.

import pandas as pd
from scipy.spatial.distance import pdist
from scipy.cluster.hierarchy import linkage, dendrogram

def draw_similar_word_dendrogram(word, topn=30):
    """Eine Methode zum Zeichnen eines Dendrogramms von Wörtern, die dem eingegebenen Wort ähneln"""

    # draw_word_Gleich wie Streuung(Ich habe es redundant für den Qiita-Artikel geschrieben)
    words = [x[0] for x in sorted(model.most_similar(word, topn=topn))]
    words.append(word)
    vecs = [model.calc_vec(word) for word in words]

    #Visualisierung mit SciPy-Funktionen
    #Ich bezog mich auf den Code von Python Machine Learning Professional
    df = pd.DataFrame(vecs, index=words)
    row_clusters = linkage(pdist(df, metric='euclidean'), method='complete')
    dendrogram(row_clusters, labels=words)
    plt.show()

Ich werde es schreiben.

# "im Laufe der Zeit"Schreiben Sie ein Dendrogramm mit ähnlichen Wörtern wie
draw_similar_word_dendrogram('im Laufe der Zeit')
残業樹形図.png

Es tut mir leid, dass die Buchstaben des Wortes klein sind, aber ich konnte ein Dendrogramm so zeichnen, wie es war. Selbst hier sind die morgendliche Rückkehr, der Morgen und der letzte Zug offensichtlich aneinandergereiht. Geh früh nach Hause ...

Die Gruppierung kann durch Schneiden dieses Dendrogramms in einer geeigneten Höhe erfolgen.

Spielen Sie mit der Firma ① Versuchen Sie, eine Verteilungskarte zu zeichnen

Als nächstes zeichnen wir eine Verteilungskarte des Unternehmens.

Schreiben wir hier eine Verteilungskarte jedes Unternehmens aus der Mundpropaganda der ** Unternehmenskultur ** jedes Unternehmens **. Ziel ist es, ein Unternehmen mit einer ähnlichen Unternehmenskultur zu finden.

Verwenden Sie die Funktion infer_vector von Gensim Doc2Vec, wenn Sie die Vektordarstellung mit dem bereits erlernten Modell berechnen. Übrigens wurde diese Funktion neulich im Artikel kommentiert, aber ehrlich gesagt ist sie nicht sehr genau.

Ich denke jedoch, dass es kein großes Problem ist, verglichen mit dem Problem, dass word2vec in erster Linie an der Verarbeitung von Unternehmensbewertungen beteiligt ist, also verwende ich es so, wie es ist.

Berechnen Sie zunächst die Unternehmensvektordarstellung. Das Ziel war ein webbasiertes Unternehmen mit einer bestimmten Anzahl von Bewertungen oder mehr.

#Modell lesen
model = models.Doc2Vec.load('./data/doc2vec.model')

#Unternehmen,Lesen von Mundpropaganda-Daten aus der DB
companies = connect_mysql(QUERY_COMPANIES, DB_NAME)
reviews = connect_mysql(QUERY_COMPANY_CULTURE, DB_NAME)

#Morphologische Analyse von Mundpropaganda-Daten
# utils.Der Stamm enthält die Verarbeitung der morphologischen Analyse durch MeCab
words = [utils.stems(review) for review in reviews]

#Berechnen Sie die Vektordarstellung jedes Unternehmens aus Mundpropaganda-Daten
vecs = [models.Doc2Vec.infer_vector(model, word) for word in words]

Nachdem wir die Vektordarstellung berechnet haben, visualisieren wir sie.

#Visualisierung mit der oben definierten Methode
draw_scatter_plot(vecs, companies)
companies_without_clusters.png

Es ist überladen und schwer zu sehen, aber die Rekrutierungsserie steckt im oberen Teil fest, und Spielefirmen sind im unteren Teil versammelt.

Stimmt es jedoch, dass Glee und Mixy sich in ähnlichen Positionen befinden? Da es einige Stellen gibt, liegt möglicherweise ein Problem mit der Genauigkeit von word2vec und infer_vector sowie mit Verzerrungen vor, die den 100-dimensionalen Vektor in 2D zwingen.

Spielen Sie mit der Firma ② Versuchen Sie, unter Berücksichtigung der Clusterbildung eine Verteilungskarte zu zeichnen

Die oben gezeigte Verbreitungskarte war überladen und schwer zu sehen.

Es ist etwas einfacher zu erkennen, ob Sie Clustering durchführen und das Diagramm einfärben. Zeichnen Sie daher eine Verteilungskarte, nachdem Sie die Cluster der einzelnen Unternehmen gefunden haben.

import pandas as pd
from sklearn.cluster import KMeans

def kmeans_clustering(tags, vecs, n_clusters):
    """K Durchschnittsmethode Clustering-Methode"""
    km = KMeans(n_clusters=n_clusters,
                init='k-means++',
                n_init=20,
                max_iter=1000,
                tol=1e-04,
                random_state=0)
    clusters = km.fit_predict(vecs)
    return pd.DataFrame(clusters, index=tags)

Ausführung von Clustering und Visualisierung unter Berücksichtigung

#Die Anzahl der Cluster ist angemessen(Ich suchte nach einer vernünftigen Zahl nach der Ichiou-Ellbogenmethode)
clusters = kmeans_clustering(companies, vecs, 10)

#Zeichnen Sie die Verteilungskarte mit Clusterinformationen
draw_scatter_plot(vecs, companies, clusters)
companies_with_clusters.png

Ich frage mich, ob sich nicht viel ändert ... Es kann jedoch von Vorteil sein, die Verzerrung sehen zu können, die gewaltsam in zwei Dimensionen fallen gelassen wurde.

Auch Cookpad und DMM befinden sich in ähnlichen Positionen und verursachen wahrscheinlich Wellen, aber ich bin mir sicher, dass sie im Ebisu Garden Place zusammenleben. Es ähnelt also einem Geschäft, in dem Sie essen gehen, und ich denke, es wird eine ähnliche Unternehmenskultur haben. , Masu ... (schmerzhafte Entschuldigung)

Diesmal war die Visualisierung der Clusterbildung nicht gut, kann jedoch durch Ändern der Methode zur Dimensionskomprimierung in gewissem Maße verbessert werden. Es scheint sich zu lohnen, verschiedene Verbesserungen zu entwickeln, z. B. den PCA-Teil auf vielfältig zu ändern. TSNE von Scikit-learn.

Recommended Posts

[Word2vec] Lassen Sie uns das Ergebnis der Verarbeitung von Unternehmensbewertungen in natürlicher Sprache visualisieren
[Verarbeitung natürlicher Sprache] Ich habe versucht, die Bemerkungen jedes Mitglieds in der Slack-Community zu visualisieren
Verarbeiten Sie den Namen der Yugioh-Karte in natürlicher Sprache - Yugiou Data Science 2. NLP
Lernen Sie die Grundlagen der Dokumentklassifizierung durch Verarbeitung natürlicher Sprache, Themenmodell
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
Unerträgliche Aufmerksamkeitsmangel bei der Verarbeitung natürlicher Sprache
Python: Verarbeitung natürlicher Sprache
RNN_LSTM2 Verarbeitung natürlicher Sprache
Leistungsüberprüfung der Datenvorverarbeitung in der Verarbeitung natürlicher Sprache
Überblick über die Verarbeitung natürlicher Sprache und ihre Datenvorverarbeitung
Verarbeitung natürlicher Sprache (Originaldaten) mit Word2Vec, entwickelt von US-amerikanischen Google-Forschern
Visualisieren wir das Handelsvolumen der TSE-Aktien - jpxlab sample
Arten der Vorverarbeitung in der Verarbeitung natürlicher Sprache und ihre Leistungsfähigkeit
Sprachverarbeitung 100 Knocks-29: Holen Sie sich die URL des Flaggenbildes
■ [Google Colaboratory] Vorverarbeitung der Verarbeitung natürlicher Sprache & Janome
Stellen wir uns die Anzahl der mit Matplotlib mit dem Coronavirus infizierten Personen vor
Scraping das Ergebnis von "Schedule-Kun"
Lassen Sie uns GraphConvModel von DeepChem visualisieren
Verarbeitung natürlicher Sprache 3 Wortkontinuität
Visualisieren Sie die Flugbahn von Hayabusa 2
Verarbeitung natürlicher Sprache 2 Wortähnlichkeit
Ablauf des Ergebnisses der asynchronen Verarbeitung mit Django und Sellerie
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python
Warum ist der verteilte Ausdruck von Wörtern für die Verarbeitung natürlicher Sprache wichtig?
Studieren Sie die Verarbeitung natürlicher Sprache mit Kikagaku
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 4 Kommentar
Verarbeitung natürlicher Sprache für vielbeschäftigte Menschen
[Verarbeitung natürlicher Sprache] Vorverarbeitung mit Japanisch
Natürliche Sprache: Word2Vec Part3 - CBOW-Modell
Natürliche Sprache: Word2Vec Part1 - Japanischer Korpus
Künstliche Sprache Logivan und Verarbeitung natürlicher Sprache (Verarbeitung künstlicher Sprache)
Verarbeiten Sie das Ergebnis von% time,% timeit
100 Sprachverarbeitung Knock-59: Analyse der S-Formel
Vorbereitung zum Starten der Verarbeitung natürlicher Sprache
Installationszusammenfassung des Analysators für die Verarbeitung natürlicher Sprache
Visualisieren Sie den Antwortstatus der Volkszählung 2020
Lassen Sie uns den Gewinner des Bingo bestimmen
Natürliche Sprache: Word2Vec Part2 - Skip-Gramm-Modell
Zusammenfassung der Mehrprozessverarbeitung der Skriptsprache
Von der Einführung der GoogleCloudPlatform Natural Language API bis zur Verwendung
Einfaches Auffüllen von Daten, die in der Verarbeitung natürlicher Sprache verwendet werden können
Lassen Sie uns über die Tonkurve der Bildverarbeitung sprechen ~ LUT ist erstaunlich ~
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 3: Reguläre Ausdrücke 25-29]
Erstellt eine Chrome-Erweiterung, die die Möglichkeiten der Verarbeitung natürlicher Sprache nutzt, um dunkle Websites aus der Welt zu vertreiben