LSA Verbindungen:
ist die komplette Algorithmus. Wenn du SVD hast, bist du am meisten da. Die obigen Papiere erklären es besser als ich.
Annahmen:
- Ihre SVD-Funktion werden die Einzelwerte und singulären Vektoren in absteigender Reihenfolge geben. Wenn nicht, musst du mehr Akrobatik machen.
M: corpus Matrix, w (Wörter) von d (Dokumente) (w Reihen, d Spalten). Dies können rohe Zahlen oder Tfidf oder was auch immer sein. Stoppwörter können oder können nicht eliminiert werden, und Stemming kann passieren (Landauer sagt halt Stoppwörter und stagnieren nicht, aber ja zu tfidf).
U,Sigma,V = singular_value_decomposition(M)
U: w x w
Sigma: min(w,d) length vector, or w * d matrix with diagonal filled in the first min(w,d) spots with the singular values
V: d x d matrix
Thus U * Sigma * V = M
# you might have to do some transposes depending on how your SVD code
# returns U and V. verify this so that you don't go crazy :)
Dann wird die reductionality .... die tatsächliche schlägt LSA Papier eine gute Näherung für die Basis genug Vektoren, so dass ihre Singulärwerte sind mehr als 50% der Gesamtfläche der Singulärwerte zu behalten ist.
Mehr erschöpfende ... (Pseudo-Code)
Let s1 = sum(Sigma).
total = 0
for ii in range(len(Sigma)):
val = Sigma[ii]
total += val
if total > .5 * s1:
return ii
Dies wird den Rang der neuen Basis zurückkehren, das war min (d, w) vor, und wir werden jetzt ungefähre mit {ii}.
(hier '-> Prime, nicht transponieren)
Wir schaffen neue Matrizen: U', Sigma 'V', mit Größen w x ii, ii x ii und ii x d.
Das ist die Essenz des LSA-Algorithmus.
Diese resultierende Matrix U '* Sigma' * V 'kann für eine' verbesserte 'Kosinusähnlichkeitssuche verwendet werden, oder Sie können zum Beispiel die oberen drei Wörter für jedes Dokument auswählen. Ob dies mehr als ein einfacher Tf-IDF ist, ist eine Frage der Debatte.
Für mich funktioniert LSA schlecht in realen Datensätzen aufgrund von Polysemie und Datensätzen mit zu vielen Themen. Ihre mathematische/probabilistische Basis ist nicht richtig (sie nimmt normal-ish (Gaußsche) Verteilungen an, was für Wortzählungen nicht sinnvoll ist).
Ihre Laufleistung wird definitiv variieren.
Tagging LSA verwendet (ein Verfahren!)
Konstrukt des U 'Sigma' V‘dimensional reduzierte Matrizen unter Verwendung von SVD und eine Reduktion heuristische
Von Hand, Blick über die U 'Matrix, und kommen Sie mit Begriffen, die jedes "Thema" beschreiben. Zum Beispiel, wenn die größten Teile dieses Vektors "Bronx, Yankees, Manhattan" waren, dann könnte "New York City" ein guter Ausdruck dafür sein. Behalte diese in einem assoziativen Array oder einer Liste. Dieser Schritt sollte vernünftig sein, da die Anzahl der Vektoren endlich sein wird.
Angenommen, Sie haben einen Vektor (v1) von Wörtern für ein Dokument, dann liefert v1 * t (U ') die stärksten' Themen 'für das Dokument. Wählen Sie die 3 höchsten und geben Sie ihre "Themen" wie im vorherigen Schritt berechnet.
„Ich habe bereits eine Implementierung für die Einzelwertzerlegung“ http://stackoverflow.com/questions/960060/singular-value-decomposition-svd-in-php – Ben
Sorry, ich habe den Link jetzt hinzugefügt. – caw
Was hat das mit PHP zu tun? – Novelocrat