Analysieren von Zeichenfolgendaten im neuronalen Netzwerk?


28

Ich fange gerade an zu lernen, wie ein neuronales Netzwerk Muster erkennt und Eingaben kategorisiert, und ich habe gesehen, wie ein künstliches neuronales Netzwerk Bilddaten analysieren und die Bilder kategorisieren kann ( Demo mit convnetjs ) und den Schlüssel dort wird das Bild heruntergemustert und jedes Pixel stimuliert ein Eingangsneuron in das Netzwerk.

Ich versuche jedoch, den Kopf herumzureißen, wenn dies mit Zeichenfolgen möglich ist. Der Anwendungsfall, den ich habe, ist eine "Empfehlungsmaschine" für Filme, die ein Benutzer gesehen hat. Filme haben viele String-Daten (Titel, Handlung, Tags), und ich könnte mir vorstellen, den Text auf ein paar Schlüsselwörter herunterzusampeln, die den Film beschreiben Denken Sie, ich brauche Eingabe-Neuronen für jedes englische Wort, um eine Reihe von Filmen zu vergleichen? Ich könnte die Eingabe-Neuronen nur auf die Wörter beschränken, die im Set verwendet werden, aber könnte es dann wachsen / lernen, indem neue Filme hinzugefügt werden (Benutzer sieht sich einen neuen Film mit neuen Wörtern an)? Die meisten Bibliotheken, die ich gesehen habe, erlauben es nicht, neue Neuronen hinzuzufügen, nachdem das System trainiert wurde?

Gibt es eine Standardmethode zum Zuordnen von Zeichenfolgen-, Wort- und Zeichendaten zu Eingaben in ein neuronales Netzwerk? Oder ist ein neuronales Netzwerk wirklich nicht das richtige Werkzeug zum Analysieren von Zeichenfolgendaten (was ist ein besseres Werkzeug für den Mustervergleich in Zeichenfolgendaten)?

Antworten:


19

Die Verwendung eines neuronalen Netzes zur Vorhersage von Daten in natürlicher Sprache kann eine schwierige Aufgabe sein, es gibt jedoch bewährte Methoden, um dies zu ermöglichen.

Im Feld "Natural Language Processing" (NLP) wird Text häufig mit dem Modell "Bag of Words" dargestellt. Mit anderen Worten, Sie haben einen Vektor der Länge n , wobei n die Anzahl der Wörter in Ihrem Vokabular ist und jedes Wort einem Element im Vektor entspricht. Um Text in numerische Daten umzuwandeln, zählen Sie einfach die Anzahl der Vorkommen jedes Wortes und platzieren diesen Wert am Index des Vektors, der dem Wort entspricht. Wikipedia kann diesen Konvertierungsprozess hervorragend beschreiben. Da die Länge des Vektors festgelegt ist, ist es schwierig, mit neuen Wörtern umzugehen, die keinem Index zugeordnet sind. Es gibt jedoch Möglichkeiten, dieses Problem zu verringern ( Hashing von Nachschlagefunktionen ).

Diese Darstellungsmethode hat viele Nachteile - sie bewahrt nicht die Beziehung zwischen benachbarten Wörtern und führt zu sehr spärlichen Vektoren. Ein Blick auf n-Gramm hilft, das Problem der Beibehaltung von Wortbeziehungen zu beheben, aber konzentrieren wir uns zunächst auf das zweite Problem, die Sparsamkeit.

Es ist schwierig, direkt mit diesen spärlichen Vektoren umzugehen (viele lineare Algebra-Bibliotheken können mit spärlichen Eingaben nur schlecht umgehen). Daher ist der nächste Schritt häufig die Reduzierung der Dimensionalität. Hierzu können wir auf das Gebiet der Themenmodellierung verweisen : Techniken wie Latent Dirichlet Allocation (LDA) und Latent Semantic Analysis (LSA) ermöglichen die Komprimierung dieser spärlichen Vektoren in dichte Vektoren, indem ein Dokument als eine Kombination von Themen dargestellt wird. Sie können die Anzahl der verwendeten Themen und damit die Größe des von LDA oder LSA erzeugten Ausgabevektors festlegen. Durch diesen Vorgang der Dimensionsreduzierung wird die Größe des Eingabevektors drastisch reduziert, während versucht wird, eine minimale Informationsmenge zu verlieren.

