[PYTHON] Lernen Sie die Grundlagen der Dokumentklassifizierung durch Verarbeitung natürlicher Sprache, Themenmodell

Selbst in der natürlichen Sprache ist es heutzutage oft "tiefes Lernen", als ob Sie nach rohem Bier fragen würden. In der Tat kann Deep Learning oft eine hohe Genauigkeit aufzeichnen, aber in Wirklichkeit kann diese Genauigkeit sogar mit einem Basismodell aufgezeichnet und in einigen Fällen besiegt werden.

Dies geschah in einem Artikel von Deep Mind, einer bekannten Forschungseinrichtung.

machine-comprehension-11-638.jpg

In jüngster Zeit gab es Artikel wie Erreichen der höchsten Genauigkeit auch mit einem Modell, das häufig als Basis verwendet wird. Auf diese Weise kann selbst ein Modell, das als Grundlinie getreten wurde, nicht in einer unerwarteten Ecke platziert werden.

Dieses Mal werde ich das Themenmodell aufgreifen, das eine Art grundlegende Methode in der Verarbeitung natürlicher Sprache darstellt. Dies ist ein Modell für die Klassifizierung von Dokumenten, aber es ist auch ein sehr vielseitiges Modell, das verschiedene Annahmen enthalten kann, z. B. die Annahme der Existenz eines Autors bei der Klassifizierung von Dokumenten (Autorenthemenmodell).

Dieses Mal möchte ich den Mechanismus vorstellen und die Implementierungsmethode erläutern.

Was ist ein Themenmodell?

Das Themenmodell ist eine Art stochastisches Modell. Mit anderen Worten, wir schätzen die "Wahrscheinlichkeit des Auftretens" von etwas. Im Themenmodell ist dies die "Wahrscheinlichkeit, dass ein Wort in einem Satz erscheint". Wenn Sie dies gut einschätzen können, können Sie Sätze verstehen, in denen ähnliche Wörter vorkommen. Mit anderen Worten, das Themenmodell ist ein Modell, das die "Wahrscheinlichkeit des Auftretens von Wörtern in einem Dokument" schätzt.

Wenn ich das höre, denke ich außerdem, dass Sätze aus dem Themenmodell generiert werden können (Lernen der Erscheinungswahrscheinlichkeit von Wörtern), aber wie oben erwähnt, schätzt das Themenmodell die "Wahrscheinlichkeit des Erscheinens von Wörtern". Ja, Grammatikregeln interessieren mich nicht. Mit anderen Worten, das Themenmodell ist ein Modell, das sich auf Wörter in Sätzen und deren Häufigkeit konzentriert.

Wie sollen wir nun die "Wahrscheinlichkeit des Auftretens von Wörtern" schätzen? Kurz gesagt, es zählt die Wörter, die tatsächlich im Dokument erscheinen, und erstellt darauf basierend eine Schätzung. Das Themenmodell geht davon aus, dass die Art und Anzahl der angezeigten Wörter vom Thema abhängt (= Kategorie). Stellen Sie sich vor, dies ist eine natürliche Annahme, da die Wörter, die in den Themen Politik und darstellende Kunst vorkommen, unterschiedlich sind.

Das Modell ändert sich abhängig von der Einheit, in der dieses "Thema" existiert. In der folgenden Abbildung repräsentiert das quadratische Feld das Dokument und die Farbe seines Inhalts das Thema.

1.png

Mit anderen Worten, das diesmal eingeführte Themenmodell ist ein Modell mit den detailliertesten Annahmen. Unter der Annahme, dass das Dokument aus mehreren Themen besteht, ist es möglich, die Zusammensetzung des Dokuments abzuleiten, z. B. "Dieser Artikel besteht zu 70% aus Sport, zu 20% aus Unterhaltung ...", wodurch wir die Merkmale des Textes verstehen können. Sie können jedoch die Unterschiede zwischen Dokumenten quantitativ erfassen (dieses Dokument ist etwa 10% politischer als dieses Dokument usw.).

So implementieren Sie ein Themenmodell

Nun wollen wir sehen, wie das Themenmodell tatsächlich implementiert wird. Im Folgenden wird die Implementierung in Python vorausgesetzt.

Am einfachsten zu implementieren ist gensim. Wie es heißt "Themenmodellierung für Menschen", kann es in nur wenigen Zeilen implementiert werden.

