2012-08-08 9 views
6

Okay, damit bin ich etwas verwirrt. Dies sollte jedoch eine einfache Frage sein.TF-IDF Einfache Verwendung - NLTK/Scikit Lernen

die TF-IDF Matrix des Dokuments gegen den gesamten Korpus Nach der Berechnung, bekomme ich ein Ergebnis sehr ähnlich wie diesen:

array([[ 0.85..., 0. ..., 0.52...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 0.55..., 0.83..., 0. ...], 
     [ 0.63..., 0. ..., 0.77...]]) 

Wie verwende ich dieses Ergebnis das ähnlichste Dokument gegen die Suche zu bekommen Abfrage? Im Grunde versuche ich eine Suchleiste für Wikipedia neu zu erstellen. Basierend auf einer Suchanfrage möchte ich die relevantesten Artikel aus Wikipedia zurückgeben. In diesem Szenario gibt es 6 Artikel (Zeilen) und die Suchanfrage enthält 3 Wörter (Spalten).

Summiere ich alle Ergebnisse in den Spalten oder addiere alle Zeilen? Ist der größere Wert der relevanteste oder ist der niedrigste Wert der relevanteste?

Antwort

4

Kennen Sie sich mit cosine similarity? Berechnen Sie für jeden Artikel (Vektor A) seine Ähnlichkeit mit der Abfrage (Vektor B). Dann rangieren Sie in absteigender Reihenfolge und wählen Sie das beste Ergebnis. Wenn Sie bereit sind, zu refactorieren, ist die gensim Bibliothek ausgezeichnet.

+1

Nun, ich befolge tatsächlich dieses Tutorial: http: //pyevolve.sourceforge.net/wordpress/?p=1589 ... Was nicht sinnvoll ist, ist die Verwendung von TF-IDF-Vektoren zwischen den Originalartikeln und der Suchanfrage . – tabchas

+1

Wenn Sie tf-idf als Ihr Gewichtungsschema verwenden, möchten Sie Ihre Abfrage dennoch normalisieren. Ihre Matrix enthält drei Begriffe, die alle in der Abfrage enthalten sind. somit ist der rohe Frequenzvektor der Abfrage (1,1,1). sqrt ((1^2) + (1^2) + (1^2)) = 1,73 und 1/1,73 = 0,57. Also ist Ihr Anfragevektor (0.57, 0.57, 0.57). Jetzt können Sie die Abfrage als ein anderes Dokument behandeln. Die Kosinusähnlichkeit dieses Query-Vektors und eines anderen Dokumentvektors ist sein Skalarprodukt. Für den ersten Artikel: ((.57 * .85) + (. 57 * 0) + (. 57 * .52)) = 0.2964. Wiederholen Sie dies für alle Artikel und die höchste Punktzahl gewinnt. – verbsintransit

+0

Also muss ich keinen Klassifikator trainieren? – tabchas