Schließlich können Sie nach all diesen Konvertierungen die Ausgaben des Themenmodellierungsprozesses in die Eingaben Ihres neuronalen Netzwerks einspeisen.


1
Lassen Sie mich wissen, wenn Sie weitere Fragen haben, und ich werde mein Bestes tun, um weitere Details bereitzustellen.
Madison

Danke, das gibt mir ein paar gute Bedingungen, mit denen ich weiter forschen kann!
MidnightLightning

Im Übrigen kann ich mich auf "Feature-Hashing" beziehen, da dies einem Bloom-Filter sehr ähnlich zu sein scheint , mit dem ich aus der Arbeit mit Kryptowährungscode vertraut bin. Ich frage mich, ob es effektiver ist, wenn eine Hash-Funktion ein Eingabe-Feature auf mehrere Indexpositionen bezieht (Bloom-Filter-Stil), als eine zweite Hash-Funktion zum Setzen des Vorzeichens eines Indexes zu benötigen ...
MidnightLightning

6

Sowohl die Antworten von @Emre als auch von @Madison können gute Argumente für das vorliegende Problem liefern. Das Problem besteht darin, Ihre Zeichenfolge als Merkmalsvektor für die Eingabe in den NN darzustellen.

Erstens hängt das Problem von der Größe der Zeichenfolge ab, die Sie verarbeiten möchten. Lange Zeichenfolgen, die möglicherweise Tokens (normalerweise Wörter) enthalten, werden in dieser Einstellung häufig als Dokumente bezeichnet. Es gibt separate Methoden für den Umgang mit einzelnen Token / Wörtern.

Es gibt verschiedene Möglichkeiten, Dokumente darzustellen. Viele von ihnen gehen von einem Wortschwall aus. Die einfachsten Typen repräsentieren das Dokument als Vektor der Wortanzahl oder der Termhäufigkeit (tf). Um die Auswirkungen der Dokumentlänge auszuschließen, wird normalerweise die Anzahl der Dokumente, in denen ein Begriff vorkommt, als Dokumenthäufigkeit ( tf-idf ) angegeben.

Ein weiterer Ansatz ist die Themenmodellierung, bei der eine latente Darstellung der Daten in einer niedrigeren Dimension erlernt wird. LDA und LSI / LSA sind typische Auswahlmöglichkeiten, es ist jedoch wichtig, sich daran zu erinnern, dass dies nicht überwacht wird. Die erlernte Darstellung ist nicht unbedingt ideal für das betreute Lernen, das Sie mit Ihrem NN durchführen. Wenn Sie Themenmodelle erstellen möchten, können Sie auch betreute Themenmodelle ausprobieren .

Für einzelne Wörter können Sie word2vec verwenden , das NNs verwendet , um Wörter in einen Raum beliebiger Größe einzubetten. Die Ähnlichkeit zwischen zwei Wortvektoren in diesem erlernten Raum entspricht tendenziell der semantischen Ähnlichkeit.

Ein jüngerer Zeit Pionierarbeit Ansatz ist , dass der Absatz Vektoren , die zunächst ein word2vec artigen Wortmodell lernt, dann auf dieser Darstellung bildet eine verteilte Darstellung von Sätzen von Wörtern (Dokumente jeder Größe) zu lernen. Dies hat in vielen Anwendungen den Stand der Technik gezeigt.

Bei der Verwendung von NNs in NLP werden häufig unterschiedliche Architekturen verwendet, z. B. wiederkehrende neuronale Netze (z. B. Langzeit-Kurzzeitspeicher- Netze). In einigen Fällen haben Leute sogar Faltungsneuronale Netze für Text verwendet.


Ich denke, word2Vec ist wirklich die genaueste Antwort auf die Frage. Es gibt ein wirklich nettes Kaggle-Tutorial zum Trainieren und Verwenden: kaggle.com/c/word2vec-nlp-tutorial/details/part-2-word-vectors
jagartner