Alternativ kann es in PyMC3 und PyStan implementiert werden. Beide PyMC / PyStan sind Bibliotheken zur Schätzung der Parameter statistischer Modelle, die als MCMC-Sampler bezeichnet werden. Natürlich müssen Sie das statistische Modell selbst erstellen. PyStan ist eine Schnittstelle für Python einer Bibliothek namens Stan, und Stan selbst kann auch von C ++ und R aus verwendet werden.

Wenn Sie es anpassen möchten, können Sie gensim verwenden, wenn Sie es einfacher machen möchten, und PyMC / PyStan, wenn Sie es anpassen möchten, indem Sie Ihr eigenes Modell erstellen (die Installation ist übrigens auch in dieser Reihenfolge problematisch). Dieses Mal möchte ich Gensim mit Schwerpunkt auf Benutzerfreundlichkeit verwenden. Von hier aus werde ich anhand des tatsächlichen Codes erklären. Der Erklärungscode befindet sich im folgenden Repository. Bitte beziehen Sie sich bei Bedarf darauf.

icoxfog417/gensim_notebook (Es wird ermutigend sein, wenn Sie mir einen Stern m (_ _) m geben)

Informationen zu den Umgebungseinstellungen bei der Entwicklung mit maschinellem Lernen mit Python finden Sie in hier. Einführung in die Verwendung eines Pakets namens Miniconda. Wenn Sie die Umgebung wie im obigen Artikel beschrieben erstellen, kann gensim auf einmal mit "conda install gensim" eingegeben werden (dasselbe gilt für PyMC. PyStan ist nicht so einfach einzugeben ...). Im obigen Repository wird iPython Notebook, ein Tool zum Erstellen von Dokumenten mit Python-Code, zum Erstellen erklärender Dokumente verwendet. Auf dieser Grundlage werden wir Folgendes erklären.

gensim_notebook/topic_model_evaluation.ipynb

Daten bekommen

Holen Sie sich zuerst die Zieldaten.

Die Daten für die Erstellung des Themenmodells wurden dieses Mal von Hot Pepper Beauty API von Recruit bereitgestellt. Die Motivation war, dass die Daten mir völlig unbekannt waren, also war ich neugierig, wie sie aussehen würden. Nehmen Sie eine neue Registrierung von der oben genannten Site vor und erhalten Sie einen API-Schlüssel. Sie können dann die Friseursalondaten herunterladen, indem Sie "scripts / download_data.py" im Repository ausführen.

Datenvorverarbeitung

Als nächstes verarbeiten Sie die Daten vor. Insbesondere wird ein Satz in einen Wort- / Vorkommenssatz konvertiert. Diese Menge wird als Korpus bezeichnet, und Wörter werden im Korpus durch IDs dargestellt. Die Verknüpfung zwischen dieser ID und dem eigentlichen Wort wird hier als Wörterbuch bezeichnet. Der Prozess zum Erstellen dieses Korpus / Wörterbuchs ist wie folgt.

  1. Zerlegen Sie Sätze in Wörter (morphologische Analyse) und zählen Sie sie
  2. Entfernen unnötiger Wörter (Entfernen von Stoppwörtern usw.)
  3. Vereinheitlichung von Wörtern (Stemming)

Das Aufteilen eines Satzes in Wörter wird auf Englisch durch ein Leerzeichen getrennt, auf Japanisch ist dies jedoch nicht so einfach. Daher ist es üblich, eine Bibliothek zu verwenden, die morphologische Analysen durchführen kann. MeCab ist als diese Bibliothek bekannt, und ein Wörterbuch namens mecab-ipadic-neologd, das neu auftretende Wörter registriert, wird ebenfalls bereitgestellt.

Insbesondere unter Windows ist die Installation jedoch mühsam. Daher halte ich es für gut, janome zu verwenden, das nur mit Python erstellt und einfach zu installieren ist. In dieser Probe wird keine morphologische Analyse unter Verwendung der obigen Bibliothek durchgeführt, so dass sie leicht ausgeführt werden kann. Da die "besonderen Bedingungen" in den Daten nur durch Schrägstriche getrennte Informationen waren, verwende ich sie separat.

b20fe2c916266f2ac4b38004755fe09c6ed349ff.png

