LingPipe Einzelwertzerlegung Tutorial
SVD als Faktorisierung
SVD als Least Squares Approximation
SVD für Matrices mit unbekannten Werten
Anwendungen von SVD
Latent Semantic Analysis
Das Original und die meisten gut bekannte Anwendung des SVD in der Verarbeitung natürlicher Sprache hat für latente semantische Analyse (LSA) ist. LSA ist eine Anwendung der SVD verkleinerter Ordnung, in der die Zeilen der Eingangsmatrix Wörter und die Spalten-Dokumente darstellen, mit Einträgen, die Zählung der Wörter in dem Dokument ist. Die Singulärvektoren und Singulär correspdoning durch SVD erzeugt Werte erlauben Wörter und Dokumente in den gleichen „latent semantischen Raum“ abgebildet werden. Die sich ergebende Einbettung Orte ähnliche Wörter und Dokumente, gemessen durch gleichzeitige Auftreten in der Nähe von einander, auch wenn sie im Trainingskorpus zusammen kam nie.
Latent Semantic Indexing
SVD für Gesamtwertung
Latent Semantic Indexing ist wirklich nur eine einfache Klassifizierung Problem, bei dem jedes Dokument eine eigene Kategorie ist, die Trainingsdaten für die Kategorie wird der Text aus dem Dokument extrahiert und wo Abfragen sind nur Texte zu klassifizieren.
SVD für Clustering und Funktionen
Aufgrund der einfachen Vektordarstellungen von Begriffen und Dokumente produziert von SVD SVD (sowie PCA) wurde für das Clustering weit verbreitet.
SVD für Collaborative Filtering
Außerhalb der streng linguistischer Anwendungen hat SVD für Collaborative Filtering, vor allem im Zusammenhang mit dem Netflix Prize Wettbewerb verwendet. In diesem Zusammenhang stellen Zeilen stellen Benutzer und Spalten Filme. Die Noten, die vorhanden sind Bewertungen von Nutzern für Filme bereitgestellt (auf einer Skala 1-5 integer). Der Wettbewerb beinhaltet Erraten Bewertungen für Filme ein Benutzer nicht bewertet wurde; das heißt, die unbekannten Werte und rechnete.
Definition von SVD
Die Wiederholung Ourselves
wobei U eine m × k-Matrix ist, V ein n × k-Matrix ist und S ak × k Matrix, wobei k der Rang der Matrix A ist die Multiplikation (*) ist eine Matrixmultiplikation und das hochgestellte T anzeigt Matrixtrans .
Singuläre Vektoren: Ein Orthonormalbasis
Die m-dimensionalen Vektoren, die die Spalten von U bilden, sind linke Singulärvektoren genannt, wohingegen der n -dimesnional Vektoren, die die Spalten von V bildet, wird rechte Singulärvektoren genannt.
Der Satz von linken und rechten Satz von singulären Vektoren ist orthonormal (das heißt, sowohl orthogonal und normal). Normalitäts bedeutet, dass jeder singulärer Vektor ist die Einheitslänge (Länge 1). Ein Satz von Vektoren wird gesagt, dass sie orthogonal, wenn jedes Paar von Vektoren in dem Satz orthogonal ist; erinnern, daß Vektoren orthogonal ist, wenn und nur wenn ihr Produkt (äquivalente Cosinus) Null (0). Orthogonalität, dass jedes Paar von linken Singulärvektoren ist, die richtigen singulären Vektoren auch orthonormal sind, die Längeneinheit und paarweise orthogonal sind.
Singuläre Werte: Faktor Gewichtung
Die Werte auf der Diagonalen von S sind die singulären Werte genannt. Die Kombination aus der q-ten singulären Vektor, rechte Singulärvektor und Singulärwert belassen wird als Faktor bekannt. Die Singulärwerte bestimmen die relative Bedeutung der Abmessungen und sind in nicht aufsteigender Reihenfolge angeordnet sind:
Einzigartigkeit
Die Implementierung SVD Matrices
Berechnen von Werten
Bei der Implementierung der Matrix com.aliasi.matrix.SVDMatrix Schnittstelle com.aliasi.matrix.Matrix. die skalierten Zeilen und Spaltenvektoren werden gespeichert. Zum Beispiel, hier ist der Wert der i-ten Zeilenvektor nach durch die Quadratwurzel der singulären Werte Skalierung:
Zeit- und Platzbedarf
Somit wird ein Wert aus einem SVD-Matrix der Ordnung k Extraktion erfordert k Multiplikationen und Additionen.
Der Stauraum für eine SVD Darstellung einer Matrix von mxn Dimensionalität der Ordnung k erforderlich ist (n + m) * k Doppelwerte (von acht Bytes pro Stück).
Latent Semantic Analysis and Indexing
Das Ausführen des Demo
Um das Beispiel auszuführen, rufen Sie einfach die Ant-Ziel lsi.
Wir erklären die gesamte Ausgabe produziert, wie wir den Code zu gehen und eine kurze Erklärung, wie Latent Semantic Indexing funktioniert durch SVD.
Term-Dokument-Matrix
LSI beginnt mit einem Begriff-Dokument-Matrix. Die folgenden 9 Dokumente sind Titel von technischen Berichten. Wir haben die Freiheit von Umnummerierung sie 0-8 genommen.
Die Zählung eines Begriffs in einem Dokument ist hier nur die rohe Häufigkeitszählung. mit inverser Dokumentenhäufigkeit und dämpfte mit Quadratwurzeln oder einloggt Anwendungen von SVD werden diese zählen oft gewichtet.
Der Code für unsere LSI Demo kann in der Datei src / Lsi.java finden. Weil wir nur mit der Erstellung der einzelnen Beispiel sind, ist es recht kompakt.
Der Code beginnt mit der Begriff-Dokument-Matrix zu definieren und die Anordnung von Begriffen und Dokumenten selbst:
Es gibt eine Reihe für jeden Begriff, mit den Spalten durch die Dokument-ID (0 bis 8) indexiert. Die Begriffe und Begriff-Dokument-Matrix würde offensichtlich aus den Dokumenten in einer allgemeinen Anwendung berechnet werden. Hier haben wir nur kopiert Deerwester et al. 'S-Matrix in eine Datenstruktur von Hand. Wir verwenden nur den Begriff Array und Dokumenten-Array für die Anzeige.
Wir drucken die Ausgangsvektoren für den zweidimensionalen SVD wir berechnet haben. Die Singulärwerte, linke Singulärvektoren und rechten Singulärwerte werden aus dem SVD-Matrix extrahiert:
Wir haben nicht den Code hier wiederholen Sie diese Felder zu drucken, aber hier ist es, was die Demo-Programm aus:
Beachten Sie, dass diese Darstellung deutlich macht, wie die Begriffe und Dokumente gegossen werden in den gleichen k-dimensionalen Raum zum Vergleich. Dies wird oft der latente semantische Raum. Zum Vergleich sind die Abmessungen von ihren entsprechenden Singulärwerten skaliert. Wir könnten zum Beispiel verwenden, um diese Vektoren für Clustering Begriffe, Clustering von Dokumenten oder Begriffe zu Dokumenten.
Als nächstes betrachten wir die Suchkomponente von Latent Semantic Indexing. Abfragen werden, indem sie den Schwerpunkt des Begriff Vektoren berechnet die Bedingungen in der Abfrage entspricht. Zum Beispiel Deerwester et al. Verwenden Sie die Abfrage „Mensch-Computer-Interaktion“ zur Veranschaulichung, und wir wiederholen ihr Beispiel hier. Nur die Begriffe „Mensch“ und „Computer“ angezeigt. Der Schwerpunktes des berechneten punktuellen, durch Addition des Wertes in jeder Dimension:
Diese wird dann abgeglichen gegen den Dokumentenvektoren die Skalierung durch die Singulärwerte bereitgestellt Verwendung mit folgendem Ergebnis:
Wie von Deerwester et al festgestellt. Dokument 2 und Dokument 4, von denen keiner eine der Suchbegriffe enthalten, Score relativ hoch. Dies ist b eil zweite Ordnung Beziehungen zwischen Begriffen, wie der Begriff „Benutzer“ in den dazugehörigen Dokumenten, die zeigen werden. Wenn wir den Abfragevektor an Bedingungen anzupassen waren, haben wir die folgenden verwandten Suchbegriffen erhalten:
Beachten Sie, dass die Abfrage „Mensch-Computer-Interaktion“ liefert Begriffe „Mensch“ und „Computer“, die beide ziemlich nahe sich auf die Anfrage gerichtet werden, die der Schwerpunkt der Vektoren für „Mensch“ und „Schnittstelle“. Noch interessanter ist, Begriffe wie „Schnittstelle“ und „System“ sind auch in der Nähe der Abfrage in latent semantischen Raum.
Wir durchlaufen gerade durch die Argumente und die Indizierung relativ suchen. Hier ist die Suchmethode:
Der Code findet zuerst die Bedingungen, indem Sie auf Leerzeichen oder Komma zu splitten. Er initialisiert dann die Abfrage Vektor die Anzahl der Dimensionen in dem latenten semantischen Raum, das heißt, die Anzahl der Faktoren in dem SVD zu sein. Es wiederholt sich dann über die Bedingungen und fügt ihre Begriffsvektoren auf die Abfrage Vektor. Der Zusatz ist mit brutalen Gewalt getan, in der Liste der Bedingungen für den Begriff sucht und dann das Hinzufügen seines Vektor wenn gefunden. Wenn der Begriff nicht in der Anordnung der Begriffe gefunden wird, wird es ignoriert.
Schließlich wird der Abfragevektor gedruckt (wir nicht wiederholen, dass Code) und dann erzielte gegen die Dokumenten- und Begriffsvektoren:
Skalarprodukt berechnet wird, um die Waage gegen wie folgt:
Es ist üblich, das Skalarprodukt Maß der Ähnlichkeit mit einer Kosinus Ordnung zu ersetzen. Das würde wie folgt aussehen:
Cosinus-basierte Spielstände sind wie folgt (mit Skalarprodukt-Scores in Pars der Einfachheit halber wiedergegeben):
Und das ist es. Eine komplette Demo-Implementierung von Latent Semantic Indexing in wenigen Zeilen Code.
Komplette Matrix SVD
Die API eingerichtet ist, um eine einfache Berechnung von SVD für eine vollständige Matrix zu ermöglichen, das heißt, eine, wo jeder Wert bekannt ist. Es gibt einen einzigen Methodenaufruf, aber das Verfahren erfordert eine ganze Reihe von ziemlich empfindlich Argumenten, die Auswirkungen davon werden wir versuchen, in diesem Abschnitt zu erläutern. Bevor das zu tun, lassen Sie uns ein Beispiel aufstehen und laufen.
Vollständiger SVD für Token Bigramme
Für unsere erste Übung werden wir einfach in Bigramm zählt in Textdaten suchen. Bigramm-Zählungen sind asymmetrisch; zum Beispiel „der“ tritt viel häufiger als „die von“ auf Englisch.
Replizieren Gorrell
Herunterladen von Stolz und Vorurteil
Das Ausführen des Demo
Ausgeführt von Ant
Parameter Bericht
Das erste, was das Programm tut, ist über alle Parameter berichten. Andere als die Dateinamen, werden diese in das Programm fest einprogrammiert und hier der Einfachheit halber berichtet.
Faktor- und Epoch-Level Report
Ihre Ergebnisse variieren
Ergebnisse: Factors
Zwei Negatives einen positiven
den SVD, unsere Demo-Programm Berichte über die Einzelwerte und Vektoren Nach der Berechnung wird gefunden. Gorrell Papier folgenden berichten wir singulären Werte zusammen mit den größten und kleinsten Werte in der linken und rechten singulären Vektoren. Diese werden durch das Token bezeichnet. Hier ist der Bericht zum ersten Faktor:
Der erste singuläre Wert ist 985, die für diesen Korpus sehr hoch ist, wo die durchschnittlichen Zählungen recht niedrig sind. Dieses besagt, dass der erste Faktor hoch zählt bietet mit ersten Worten „von“, „auf“, „in“ und „und“ und mit zweiten Worten wie „die“, „sie“ und „sein“ Bigramme.
Nachfolgende Faktoren sind erforderlich, um die erste Dimension orthogonal sein. Sie sind auch Einzelwerte zu haben, die gleich groß oder kleiner als bisherige Faktoren erforderlich. Hier ist der zweite Faktor Bericht:
Beachten Sie, dass es nicht nur positive Zählungen für gute Bigrams fügt hinzu, wie „sie hatte“, aber positive Zählungen schlecht Bigrams wie „sie sein“. Denken Sie daran, dies ist nur eine Annäherung, und es wird von der kleinsten Quadrate angetrieben wird, nicht linguistischen Theorie.
Interessant ist zu beachten, dass es große negative Dimensionen in diesem Faktor. Aber denken Sie daran, die Zeichen. Diese Werte werden reduzieren Schätzungen für Bigramme wie „Ich habe sie“ und „für war“, aber tatsächlich zählt in Fällen erhöhen, in denen beide Werte negativ sind, wie „in seinem“.
Hier ist der dritte Faktor (erinnern wir uns von Null zählen):
Ergebnisse: Wiederaufbau
Schließlich, nur mit den drei Faktoren, hier ist, wie gut die ursprünglichen Werte für die Token Paare rekonstruiert werden mit der höchsten zählt in den Trainingsdaten:
Der Nachlass des Autors von Vom Wind verweht verklagt Projekt Gutenberg das Buch von Project Gutenberg von Australien (PGA) zu entfernen, wo das Buch im public domain ist. Hier ist der donwload Link von PGA:
- Vom Wind verweht von Gutenberg Australien
Beachten Sie, dass einige Bigrams genau rekonstruiert werden, während andere Art und Weise ausgeschaltet sind. Beachten Sie, dass quadratische Fehler der Metrik ist. Zum Beispiel ist die ursprüngliche Zahl „zu sein“ 436, das rekonstruierte Zahl beträgt 393, so ist der Unterschied 436-393 = 43, für einen Beitrag zum quadratischen Fehler von 43 * 43 = 1849 (man erinnere mich dies durch die Zahl geteilt wird die Positionen in der Matrix mittlere quadratische Fehler, um zu bestimmen, ist die Quadratwurzel von denen einer als RMSE in der Epoche Berichte).
Der Vergleich mit Gorrell der Ergebnisse
Gorrell begann mit einer Matrix von Bigramm zählt ebenso wie wir. Aber sie normalisiert die Vektoren zu einer Wahrscheinlichkeitsskala. Hier ist ihr Bericht der Top-Abmessungen der ersten zwei Faktoren ab:
Beachten Sie, dass diese eine gewisse Ähnlichkeit mit unseren Ergebnissen tragen, die hier in ähnlicher Form wiederholt werden:
Inspizieren des Kodex
Der Code für den SVD zu erzeugen ist recht einfach. Der größte Teil der Arbeit in I / O als es nur einen Methodenaufruf für SVD. Hier ist die Top-Level-Befehl Implementierung von src / TokenBigramSvd.java.
Die erste Charge von Code hier extrahiert einfach eine Matrix von Bigramm zählt aus der angegebenen Textdatei und ordnet sie die variablen Werten. Dies erfordert eine tokenizer Fabrik. Wie es funktioniert, füllt es die Bigramm-Extraktor A zu den Dimensionen der Matrix Abbilden der Token Symboltabelle; dies wird später für die Ausgabe Berichterstattung orientiert, aber sonst nicht ins Spiel in der SVD-Berechnung kommt.
Die zweite Gruppe von Anweisungen setzt einfach alle Parameter für den Lauf. In Kürze werden wir dies im Detail erklären.
Weiter ist die tatsächliche SVD-Berechnung, die durch einen Aufruf der statischen Methode SVD gehandhabt wird (). die in der com.aliasi.matrix.SvdMatrix Klasse gefunden. Das Ergebnis ist eine Instanz der Klasse SvdMatrix. Wie wir bereits erwähnt, implementiert die SvdMatrix Klasse, um die Matrix-Schnittstelle durch die skalierten singulären Vektoren zu speichern und mit ihnen Werte zur Laufzeit zu berechnen.
Das letzte Stück des Codes berichtet über die sich ergebende Matrix SVD die ursprüngliche Anordnung von Werten und die Symboltabelle.
Das erste, was der Bericht Methode hat den Vektor der singulären Werte und Matrizen von singulären Vektoren herausziehen. Wir gehen dann nur durch die Faktoren (die Dimensionalität aller drei Arrays) und Bericht über den Einzelwert und Extremwerte. Die Extremwerte Berechnung ist einfach. Es nutzt unsere Bequemlichkeit Klasse util.ObjectToDoubleMap Karte von Symbol zu Zählungen zu erstellen, und meldet dann einfach auf den Spitzenwert. Beachten Sie, dass die Symboltabelle erforderlich, um die Dimension i zurück zu einem Symbol Token abzubilden.
Tuning SVD
Insgesamt SVD Parameter