Danke, ich habe den word2vec-Link vergessen. Ich werde einen hinzufügen (zusätzlich zu dem, den Sie hier
auflisten

3

Hierbei handelt es sich nicht um neuronale Netze an sich, sondern um die Darstellung von Textdaten beim maschinellen Lernen. Sie können die Filme, die Besetzung und das Thema als kategoriale Variablen darstellen. Die Handlung ist komplizierter; Sie würden wahrscheinlich wollen Thema Modell für das, aber ich würde das auslassen , bis man den Dreh Dinge. Es führt genau das von Ihnen erwähnte "Downsampling" durch.

In diesem Tutorial erfahren Sie, wie Sie kategoriale Variablen für neuronale Netze codieren. Und viel Glück!


Erwähnenswert ist, dass dies nicht ausdrücklich ein Problem beim gesamten maschinellen Lernen ist, sondern nur ein Problem beim Erzeugen von Merkmalsvektoren, die beim maschinellen Lernen nicht allgegenwärtig sind.
Slater Victoroff

Welche Art von maschinellem Lernen verwendet keine Funktionen?
Emre

Random Forest ist ein gutes Beispiel für etwas, für das das Abrufen eines Merkmalsvektors, wie er in neuronalen Netzen angezeigt wird, kein Problem darstellt. Viele unbeaufsichtigte Methoden arbeiten auch mit Rohwörtern und nicht mit Merkmalsvektoren. Hinweis: Ich habe nicht gesagt, dass es Methoden gibt, die keine Features verwenden, nur dass es Methoden gibt, die nicht auf streng strukturierten Vektoren beruhen.
Slater Victoroff

Ich weiß nicht, was Sie mit "streng strukturiert" meinen.
Emre

Streng strukturiert ist ein 1d-Vektor von unint8 im Gegensatz zu einer Liste, die ein Wörterbuch, eine Gewichtsmatrix und eine Reihe von Zeichenfolgen enthält
Slater Victoroff

0

Ich habe die folgenden zwei Möglichkeiten für die Trial-n-Test-Implementierung neuronaler Netze mit Text ausprobiert. Letzteres funktioniert ziemlich gut, aber mit Einschränkungen.

  1. Erstellen Sie Vokabeln mit word2vect oder NLTK / custom word tokens und weisen Sie jedem Wort einen Index zu. Es ist dieser Index, der das Wort als Zahl darstellt.

    Herausforderungen:

    • Die Indizes müssen mithilfe der Feature-Skalierung "normalisiert" werden.
    • Wenn die Ausgabe des neuronalen Netzwerks nur geringfügige Abweichungen aufweist, kann die Ausgabe ein Index für ein unerwartetes Wort sein (z. B. wenn die erwartete Ausgabe 250 ist, aber NN 249 oder 251 ausgibt, kann es sich um eine nahe Ausgabe aus dem numerischen Kontext handeln; aber Sie sind Indizes zu verschiedenen Wörtern. Wiederkehrende NN zur Erzeugung des Ausgabeindex können hier genutzt werden.
    • Wenn dem Vokabular neue Wörter hinzugefügt werden, sollten die Token-Indizes neu skaliert werden. Das mit zuvor skalierten Werten trainierte Modell kann ungültig werden und muss neu trainiert werden.
  2. Identitätsmatrix verwenden, z. B. für "n" Wörter "nx n" oder (n-1 x n-1) Matrix verwenden, wobei jede Zeile und Spalte ein Wort darstellt. Setzen Sie "1" in die Kreuzungszelle und "0" in die Ruhepositionen. ( Referenz )

    Herausforderungen:

    • Jeder Eingabe- und Ausgabewert ist ein "nx 1" -Vektor. Für ein großes Vokabular ist es eine sperrige und langsamere Berechnung.
    • Wenn dem Vokabular neue Wörter hinzugefügt werden, sollte die Identitätsmatrix (dh der Wortvektor) neu berechnet werden. Das mit zuvor berechneten Vektoren trainierte Modell kann ungültig werden und muss neu trainiert werden.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.