Wenn Sie unnötige Wörter entfernen, müssen Sie Wörter entfernen, die Ihrer Meinung nach für die Klassifizierung nicht erforderlich sind. Insbesondere sind die Wörter wie folgt.

Und die Wörter zu vereinen bedeutet, Dinge zu vereinen, die sich nur in der Verwendungsform unterscheiden, wie "lecker" und "lecker". Dies nennt man Stemming.

Bei der Verarbeitung natürlicher Sprache ist es keine Übertreibung zu sagen, dass die Genauigkeit fast davon abhängt, wie viel diese Vorverarbeitung durchgeführt werden kann. Mit dem Skript scripts / make_corpus.py zum Erstellen eines Korpus können Sie die oben genannten Vorgänge mit verschiedenen Optionen ausführen. Probieren Sie daher verschiedene Einstellungen aus.

Erstellen eines Themenmodells

Wenn Sie einen Korpus und ein Wörterbuch haben, erstellen Sie ein darauf basierendes Modell. Mit gensim ist das Erstellen eines Modells jedoch nur eine Zeile.

m = models.LdaModel(corpus=corpus, id2word=dictionary, num_topics=3)

"Angenommen, wie viele Themen es gibt (num_topics)" muss festgelegt werden. Mit anderen Worten, Sie müssen schätzen, wie viele Themen wahrscheinlich im gesamten Dokument vorhanden sind (tatsächlich gibt es auch eine Methode namens Diricre-Prozess, mit der geschätzt wird, wie viele Themen gut sind).

Um zu überlegen, wie viele Sie festlegen sollten, müssen Sie das Modell bewerten.

Bewertung des Themenmodells

Um eine Bewertung vorzunehmen, wird der Korpus zunächst wie beim normalen maschinellen Lernen in Lernen und Bewertung unterteilt. Die Klassifizierung wird zum Lernen gelernt und als Ergebnis wird untersucht, ob die Bewertung (= unbekannter Satz) richtig klassifiziert werden kann.

Für diese Auswertung wird ein Index namens Ratlosigkeit verwendet. Die umgekehrte Anzahl der Ratlosigkeit gibt an, inwieweit das Auftreten eines Wortes in einem Dokument vorhergesagt werden kann. Der höchste Wert ist also 1, und der Wert wird größer, wenn das Modell weniger genau wird (2 Ziffern sind in Ordnung und die erste Hälfte von 3 Ziffern ist in Ordnung). Danach halte ich es für schlecht, und im Fall einer Ziffer ist es besser, das Modell und die Berechnungsmethode der Ratlosigkeit auf Fehler zu überprüfen.

In Teil des Themenmodells im Kommentar erstellen wird die Ratlosigkeit berechnet, während die Anzahl der Themen geändert wird. Überprüfen Sie dies. bitte versuche.

8d37f421f8271baea5c8e21d7d97a09e6c8fee12.png

Die Visualisierung des Themas erleichtert die Bewertung des Modells. Die Methode wird unten erklärt.

Abstand zwischen Themen

Da das Thema eine Klassifizierung von Sätzen ist, ist es besser, ohne Auslassung / Vervielfältigung zu klassifizieren, dh wenn es klar getrennt ist. Mit anderen Worten, es ist ein gutes Modell, einen angemessenen Abstand zwischen Themen und Klassifikationen zu haben.

Es gibt KL-Divergenz als Index, um den Abstand zwischen jeder Klassifizierung zu messen (= Wortverteilung jedes Themas). Auf diese Weise wird im Folgenden der Abstand zwischen Themen veranschaulicht (erstellt mit 3 Themen, der Achsenwert ist die Themennummer).

9fd51e91164caa900ad51bffb3d74c33adebf005.png

Die obige Abbildung ist ein schlechtes Beispiel. Je weiter die Themen entfernt sind, desto heller wird die Farbe. Die Tatsache, dass die gesamte Figur dunkel ist, bedeutet, dass ähnliche Themen (= Kategorien) aufgetreten sind. In diesem Fall sollten Sie die Anzahl der Themen reduzieren.

Themenstruktur von Sätzen

Wenn Sie Sätze tatsächlich klassifizieren, ist es besser, klar zu sagen, dass das Thema dieses Satzes xx ist. Mit anderen Worten, es ist besser, für jeden Satz ein klares Hauptthema zu haben.

