2010-01-07 14 views
6

Es tut mir leid, wenn meine Frage dumm klingt :) Können Sie mir bitte irgendwelche Pseudo-Code oder gute Algo für LSI-Implementierung in Java empfehlen? Ich bin kein Mathe-Experte. Ich habe versucht, einige Artikel auf Wikipedia und anderen Websites über LSI (Latent Semantic Indexing) zu lesen, sie waren voller Mathematik. Ich weiß, LSI ist voll von Mathematik. Aber wenn ich Quelltext oder Algo sehe. Ich verstehe Dinge mehr leicht. Deshalb habe ich hier gefragt, weil so viele GURU hier sind! Vielen Dank im VorausBrauchen Sie Hilfe in latente semantische Indexierung

+2

Duplizieren: http://stackoverflow.com/questions/1746568/latent-semantic-indexing-in-java –

+0

Danke Amit, aber wenn Sie meine Frage lesen. Es ist also anders. Selbst wenn Sie denken, dass es das gleiche ist, dann können Sie dort keine gute Antwort finden :) – user238384

+0

Müssen wir immer die Dimension in LSA reduzieren? Können wir nicht einfach die v-Matrix verwenden, um die Ähnlichkeit zwischen den Dokumenten und der u-Matrix zu finden, um die Ähnlichkeit zwischen den Begriffen zu finden? – CTsiddharth

Antwort

1

Dies vielleicht ein bisschen spät, aber ich mochte immer Sujit Pal's Blog http://sujitpal.blogspot.com/2008/09/ir-math-with-java-tf-idf-and-lsi.html und ich habe ein wenig auf meiner Website geschrieben, wenn Sie interessiert sind.

Der Prozess ist viel weniger kompliziert als es oft als geschrieben wird. Und wirklich alles, was Sie brauchen, ist eine Bibliothek, die Einzelwertzerlegung einer Matrix durchführen kann.

Bei Interesse kann ich in ein paar der kurzen wegzunehmen Bits erklären:

1) Sie eine Matrix/Datensatz erstellen/etc mit Wortanzahl von verschiedenen Dokumenten - die verschiedenen Dokumente Ihre Spalten und die Zeilen die einzelnen Wörter.

2) Sobald Sie die Matrix erstellt haben, verwenden Sie eine Bibliothek wie Jama (für Java) oder SmartMathLibrary (für C#) und führen die Einzelwertzerlegung aus. All dies macht Ihre ursprüngliche Matrix und zerlegt sie in drei verschiedene Teile/Matrix, die im Wesentlichen Ihre Dokumente, Ihre Wörter und Art eines Multiplikators (Sigma) darstellen, diese werden die Vektoren genannt.

3) Sobald Sie Wort, Dokument, Sigma-Vektoren haben, schrumpfen Sie sie gleich (k), indem Sie einfach kleinere Teile des Vektors/der Matrix kopieren und sie dann wieder zusammen multiplizieren. Indem Sie sie verkleinern, normalisieren Sie Ihre Daten und das ist LSI.

hier sind einige ziemlich klar Ressourcen:

http://puffinwarellc.com/index.php/news-and-articles/articles/30-singular-value-decomposition-tutorial.html

http://lsa.colorado.edu/papers/JASIS.lsi.90.pdf http://www.soe.ucsc.edu/classes/cmps290c/Spring07/proj/Flynn_talk.pdf

Hope this Sie Hilfe ein wenig aus.

Eric

+0

Hi, ich habe inzwischen viel gelernt. Aber trotzdem ist deine Antwort sehr hilfreich +1. Ich sah auch Sujit Pall Blog. Es ist gut, aber ich stimme nicht mit seinen Ergebnissen überein. Ich habe ihn gefragt, wenn es zwischen zwei Dokumenten keine Ähnlichkeiten gibt, warum es zu 100% gleich ist. Er konnte es nicht beantworten. Jetzt schaue ich, wie ich LDA anders als LSI verwenden kann. Ist es möglich, LDA für diesen Zweck zu verwenden? – user238384

13

Eine Idee von LSA auf einer Annahme basiert: die mehr zwei Worte kommen in denselben Dokumenten, desto ähnlicher sind sie sind. In der Tat können wir erwarten, dass die Worte "Programmierung" und "Algorithmus" in den gleichen Dokumenten viel häufiger vorkommt, als zB "Programmierung" und "Hundezucht".

Dasselbe gilt für Dokumente: Je häufiger/ähnliche Wörter zwei Dokumente haben, desto ähnlicher sind sie selbst. So können Sie die Ähnlichkeit der Dokumente nach den Häufigkeiten der Wörter und umgekehrt ausdrücken.