Daher ist das Folgende eine Illustration der Themen, aus denen jeder Satz besteht (nach der obigen Überprüfung wurde die Anzahl der Themen auf 2 reduziert). 200 Dokumente werden zufällig ausgewählt und das Zusammensetzungsverhältnis der Themen in jedem Dokument wird angezeigt.

689a55fb7316f98fee7d97ef6576e0ea1879973d.png

Themenreferenz

Lassen Sie uns abschließend sehen, welche Wörter in den einzelnen Themen wahrscheinlich vorkommen. Die Wörter werden nicht zwischen Themen dupliziert, und es ist so gut, dass Sie aus einer Sammlung von Wörtern erraten können, um welche Art von Thema es sich handelt.

58fd2e84dfc244e44ab6a5acca61112906cfc2ce.png

Wenn man dies betrachtet, kann zumindest Thema Nr. 1 aus den Schlüsselwörtern "kleiner Salon" und "von einem Stylisten" als kleiner Salon abgeleitet werden (unter Berücksichtigung des Schlüsselworts "vollständiges Reservierungssystem" ist es hochklassig. Es kann ein Laden sein). Thema Nr. 0 hat den Eindruck, dass es sich um einen relativ großen Friseursalon mit vielen Mitarbeitern handelt, der das ganze Jahr über geöffnet ist. Wenn ich mir tatsächlich die Homepage des Friseursalons ansehe, habe ich das Gefühl, dass Thema Nr. 0 ein großes Gefühl hat und Thema Nr. 1 das Gefühl eines Fachgeschäfts.

Darüber hinaus wird eine Methode, mit der das System selbst die Merkmale von Daten erkennen und klassifizieren kann, ohne von einer Person wie einem Themenmodell unterrichtet zu werden, als unbeaufsichtigtes Lernen bezeichnet (umgekehrt eine Methode, mit der Daten und ihre Klassifizierung als Satz trainiert werden). Wird betreutes Lernen genannt). Während diese Art des unbeaufsichtigten Lernens den Vorteil hat, dass es sofort gestartet werden kann, wenn Daten vorliegen, gibt es auch den Nachteil, dass es schwierig ist, die Ergebnisse zu interpretieren, da ** "wie zu klassifizieren" dem Modell wie oben beschrieben * überlassen bleibt. *.

Anwendung zu Anwendung

Auf diese Weise können Sie mit gensim auf einfache Weise ein Themenmodell erstellen, die Eigenschaften von Sätzen erfassen und klassifizieren. Wenn ich dies auf die Anwendung anwende, denke ich, dass die folgenden Funktionen implementiert werden können.

Wie eingangs erwähnt, ist das Themenmodell ein sehr vielseitiges Modell, daher gibt es viele Entwicklungen.

Insbesondere gibt es ein Korrespondenzthemenmodell, mit dem Sie neben Textinformationen wie Rezensionen zusätzliche Informationen wie Bewertungsindizes berücksichtigen können, und ein Autorenthemenmodell, das den Autor berücksichtigt, der den Text geschrieben hat. Modell) usw. Es wurden auch Versuche unternommen, die Bildklassifizierung anzupassen, indem Bildmerkmale wie Wörter behandelt wurden (dies ermöglicht die gleichzeitige Verarbeitung von Text und Bildern, sodass Bilder automatisch begrenzt werden. Es wird angewendet, um Anmerkungen zu recherchieren usw.).

Ich hoffe, dieser Kommentar hilft Ihnen dabei, Ihre Ideen in Form zu bringen.

Verweise

Hier sind einige nützliche Bücher / Artikel für diejenigen, die mehr wissen wollen.

In den folgenden Artikeln werden grundlegende Ideen wie die Wahrscheinlichkeit sorgfältig erläutert.

Wenn Sie es mit PyMC implementieren möchten, ist dieses Tutorial hilfreich.

Recommended Posts

Lernen Sie die Grundlagen der Dokumentklassifizierung durch Verarbeitung natürlicher Sprache, Themenmodell
Pokemon-Klassifizierung nach Themenmodell
Natürliche Sprache: Doc2Vec Part2 --Dokumentklassifizierung
Lernen Sie die Grundlagen von Python ① Grundlegende Anfänger
Bewerten Sie die Genauigkeit des Lernmodells durch einen Kreuztest von scikit learn
[Word2vec] Lassen Sie uns das Ergebnis der Verarbeitung von Unternehmensbewertungen in natürlicher Sprache visualisieren
Lernen Sie noch einmal die Grundlagen von Theano
[Linux] Lernen Sie die Grundlagen von Shell-Befehlen
Lassen Sie die COTOHA-API die schwierigen Dinge tun - Einführung in das "Lernen mit" der Verarbeitung natürlicher Sprache -
[Pyro] Statistische Modellierung mit der probabilistischen Programmiersprache Pyro ~ Verteiltes Analysemodell, normales lineares Modell ~
Python: Tiefes Lernen in der Verarbeitung natürlicher Sprache: Grundlagen
Unerträgliche Aufmerksamkeitsmangel bei der Verarbeitung natürlicher Sprache
Bildverarbeitung durch Matrix Basics & Contents-Reinventor der Python-Bildverarbeitung-
Modell unter Verwendung eines Faltungsnetzwerks in der Verarbeitung natürlicher Sprache
Leistungsüberprüfung der Datenvorverarbeitung in der Verarbeitung natürlicher Sprache
Ich habe die einfachste Methode zur Klassifizierung von Dokumenten mit mehreren Etiketten ausprobiert
Überblick über die Verarbeitung natürlicher Sprache und ihre Datenvorverarbeitung
Python: Verarbeitung natürlicher Sprache
RNN_LSTM2 Verarbeitung natürlicher Sprache
[Verarbeitung natürlicher Sprache] Ich habe versucht, die Bemerkungen jedes Mitglieds in der Slack-Community zu visualisieren
Verarbeitung natürlicher Sprache (Originaldaten) mit Word2Vec, entwickelt von US-amerikanischen Google-Forschern
Arten der Vorverarbeitung in der Verarbeitung natürlicher Sprache und ihre Leistungsfähigkeit
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 2 Grundlagen des UNIX-Befehls (zweite Hälfte)
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren
100 Sprachverarbeitung Knock-42: Anzeige der Phrase der betroffenen Person und der betroffenen Person
Sprachverarbeitung 100 Knocks-29: Holen Sie sich die URL des Flaggenbildes
■ [Google Colaboratory] Vorverarbeitung der Verarbeitung natürlicher Sprache & Janome
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 2 Grundlagen des UNIX-Befehls (erste Hälfte)
Analysieren Sie das Themenmodell, mit GensimPy3 Romanautor zu werden
(Erhaltene Version) Verarbeitung natürlicher Sprache Liste der Artikel, die Kleinkinder zuerst von Team AI lesen sollten
Sprachvorhersagemodell von TensorFlow
Verarbeitung natürlicher Sprache 1 Morphologische Analyse
Lernen mit dem Lehrer 1 Grundlagen des Lernens mit dem Lehrer (Klassifizierung)
Verarbeitung natürlicher Sprache 3 Wortkontinuität
Verarbeitung natürlicher Sprache 2 Wortähnlichkeit
Japanische Verarbeitung natürlicher Sprache mit Python3 (4) Emotionsanalyse durch logistische Regression
Erstellen Sie mit BERT + LightGBM + optuna ganz einfach ein Modell für die Verarbeitung natürlicher Sprache
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?
Python x GIS-Grundlagen (1)
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 2 Grundlagen des UNIX-Befehls (zweite Hälfte)
Python x GIS-Grundlagen (3)
Grundlagen von Python x GIS (Teil 2)
Verstehen Sie den "temporären" Teil von UNIX / Linux
Visualisieren Sie das charakteristische Vokabular eines Dokuments mit D3.js.
Visualisieren Sie die Flugbahn von Hayabusa 2
Visualisieren Sie den Antwortstatus der Volkszählung 2020
Lernen Sie die Grundlagen der Dokumentklassifizierung durch Verarbeitung natürlicher Sprache, Themenmodell
[Python] Visualisieren Sie die von Wireshark erfassten Informationen
Visualisieren Sie den Grenzwert des mehrschichtigen Perzeptrons
Visualisieren Sie die Auswirkungen von Deep Learning / Regularisierung
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Visualisieren Sie die Exportdaten des Piyo-Protokolls