Mit diesem Wissen können wir eine Kookkurrenzmatrix, wo Spaltennamen repräsentieren Dokumente, Zeilennamen konstruieren - Wörter und jedes repräsentiert cells[i][j] Frequenz von Wort words[i] in Dokument documents[j]. Häufigkeit kann auf viele Arten berechnet werden, IIRC, Original LSA verwendet tf-idf Index.

Mit einer solchen Matrix können Sie die Ähnlichkeit von zwei Dokumenten durch Vergleich der entsprechenden Spalten finden.Wie vergleicht man sie? Auch hier gibt es mehrere Möglichkeiten. Am beliebtesten ist ein Kosinusabstand. Sie müssen sich an die Schulmathematik erinnern, dass Matrix als ein Bündel von Vektoren behandelt werden kann, so dass jede Spalte nur ein Vektor in einem mehrdimensionalen Raum ist. Deshalb heißt dieses Modell "Vector Space Model". Mehr über VSM und Kosinusabstand here.

Aber wir haben ein Problem mit solchen Matrix: Es ist groß. Sehr sehr groß. Mit ihm zu arbeiten ist zu rechenintensiv, also müssen wir es irgendwie reduzieren. LSA verwendet SVD Technik, um die "wichtigsten" Vektoren zu behalten. Nach der Reduktion ist die Matrix einsatzbereit.

So Algorithmus für LSA wird wie folgt aussehen:

  1. Collect alle Dokumente und alle eindeutigen Worte von ihnen.
  2. Extrakt Frequenzinformationen und bauen Co-Auftreten Matrix.
  3. Reduzieren Matrix mit SVD.

Wenn Sie selbst LSA Bibliothek schreiben wollen, die guten Punkt zu starten ist Lucene Suchmaschine, die viel einfacher Schritte machen 1 und 2, und einige Implementierung von hochdimensionalen Matrizen mit SVD-Fähigkeit wie Parallel Colt oder UJMP.

Achten Sie auch auf andere Techniken, die aus LSA gewachsen sind, wie Random Indexing. RI verwendet die gleiche Idee und zeigt ungefähr die gleichen Ergebnisse, verwendet jedoch nicht die vollständige Matrixstufe und ist vollständig inkrementell, wodurch es viel recheneffizienter wird.

+0

Hi ich habe in letzter Zeit an ISA gearbeitet. Müssen wir immer die Dimensionen der Diagonalmatrix reduzieren? Ich muss die Ähnlichkeit zwischen zwei Dokumenten finden. Ist es in Ordnung, wenn ich die v-Matrix allein nehme und sie verwende, um die Ähnlichkeit zu finden. Ich lese diesen Ansatz in diesem Papier: http://www.mislita.com/information-retrieval-tutorial/svd-lsi-tutorial-4-lsi-how-to-calculations.html – CTsiddharth

+0

@CTsiddharth: Wenn Sie nicht möchten, Ihre Dimensionalität zu reduzieren, gibt es keine Notwendigkeit in SVD und damit "V" Matrix überhaupt - Sie können Original-Begriff Dokument-Matrix verwenden, wie es ist. Die Dimensionalitätsreduzierung bietet Ihnen jedoch zwei große Vorteile: 1) Sie reduziert das Rauschen; 2) es macht Dokument Ähnlichkeitsberechnung viel schneller (weniger Elemente zu vergleichen). Es macht also Sinn, die volle Matrix für relativ kleine Korpora zu verwenden (zB <5000 Dokumente), für größere Dokumente benötigen Sie eine vollständige Dimensionsreduzierung (SVD + Auswahl k erster Vektoren). – ffriend

+0

In meinem Fall habe ich 35 Dokumente und etwa 1500 Wörter. Wenn ich eine SVD mache, wird die v-Matrix eine 35 * 35. Also kann ich diese 35 * 35-Matrix verwenden, um die Ähnlichkeit statt einer 1500 * 35 zu finden? Das war eine Frage, an die ich seit langem denke – CTsiddharth

1

Ich weiß, das ist viel zu spät :) Aber vor kurzem fand ich this link ziemlich hilfreich, um die Prinzipien zu verstehen. Notieren Sie es einfach, damit Leute, die danach suchen, es nützlich finden könnten.

derzeit suche ich nach einer ähnlichen Einführung in die probabilistische latente semantische Analyse/Indexierung. Weniger Mathematik und mehr Beispiele erklären die Prinzipien dahinter. Wenn jemand eine solche Einführung kennt, lass es mich wissen.